Why Fabric system channel migration comes before any v3.x upgrade
If your consortium runs a v2.5 Fabric network that still depends on the system channel, the system channel must be removed and ordering moved to the channel participation API before any v3.x upgrade. Fabric's documentation also describes v2.5 as the long-term support (LTS) release for production users, so this migration is a planning decision you can make on your own timeline rather than an emergency. The v2.5 and 3.x lines both receive patch releases in parallel, which means a network can stay on v2.5 for production while the migration is designed, tested and approved. On effort, the honest answer is that it depends. The main drivers are the number of channels the ordering service supports, the number of ordering organizations that must act together, and how much coordination those organizations need to agree on sequencing, certificates and change windows. A network with one channel and one ordering organization is a very different job from a multi-channel consortium where each ordering organization runs its own ordering nodes. Neither case should be estimated from this page. The work is scoped in writing before it starts, and the scope should state which channels, organizations and nodes are included.
The reason the order matters is that the v3.x line removes the legacy system channel process, so a v2.5 network that still relies on it cannot be upgraded in place. Fabric's documentation is explicit that networks still using the system channel in a version before v3.x must remove it and migrate to the channel participation API first. Treat this as a hard gate in your upgrade plan: no binary upgrade, rolling or otherwise, should be scheduled until every channel your ordering service serves is managed through the channel participation API and the system channel is gone. The practical consequence is that the migration has to be coordinated across the whole consortium. Each ordering organization must confirm which of its ordering nodes join which channels, and the sequence has to keep a healthy consensus quorum at every step. Ask your Fabric administrators to produce a written inventory of channels, ordering nodes and ordering organizations, with owners named for each. That inventory is the input to every later decision in this migration, and it is the first thing to check when you scope the work.
Because the channel participation API lets ordering nodes join or leave any number of channels, the target state is more flexible than the system channel model, but the flexibility also raises the chance of configuration drift. Before you plan the cutover, confirm three things with your Fabric vendor or internal platform team: the exact v2.5 patch level you run, the ordering consensus type in use (Raft is the service Fabric's documentation recommends for crash fault tolerance), and whether any ordering node has been configured outside the normal process. Each of these changes the test plan and the rollback path. Finally, plan for the risks that matter most in a regulated consortium: a failed step that leaves a channel without enough ordering nodes, a mismatch between organizations on what has been removed, and an audit trail that does not show who approved each change. Agree on rollback criteria, a backup of the ledger and MSPs before any change, and a sign-off from each ordering organization before the migration starts. The upgrade to v3.x can then proceed as a separate, later project.
What maps cleanly from the system channel to channel participation
This table compares how each system channel responsibility is handled under the channel participation API and marks where the migration is a direct translation and where the consortium must decide first. Read the migration notes before the equivalent column, because governance decisions set the order of work. The main takeaway is that channel-level membership maps directly, while organization changes and consortium removal depend on decisions made before any osnadmin command runs.
| System channel capability | Channel participation equivalent | Migration notes |
|---|---|---|
| Consortium definition and channel creation | Each application channel is created and joined through osnadmin, with its own configuration | Channel creation maps directly. Agree the consortium's organizations and policies first, then confirm how each channel stores them in your version |
| Ordering node membership | Ordering nodes join or leave any number of channels as needed | Direct per the Fabric docs. Decide which nodes serve which channels before migration starts |
| Adding ordering organizations | Organization added to each channel through that channel's configuration update | Not a one-step copy of the system channel change. Each channel needs its own agreed update and signatures |
| Removing ordering organizations | Organization removed channel by channel | Governance decision first. Agree which channels keep each organization before removing anything |
| Channel-level administration per ordering node | Each node's channel list and admin access managed with osnadmin | Inventory every node and channel, then confirm admin identities and TLS settings for osnadmin on your release |
| Consortium removal | No system channel remains once every channel runs on channel participation | Required before any v3.x upgrade. Confirm no channel still depends on the system channel |
What the system channel controls on a v2.5 network today
On a v2.5 network, the legacy system channel is the shared control point for the ordering service. It holds the ordering configuration and the consortium definition, meaning which organizations are members of the consortium and are therefore allowed to create application channels. Ordering nodes join this channel, so the set of ordering nodes, their administrators and the policies that govern changes to them are recorded in one place. Before you plan any migration, you need to know exactly what that channel currently holds, because every later step depends on it.
Ordering nodes and consortium membership depend on the system channel because changes to them are made through configuration updates to that channel. Adding or removing an ordering organization, changing which organizations may create channels, and altering the ordering node set all require signatures that satisfy the policies recorded there. In practice, this means the people and organizations who can sign those updates form your effective governance group for ordering. Confirm who holds the administrator and orderer signing roles today, whether those organizations still exist in the consortium, and whether any pending configuration updates are waiting for signatures.
The channel participation API changes this model. According to the Fabric docs, ordering nodes can join or leave any number of channels as needed, similar to how peers participate in multiple channels. Ordering node membership is therefore managed per channel instead of being defined once for the whole ordering service. Each channel carries its own ordering membership, which makes membership decisions more granular but also means that every channel must be checked individually. The exact transition steps and consortium handling are covered in the sections that follow, so this section is only about the starting state.
Start with an inventory of your current configuration. List every application channel, the ordering nodes and organizations serving each one, the consortium members recorded on the system channel, the policies that govern configuration changes, and the identities that can sign those changes. Record any channel where the ordering node set differs from what you expect, because those differences often surface during migration. The Fabric documentation requires networks that still use the system channel to remove it before upgrading to v3.x, so this inventory also defines the scope of the work. Verify each item against the Fabric documentation for your exact v2.5 release before you make changes.
Documented tools and paths for the channel participation API
The migration relies on a small set of documented tools. Each card covers one tool or reference point, and together they show how ordering nodes are joined to channels, how to check each node afterward, and where to confirm command details before you change a production network.
osnadmin and the channel participation API
osnadmin is the command-line tool that calls the channel participation API on an ordering node. With it, an ordering node can join or leave any number of channels, much as a peer participates in several channels. For this migration, the key check is that each ordering node in the consenter set is added to every channel it must serve before the system channel is removed. Record which nodes received each command, because sequencing across ordering organizations is set by your governance process, and the tool only carries out that decision.
Fabric create-channel documentation
The official create-channel guide for the channel participation API is the reference for each join, list and removal step in this migration. It describes how the orderer admin endpoint is reached, how the channel join input is supplied, and how a node's channel list is verified. Treat it as the authoritative sequence and compare every step against the Fabric version you run before executing it. Keep a dated copy of the page you used so the runbook matches the documentation that governs your production release.
Peer operations service endpoints
Each peer exposes the operations service with /healthz for health checks and /version for the running build. Use these after every change to a peer's channel membership or binaries to confirm the peer is up and reports the expected version. Access requires mutual TLS with a client certificate, so confirm which identity your runbook uses and that it is authorized on each peer. These endpoints verify state only. They do not join peers to channels or move ledger data, so each migration action still needs its own command and its own record.
Orderer operations service endpoints
Each ordering node exposes the same operations service paths, including /healthz and /version, along with a Prometheus /metrics endpoint or a StatsD push. After each join or leave, check that the node responds, reports the expected version and is still serving the channels it should. Compare metrics with your expected channel list, and confirm in the operations documentation which metric names report channel membership for your release. Treat these checks as verification aids only, because the channel changes themselves are made through the channel participation API.
Confirm command syntax for your version
The exact osnadmin flags, endpoint paths and request formats can differ between Fabric releases, so confirm each command against the documentation for the version you run. This migration moves a v2.5 network toward v3.x, and the 2.5 long-term support line receives patch releases alongside the 3.x line. Before the change window, have the engineer who runs the commands test the full sequence on a non-production network built from the same version. Record the version reported by /version on every node in the runbook so reviewers can match each command to a specific release.
How ordering organizations sequence joins and leaves
The order in which ordering organizations join and leave channels determines whether the ordering service keeps a quorum at every step. When several organizations each run ordering nodes for the same network, no single operator controls the whole cluster. A join or removal that is correct for one channel can still stall consensus if another organization's nodes are offline or have not yet been added to the consenter set. Before any node is touched, the consortium should agree on a written sequence that lists each channel, each ordering organization, the order of changes, and the change window. Each step should name who signs the channel configuration update under the channel's modification policy.
Each organization joins its own ordering nodes to a channel through the channel participation API, using the osnadmin tool. The node must be included in the channel's consenter set, and the joining organization must confirm which starting point its version supports, such as a genesis block or a ledger snapshot. The Fabric docs state that ordering nodes can join or leave any number of channels as needed, so organizations should plan per-channel membership rather than treating the ordering service as one unit. Ask each member to record which nodes serve which channels, along with their operations endpoints, so the consortium has a single current inventory before the migration starts.
Consortium members should agree on the sequence before the first change and keep the agreed order fixed during execution. A common approach is to add new ordering capacity first, confirm that every new node is healthy and synchronized, and only then remove the nodes being retired. Members should also agree on what happens if a step fails, including who can pause the sequence and how the group decides whether to roll back. Record these decisions in the migration runbook. Confirm with your Fabric version's documentation how consenter set changes are expressed in channel configuration, since the exact steps differ between releases and deployments.
A leaving organization must be removed in a way that preserves quorum for the Raft ordering service. The Fabric docs describe Raft as crash fault tolerant, working while a majority of nodes is available. As an illustrative example, a five node cluster tolerates the loss of two nodes. If one organization's two nodes are removed from that cluster, three nodes remain, which is still a majority, but a further failure would stop ordering. Removing nodes one at a time and checking the health endpoint, such as /healthz on the operations service, after each change keeps the margin visible. Plan removals so that no other planned maintenance overlaps with them, and do not stop a node until the channel configuration showing its removal is committed.
Sequence from inventory to removing the system channel
This sequence moves a v2.5 network off the legacy system channel and onto per-channel ordering node membership through the channel participation API, which must be complete before any v3.x upgrade. Each step closes with a check that the team can record and review with every ordering organization.
Inventory channels, members and ordering nodes
The network operator and each ordering organization list every application channel, the consortium members on each channel, the ordering nodes that serve the system channel and the channels each node currently hosts. The team records the owning organization, admin identities and TLS endpoints for every node. The step is done when all parties confirm the inventory matches the live network, and any gap, such as an unmanaged node or a channel with no named owner, is assigned an owner before work continues.
Back up ledgers and MSPs before any change
Before any configuration change, each organization backs up the ledgers on its peers and orderers and the MSP directories it uses, including signing and TLS material held as files. The Fabric upgrade guide lists this backup as its first step, and the same principle applies to this migration. The step is done when each backup has been restored in a test location or otherwise verified as readable, and the restore procedure and the person responsible for it are written down.
Confirm ordering service type and quorum
The team confirms which consensus type each ordering service uses and that it is Raft, since Fabric v3.0 removed Kafka and Solo. For Raft, they record the number of consenters per channel and the quorum that remains if one or more nodes are unavailable during the cutover. Any network still on Kafka must move to Raft first. The step is done when the consenter set and quorum for each channel are documented and every organization accepts that the cutover will not start while quorum is at risk.
Agree target membership per channel
With every ordering organization, the team agrees which ordering nodes will join each channel and which will leave, along with the order in which those changes happen. The channel participation API allows an ordering node to join or leave any number of channels, so the plan should state the target membership for each channel explicitly. The step is done when the written plan has been signed off by each organization and includes the rollback point for each channel.
Pilot joins and leaves on a non-production network
The team builds a non-production network that mirrors the production topology, including the same consensus type, channel names and organizations where practical. They run the agreed join and leave commands with osnadmin, check each result and test a rollback. Any command that behaves differently from the plan is written up and resolved in the plan before production work begins. The step is done when the pilot completes end to end and the team has a verified script for production with its expected output.
Run a parallel check of channel state and node health
Before the cutover, the team checks channel state and node health on production nodes in parallel with the existing configuration still running. They confirm each channel's block height and membership, the health endpoint and version reported by the operations service on every node, and the mutual TLS access used for those checks. The step is done when every node reports the expected state, the team has a record of the readings, and the agreed go or no-go decision has been made by each organization.
Execute cutover and remove the system channel
The team carries out the agreed joins and leaves in the agreed order, checking channel state after each change so that a failure can be contained. Once every channel shows the target membership, they remove the system channel and confirm that the network keeps accepting transactions, that ordering continues on each channel and that no node depends on the removed configuration. The step is done when the post-removal checks pass on all nodes and every organization confirms the network runs without the system channel.
Record evidence and decommission old configuration
The team stores the inventory, signed membership plan, pilot results, backup verification, parallel check readings and cutover logs in the change record, and each organization keeps its own copy. After a review period agreed in the plan, they retire the old system channel configuration and any scripts, files or credentials that only the legacy setup used. The step is done when the evidence set is complete, the old configuration is removed and the network is confirmed ready for the planned v3.x upgrade work.
What drives the cost and duration of this migration
This table compares the factors that change how much work the move from the system channel to the channel participation API takes, and what to request in a written quote. The cost components are assessment, design, pilot, cutover support and evidence, and the factors below change how much of each one is needed. No figures are supplied for these components, so request a written scope and quote before comparing partners or internal estimates.
| Driver | Why it changes effort | What to ask for in a quote |
|---|---|---|
| Number of channels | Each channel needs its own osnadmin join or leave, membership checks and verification, so effort grows with the channel count. | A channel-by-channel plan with sequencing and a per-channel verification checklist. |
| Ordering organizations and nodes | Every ordering organization must agree on sequencing and act on its own nodes within the same change window. | Named owners for each ordering organization and a coordinated change calendar. |
| Consensus type and Kafka ordering | Kafka ordering must move to Raft before the v3.x upgrade, which can add a separate workstream with its own testing. | Confirmation of any Kafka ordering in use and whether the Raft move is included in scope. |
| Consortium governance speed | Removing the system channel and updating consortium membership needs approval from each member, so slow decisions extend the schedule. | A decision timeline, named approvers and the person who signs the change record. |
| State of backups and MSPs | Current ledger and MSP backups define the rollback position, and missing or unverified backups add assessment and pilot work. | Backup verification in scope and a written statement of what is restored if cutover fails. |
| Test environment availability | A non-production network that mirrors channels and ordering nodes lets the pilot run before production, and without one the pilot takes longer. | Whether the partner builds the test network and who provides hosts, access and certificates. |
| Client applications on the network | Applications that submit transactions or query channels need checks for channel names, endpoints and certificates after the change. | An inventory of client applications, their test scripts and the owner who signs off each one. |
What goes wrong during removal and how to prevent it
Each failure below maps to a step in the removal sequence, so the check runs at the point where the damage would occur. Most of these risks come from changing ordering infrastructure that peers and client applications depend on while the network keeps transacting. Use the cards as a pre-change review and assign an owner to each prevention step before the first osnadmin command runs.
Removing the system channel too early
If the system channel is removed before every ordering organization has joined its ordering nodes to the new application channels, some nodes are left without a channel to serve. Peers and clients on those channels can then stop receiving blocks. Before any removal, confirm in writing that each ordering organization has joined its nodes to every channel it serves, and check each node's channel list directly. Keep the system channel in place until that check passes for all organizations.
Losing quorum during membership changes
Each join or leave changes the set of nodes that a channel's Raft cluster depends on. If too many nodes are unavailable at once, a channel loses its majority and stops ordering transactions. A five node Raft cluster tolerates the loss of two nodes, so a node taken offline for a change leaves less margin than normal operation. Change one ordering node at a time, confirm each affected channel still has a leader and the expected consenters, and pause if a second node becomes unavailable.
Skipping the ledger and MSP backup
The Fabric upgrade guide starts with a backup of the ledger and MSPs, and the same discipline applies before removing the system channel. Ledger data, channel configuration blocks and MSP material are what you restore from if a join or leave goes wrong. Back up every ordering and peer node before the first change, store the copies outside the node itself, and test a restore in a non-production environment. Record the backup location and checksum in the change record.
Inconsistent channel configuration across organizations
Each organization keeps its own copy of channel configuration and ordering node settings. If organizations hold different consenter addresses, TLS certificates or membership details for the same channel, joins can fail or nodes can disagree about who is in the channel. Agree one channel configuration per channel, compare consenter lists and certificates across all ordering organizations before any join, and store the agreed values in version control alongside the change approval.
Incomplete inventory of channels
A channel missing from the inventory can lose its ordering service once the system channel is gone. This risk is highest on networks that grew over several years or where channels were created by teams that have since moved on. List every channel reported by every ordering node and peer, match each one to its consenters and members, and mark inactive or retiring channels so each has an explicit decision before the system channel is removed.
Treating the change as one organization's task
The removal changes ordering nodes that other organizations operate, so no single organization can complete it alone. Each ordering organization runs its own joins on its nodes, and the consortium must agree on sequencing and the cutover window. Name an owner in each organization, agree the order of operations in a shared runbook, and require each organization to confirm its step in writing before the next step begins.
Why this must happen before the v3.x upgrade
Removing the system channel is a prerequisite for moving a Fabric network to the 3.x line. The Fabric documentation states that networks still using the legacy system channel in a release before v3.x, such as v2.5.x, must remove the system channel and migrate to the channel participation API before upgrading to v3.x. For a network on the v2.5 long-term support line, this work comes first and the upgrade comes after. Teams often plan the upgrade as one change window, but removing the system channel changes how every ordering node joins and leaves channels, so it needs its own plan, approvals and verification. Before you set dates, confirm the current patch levels of the v2.5 and v3.x lines on the official Fabric releases page, and plan against the exact patch you intend to run.
The v3.0 release removes more than the system channel. It also removes Solo and Kafka consensus and the v1.x legacy chaincode lifecycle. Any network that still orders transactions through Kafka must move that ordering service to Raft before the upgrade, and any channel that still runs chaincode under the v1.x lifecycle must move to the v2.x lifecycle. These are separate workstreams with their own owners. They are easy to overlook because they sit in orderer configuration and chaincode definitions, not in the channel setup itself. Inventory each orderer's consensus type and each channel's chaincode definitions now, so that a Kafka cluster nobody scheduled for replacement does not block the system channel removal halfway through.
The four documented upgrade steps are the stage that follows this work. They are: back up the ledger and MSPs, upgrade the orderer binaries in a rolling fashion, upgrade the peer binaries in a rolling fashion, and then update the application channel capability levels. Each step assumes the prerequisites above are already met. Capability levels change network behavior once they are raised, so the final step needs scheduling with every member organization and a documented rollback position before it starts. Plan the backup step around the ledger and MSP material you would need to restore on each ordering and peer node. Treat the capability update as a consortium governance decision as well as an operator task.
The decisions in this phase are sequencing and communication. Ordering organizations must agree the order in which each one joins its ordering nodes to each channel, and who signs each participation change. Document the target state for every channel, the verification you will run after each join or leave, and the fallback if a node fails to sync. The client side is less tightly coupled to the network upgrade: the Fabric Gateway client API is compatible with both v2.5 and v3.0, so client applications can move on their own schedule. Ask your internal team or implementation partner to confirm, against the Fabric documentation for your exact patch levels, which commands and checks apply to your network before anyone runs them in production.
Questions buyers ask about a Fabric system channel migration
How much does a Fabric system channel migration cost?
The cost depends on the written scope, not on a fixed rate. Most of the fee pays for discovery of your current channels and ordering nodes, planning of change windows, execution on each ordering organization's nodes, validation, rollback planning, documentation and knowledge transfer to your team. The migration itself is a one-time effort. Recurring costs appear only if you add a support or upkeep retainer for the patch releases that follow. The main cost drivers are the number of channels, the number of ordering organizations and ordering nodes, whether any ordering nodes still run Kafka, how many environments must be changed, and how much change control your organization requires. DeployOpen does not publish a price list. Ask for the quote to list cost by phase, state the assumptions about your environment, name who performs each task, and list what is excluded.
How long does the migration take, and what sets the timeline?
No fixed duration applies to every network, so the timeline comes from the scope. The main factors are how many ordering organizations must coordinate their nodes, how long each organization's change approval process takes, whether a test network exists, and how many channels must move. The date constraint is firm: the Fabric docs say a v2.5.x network that still uses the system channel must complete this migration before upgrading to v3.x. Confirm your exact patch level before planning, since the v2.5 LTS line and the 3.x line both received patch releases on June 18, 2026. Ask the provider for milestone dates tied to each organization's readiness, not one overall date.
What does our team need to provide during the migration?
Your team supplies access and decisions. Expect to provide named administrators from each ordering organization, administrative access to the ordering nodes you operate, current channel and consortium configuration, an inventory of MSP and TLS certificates, and change windows approved by your governance process. Before any change, your team should confirm that ledgers and MSPs are backed up, since Fabric's upgrade guidance starts with a backup. Someone with authority over consortium membership must approve each channel change. Your team also needs to monitor ordering nodes during the work, using the operations service health and log endpoints, and to review the outcome of each step before the next one starts.
Can our own engineers run this migration without outside help?
Your engineers can run it alone if they already operate Fabric ordering nodes, understand the consortium configuration and can coordinate with every ordering organization on the same schedule. The technical steps are not the main risk. The harder parts are the sequencing across organizations, handling a failed or delayed step on one node, and documenting the state of each channel so that the next step is safe. Teams without recent experience with the channel participation API often benefit from a rehearsal on a copy of the network first. Ask a potential partner which steps they would hand over, which they would perform with your staff watching, and how they would document the handover.
What happens if one ordering organization is slow to respond?
Each channel's move depends on the ordering nodes that serve it, so a slow organization can hold up the channels it serves while others are ready. The consortium should decide in advance how to proceed: whether to wait, whether to set a deadline for that organization, and who escalates the issue. Fabric's consensus design affects how much headroom remains during the work. A Raft cluster keeps working while a majority of its nodes are available, and a five node Raft cluster tolerates the loss of two nodes. A BFT cluster tolerates failures of up to, but not including, one third of its ordering nodes. Ask the provider to include a written escalation path, a decision point for each channel, and the rule for pausing work.
Can we test the migration on a non-production network first?
Yes, and testing first is the safer approach. A rehearsal should use the same Fabric version, the same ordering topology and a copy of the consortium configuration. The test should cover joining and leaving channels, confirming that peers and client applications still submit and read transactions, checking health and log endpoints on each ordering node, and rehearsing the rollback. If you lack a test network, ask whether the provider can build one in your infrastructure. DeployOpen also runs private cyber ranges, which can host a rehearsal environment. Ask for the test scope in writing, including what the rehearsal does not prove, such as behavior under your production load.
What should a written scope for this migration include?
A written scope should name every ordering organization, every channel, and every ordering node in the migration, along with the Fabric versions that run on each. It should list the deliverables: the pre-migration backup verification, the rehearsal results, the executed changes, the post-change validation, the runbook, and the handover. It should state the responsibilities of each party, the change windows, the escalation path for a delayed organization, and the rollback criteria. Ask for exclusions in writing, including upgrades to v3.x, which are a separate effort. DeployOpen plans most engagements as fixed scope, with deliverables and timelines agreed before work starts. Ongoing support and upgrades can be added as a retainer.
How DeployOpen scopes and delivers the migration
DeployOpen plans this migration as a fixed-scope engagement covering each ordering organization, channel and node in your Fabric v2.5 network. The work runs inside infrastructure you control, with the system channel removal and channel participation API steps agreed in writing before any change is made to production ordering.
How we scope
- Inventory the current system channel, every ordering node, and each application channel it governs.
- Confirm which ordering organizations must sign each consortium and channel change before work starts.
- Agree the written scope, deliverables and timeline with your team before any production change is made.
How we build
- Rehearse the osnadmin join and leave sequence in a non-production network that mirrors your topology.
- Test channel membership, ledger continuity and client access after each ordering node is moved.
- Document each approval, configuration change and rollback point as the migration proceeds.
How we hand over
- Deliver a runbook listing each channel, ordering node and the osnadmin commands used.
- Provide evidence of the final state, including confirmation that the system channel is removed.
- Record a go or no-go checkpoint for the v3.x upgrade so your team can plan that work separately.
How we support
- Offer ongoing support, upgrades and continuous testing as a retainer after the migration closes.
- Review ordering node health, certificate expiry and patch releases on the 2.5 LTS line with your team.
- Advise on the sequencing of the later v3.x upgrade, including the four-step upgrade guide steps.

