From 64d4e128c9ab8a537371c2f41cb473e83787ebc9 Mon Sep 17 00:00:00 2001 From: Shwetha Rao Date: Fri, 9 May 2025 15:40:00 +0530 Subject: [PATCH 01/26] first commit --- modules/learn/pages/clusters-and-availability/rebalance.adoc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/learn/pages/clusters-and-availability/rebalance.adoc b/modules/learn/pages/clusters-and-availability/rebalance.adoc index 55894d78ea..6594dd7978 100644 --- a/modules/learn/pages/clusters-and-availability/rebalance.adoc +++ b/modules/learn/pages/clusters-and-availability/rebalance.adoc @@ -228,6 +228,10 @@ This setting has no effect if you have enabled file-based index rebalancing. Users with Full Admin or Cluster Admin roles can change the batch size using the REST API. See xref:rest-api:rest-modify-index-batch-size.adoc[Modify Index Batch Size]. +[#smart-batching] +==== Smart Batching + + [#rebalancing-the-search-service] === Search Service From 3c1cefbd5c10c9b845203507974d1f15c3774cc8 Mon Sep 17 00:00:00 2001 From: Shwetha Rao Date: Fri, 9 May 2025 16:35:30 +0530 Subject: [PATCH 02/26] smart-batching --- .../clusters-and-availability/rebalance.adoc | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/modules/learn/pages/clusters-and-availability/rebalance.adoc b/modules/learn/pages/clusters-and-availability/rebalance.adoc index 6594dd7978..ad6117ece0 100644 --- a/modules/learn/pages/clusters-and-availability/rebalance.adoc +++ b/modules/learn/pages/clusters-and-availability/rebalance.adoc @@ -231,6 +231,22 @@ See xref:rest-api:rest-modify-index-batch-size.adoc[Modify Index Batch Size]. [#smart-batching] ==== Smart Batching +During a rebalance process, indexes are relocated and rebuilt in batches. +The default batch size is 3 to set a limit on the amount of work attempted concurrently. + +In Couchbase Server 7.1 and later versions, you can use smart batching with one or more of the following purposes: + +* Reduces further time and resources required to move the index metadata. +* Rebuilds indexes at their new locations during rebalance. +* Increases rebalance performance by increasing pipeline parallelism by starting the next batch when the previos batch is only partially completed. +* Allows the increase of overall concurrency by using administrator-determined modifications of the batch size. +* Optimizes the sharing of data streams where index relocation takes place. +* Repairs, prior to index relocation, index replicas lost due to node failure. +* When appropriate, reassigns scheduled index-rebuilding from one batch to the next, to balance the workloads. + +If at least one node in the cluster is running a Server version 7.1+ then most of the smart-batching features apply to the cluster where some of the nodes are running an earlier version. + +You can change the default batch size of 3 by the Full Admin and Cluster Admin roles using the REST API. For information, see xref:rest-api:rest-modify-index-batch-size.adoc[Modify Index Batch Size]. [#rebalancing-the-search-service] === Search Service From 1756d916097050698e729afd1d6712ddf96a60e5 Mon Sep 17 00:00:00 2001 From: Shwetha Rao Date: Fri, 9 May 2025 17:03:36 +0530 Subject: [PATCH 03/26] added-file-based-rebalance-note --- .../pages/clusters-and-availability/failover.adoc | 6 +++--- .../pages/clusters-and-availability/rebalance.adoc | 14 +++++++++----- .../pages/manage-settings/general-settings.adoc | 5 ++++- modules/rest-api/pages/post-settings-indexes.adoc | 2 ++ .../pages/rest-modify-index-batch-size.adoc | 2 ++ 5 files changed, 20 insertions(+), 9 deletions(-) diff --git a/modules/learn/pages/clusters-and-availability/failover.adoc b/modules/learn/pages/clusters-and-availability/failover.adoc index 3d9d014e92..ed721adde0 100644 --- a/modules/learn/pages/clusters-and-availability/failover.adoc +++ b/modules/learn/pages/clusters-and-availability/failover.adoc @@ -27,9 +27,9 @@ Graceful failover _must_ be manually initiated. Hard failover _can_ be manually Hard failover can also be initiated automatically by Couchbase Server: this is known as _automatic_ failover. The Cluster Manager detects the unavailability of a node, and duly initiates a _hard_ failover, without administrator intervention. - -Note that when a node is failed over (as opposed to _removed_), some replica vBuckets are lost from the surviving nodes; since some are promoted to _active_ status, and are not replaced with new replica-copies. -By contrast, xref:learn:clusters-and-availability/removal.adoc[removal] creates new copies of those replica vBuckets that would otherwise be lost. This maintains the cluster's previous level of data-availability; but results in greater competition for memory resources, across the surviving nodes. +NOTE: When a node is failed over (as opposed to _removed_), some replica vBuckets are lost from the surviving nodes; since some are promoted to _active_ status, and are not replaced with new replica-copies. +By contrast, xref:learn:clusters-and-availability/removal.adoc[removal] creates new copies of those replica vBuckets that would otherwise be lost. +This maintains the cluster's previous level of data-availability; but results in greater competition for memory resources, across the surviving nodes. Ideally, after any failover, xref:learn:clusters-and-availability/rebalance.adoc[rebalance] should be performed. This is especially important when a Data Service node has been failed over, since the rebalance will ensure an optimal ratio of active to replica vBuckets across all the remaining Data Service nodes. diff --git a/modules/learn/pages/clusters-and-availability/rebalance.adoc b/modules/learn/pages/clusters-and-availability/rebalance.adoc index ad6117ece0..96699e6ad1 100644 --- a/modules/learn/pages/clusters-and-availability/rebalance.adoc +++ b/modules/learn/pages/clusters-and-availability/rebalance.adoc @@ -145,6 +145,8 @@ The Index Service maintains a cluster-wide set of index definitions and metadata The rebalance process takes into account the nodes' CPU, RAM, and disk bandwidth to limit its effect on database performance. +NOTE: Shard Based Rebalance and Rebalance Based on File Transfer are synonyms for File-based Rebalance. + [#index-rebalance-methods] ==== Index Rebalance Methods @@ -231,22 +233,24 @@ See xref:rest-api:rest-modify-index-batch-size.adoc[Modify Index Batch Size]. [#smart-batching] ==== Smart Batching -During a rebalance process, indexes are relocated and rebuilt in batches. -The default batch size is 3 to set a limit on the amount of work attempted concurrently. +During a Rebalance operation, Couchbase Server breaks the rebuilding process into batches to limit the performance impacts. + +The default batch size is set to 3 applying a limit on the amount of work attempted concurrently. In Couchbase Server 7.1 and later versions, you can use smart batching with one or more of the following purposes: * Reduces further time and resources required to move the index metadata. * Rebuilds indexes at their new locations during rebalance. -* Increases rebalance performance by increasing pipeline parallelism by starting the next batch when the previos batch is only partially completed. +* Increases rebalance performance by increasing pipeline parallelism by starting the next batch when the previous batch is only partially completed. * Allows the increase of overall concurrency by using administrator-determined modifications of the batch size. * Optimizes the sharing of data streams where index relocation takes place. * Repairs, prior to index relocation, index replicas lost due to node failure. * When appropriate, reassigns scheduled index-rebuilding from one batch to the next, to balance the workloads. -If at least one node in the cluster is running a Server version 7.1+ then most of the smart-batching features apply to the cluster where some of the nodes are running an earlier version. +If at least one node in the cluster is running a Server version 7.1+ then most of the smart batching features apply to the cluster where some of the nodes are running an earlier version. -You can change the default batch size of 3 by the Full Admin and Cluster Admin roles using the REST API. For information, see xref:rest-api:rest-modify-index-batch-size.adoc[Modify Index Batch Size]. +You can change the default batch size of 3 by the Full Admin and Cluster Admin roles using the REST API. +For information, see xref:rest-api:rest-modify-index-batch-size.adoc[Modify Index Batch Size]. [#rebalancing-the-search-service] === Search Service diff --git a/modules/manage/pages/manage-settings/general-settings.adoc b/modules/manage/pages/manage-settings/general-settings.adoc index 0c534e5a32..abe4e5a316 100644 --- a/modules/manage/pages/manage-settings/general-settings.adoc +++ b/modules/manage/pages/manage-settings/general-settings.adoc @@ -313,12 +313,15 @@ During an upgrade, mixed mode clusters with nodes that support bloom filters wil [#file-based-index-rebalance] * *File Transfer Based Rebalance*: -Controls whether Couchbase Server rebuilds indexes or copies them between nodes. +Controls whether Couchbase Server rebuilds indexes or copies them between nodes. +Use the **Enable File Transfer Based Rebalance** checkbox to enable or disable the File Transfer Based Rebalance from the UI. The default cleared setting has an Index Server node rebuild any newly assigned index during a rebalance. You cannot enable file-based rebalance when you have enabled Memory Optimized Index Storage. When you select this option, Couchbase Server copies the index files from one Index Server node to another during a rebalance instead of rebuilding them. See xref:learn:clusters-and-availability/rebalance.adoc#index-rebalance-methods[Index Rebalance Methods]. + +NOTE: Shard Based Rebalance and Rebalance Based on File Transfer are synonyms for File-based Rebalance. ++ You can disable this feature from the UI or via REST API. To learn about disabling this feature via REST API, see xref:rest-api:post-settings-indexes.adoc#disable-file-transfer-based-rebalance[Curl Command to Disable the File Transfer Based Rebalance]. This feature is disabled by default. + WARNING: Disabling this feature slows down the Rebalance operation. diff --git a/modules/rest-api/pages/post-settings-indexes.adoc b/modules/rest-api/pages/post-settings-indexes.adoc index bb6e2baf85..88a826b79d 100644 --- a/modules/rest-api/pages/post-settings-indexes.adoc +++ b/modules/rest-api/pages/post-settings-indexes.adoc @@ -161,6 +161,8 @@ include::example$post-settings-indexes.jsonc[] The following command disables the File Transfer Based Rebalance (`enableShardAffinity`) feature in the xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Index Storage Mode]. +NOTE: Shard Based Rebalance and Rebalance Based on File Transfer are synonyms for File-based Rebalance. + [source#example-curl,bash] ---- include::example$post-settings-indexes.sh[tag=disable-ftb-rebalance] diff --git a/modules/rest-api/pages/rest-modify-index-batch-size.adoc b/modules/rest-api/pages/rest-modify-index-batch-size.adoc index 2f39e7943b..6091e644d4 100644 --- a/modules/rest-api/pages/rest-modify-index-batch-size.adoc +++ b/modules/rest-api/pages/rest-modify-index-batch-size.adoc @@ -5,6 +5,8 @@ {description} +NOTE: Shard Based Rebalance and Rebalance Based on File Transfer are synonyms for File-based Rebalance. + == HTTP Method and URI ---- From 66e43d7410d7ed0cb2e54f9bb732e2c192d483e1 Mon Sep 17 00:00:00 2001 From: Shwetha Rao Date: Mon, 10 Nov 2025 17:45:24 +0530 Subject: [PATCH 04/26] Added all contents except flow diagrams --- modules/ROOT/nav.adoc | 1 + .../pages/upgrade-feature-availability.adoc | 2 +- .../partials/new-features-76.adoc | 2 +- .../partials/new-features-76_2.adoc | 2 +- .../clusters-and-availability/failover.adoc | 9 +- .../rebalance-and-index-service.adoc | 469 ++++++++++++++++++ .../clusters-and-availability/rebalance.adoc | 107 +--- .../manage-settings/general-settings.adoc | 4 +- .../rest-api/pages/post-settings-indexes.adoc | 4 +- .../pages/rest-modify-index-batch-size.adoc | 2 +- preview/DOC-13173-preview.yml | 28 ++ 11 files changed, 513 insertions(+), 117 deletions(-) create mode 100644 modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc create mode 100644 preview/DOC-13173-preview.yml diff --git a/modules/ROOT/nav.adoc b/modules/ROOT/nav.adoc index f3e4380c44..3f39f66d64 100644 --- a/modules/ROOT/nav.adoc +++ b/modules/ROOT/nav.adoc @@ -69,6 +69,7 @@ include::third-party:partial$nav.adoc[] ** xref:learn:clusters-and-availability/size-limitations.adoc[Size Limits] ** xref:learn:clusters-and-availability/nodes.adoc[Nodes] *** xref:learn:clusters-and-availability/rebalance.adoc[Rebalance] + **** xref:learn:clusters-and-availability/rebalance-and-index-service.adoc[Rebalance and Index Service] *** xref:learn:clusters-and-availability/removal.adoc[Removal] *** xref:learn:clusters-and-availability/failover.adoc[Failover] **** xref:learn:clusters-and-availability/graceful-failover.adoc[Graceful] diff --git a/modules/install/pages/upgrade-feature-availability.adoc b/modules/install/pages/upgrade-feature-availability.adoc index e105d4b3cc..2f7a31757c 100644 --- a/modules/install/pages/upgrade-feature-availability.adoc +++ b/modules/install/pages/upgrade-feature-availability.adoc @@ -22,7 +22,7 @@ _Not usable in mixed mode_ indicates that cluster-upgrade must be fully complete |=== | Feature | Whether Usable in Mixed Mode -| xref:learn:clusters-and-availability/rebalance.adoc#index-rebalance-methods[File-based Index Rebalancing] +| xref:learn:clusters-and-availability/rebalance-and-index-service.adoc#index-rebalance-methods[] | You cannot enable file-based index rebalancing until all nodes have upgraded to version 7.6 or later. | xref:learn:data/scopes-and-collections.adoc[Scopes & Collections] diff --git a/modules/introduction/partials/new-features-76.adoc b/modules/introduction/partials/new-features-76.adoc index 2d34a11d66..ccb292427b 100644 --- a/modules/introduction/partials/new-features-76.adoc +++ b/modules/introduction/partials/new-features-76.adoc @@ -150,7 +150,7 @@ See xref:manage:monitor/set-up-prometheus-for-monitoring.adoc[Configure Promethe * You can choose to have the rebalance process move an index's files between nodes instead of rebuilding them from scratch. This setting improves rebalance performance as moving the files is faster than rebuilding them. -See xref:learn:clusters-and-availability/rebalance.adoc#index-rebalance-methods[Index Rebalance Methods]. +See xref:learn:clusters-and-availability/rebalance-and-index-service.adoc#index-rebalance-methods[]. === Search Service diff --git a/modules/introduction/partials/new-features-76_2.adoc b/modules/introduction/partials/new-features-76_2.adoc index f4dee51fa7..f285aee8ac 100644 --- a/modules/introduction/partials/new-features-76_2.adoc +++ b/modules/introduction/partials/new-features-76_2.adoc @@ -63,7 +63,7 @@ For details, see xref:n1ql:n1ql-language-reference/createindex.adoc[CREATE INDEX * In Couchbase Server Versions 7.6.0 and 7.6.1, enabling file-based index rebalance prevented you from controlling which Index Service nodes contain an index. Version 7.6.2 removes this restriction. You can now use the `WITH ` clause of the `CREATE INDEX` {sqlpp} statement when your cluster has file-based index rebalancing enabled. -See xref:learn:clusters-and-availability/rebalance.adoc#index-rebalance-methods[Index Rebalance Methods] for more information. +See xref:learn:clusters-and-availability/rebalance-and-index-service.adoc#index-rebalance-methods[] for more information. + NOTE: You still cannot use the `WITH ` clause with the `ALTER INDEX` statement when your cluster has file-based index rebalancing enabled. diff --git a/modules/learn/pages/clusters-and-availability/failover.adoc b/modules/learn/pages/clusters-and-availability/failover.adoc index ed721adde0..ccd2759f51 100644 --- a/modules/learn/pages/clusters-and-availability/failover.adoc +++ b/modules/learn/pages/clusters-and-availability/failover.adoc @@ -27,9 +27,11 @@ Graceful failover _must_ be manually initiated. Hard failover _can_ be manually Hard failover can also be initiated automatically by Couchbase Server: this is known as _automatic_ failover. The Cluster Manager detects the unavailability of a node, and duly initiates a _hard_ failover, without administrator intervention. -NOTE: When a node is failed over (as opposed to _removed_), some replica vBuckets are lost from the surviving nodes; since some are promoted to _active_ status, and are not replaced with new replica-copies. -By contrast, xref:learn:clusters-and-availability/removal.adoc[removal] creates new copies of those replica vBuckets that would otherwise be lost. -This maintains the cluster's previous level of data-availability; but results in greater competition for memory resources, across the surviving nodes. +NOTE: When a node is failed over, some replica vBuckets on the remaining nodes are promoted to active status but are not recreated as new replicas. +As a result, the cluster temporarily loses those replica copies. ++ +In contrast, when a node is removed, the cluster automatically restores any replica vBuckets that would otherwise be lost during xref:learn:clusters-and-availability/removal.adoc[removal]. +This preserves the cluster’s data availability level, but increases memory resource usage on the surviving nodes. Ideally, after any failover, xref:learn:clusters-and-availability/rebalance.adoc[rebalance] should be performed. This is especially important when a Data Service node has been failed over, since the rebalance will ensure an optimal ratio of active to replica vBuckets across all the remaining Data Service nodes. @@ -180,7 +182,6 @@ For example, Couchbase Server considers a node running Analytics, Indexing, and If one is available, Couchbase Service always chooses an the cluster's xref:learn:clusters-and-availability/cluster-manager.adoc#master-services[Master Services] to host the active Master Service. Arbiter nodes do not run any services, and are therefore perfect candidates for hosting the Master Service. - [#node-removal] == Node Removal diff --git a/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc b/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc new file mode 100644 index 0000000000..e6688f4211 --- /dev/null +++ b/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc @@ -0,0 +1,469 @@ += Rebalance and Index Service +:description: pass:q[This page describes how rebalance operations impact the Index Service in Couchbase Server, covering file-based rebalance, shard affinity, index redistribution, and node failover.] +:page-aliases: clusters-and-availability:rebalance +:page-toclevels: 3 + +[abstract] +{description} + +Rebalance affects different services differently. +The effects on Index Service are described below. + +[#rebalancing-the-index-service] +== Index Service + +The Index Service maintains a cluster-wide set of index definitions and metadata, which allows the redistribution of indexes and index replicas during a rebalance. + +The rebalance process takes into account the nodes' CPU, RAM, and disk bandwidth to limit its effect on database performance. + +NOTE: Shard Based Rebalance and Rebalance Based on File Transfer are synonyms for File-based Rebalance. + +[#index-rebalance-methods] +== Index Service Rebalance + +By default, Couchbase Server rebuilds the indexes in their new locations during a rebalance. + +=== File-Based Rebalance (FBR) or Shard Based Rebalance + +If your cluster uses xref:learn:services-and-indexes/indexes/storage-modes.adoc#standard-index-storage[Standard Index Storage], you can choose to enable file-based rebalance which moves index files between nodes instead of rebuilding them. +Copying the index files is faster than having the target node rebuild the index from scratch. +You cannot use file-based rebalance if you have enabled xref:learn:services-and-indexes/indexes/storage-modes.adoc#memory-optimized-index-storage[Memory Optimized Index Storage] because this option does not store index metadata in files. + +The following are the internal parts of file-based rebalance: + +* *Shard Affinity:* It decides shard placement, so index partitions share the same shard ID. +* *Shard Based Rebalance:* It moves those shard files during rebalance. + +Couchbase Capella defaults to FBR. + +To learn how to enable file-based rebalance via the Couchbase Server Web Console, see File Transfer Based Rebalance under xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Index Storage Mode]. To learn how to enable it via the REST API, see the `enableShardAffinity` parameter in xref:rest-api:post-settings-indexes.adoc[]. + +// Remove after the 7.x series. +ifeval::['{page-component-version}' == '7.6'] +NOTE: In Couchbase Server versions 7.6.0 and 7.6.1, when you enabled file-based rebalance you could not choose which Index Service nodes would contain an index when using the `CREATE INDEX` statement. +In Couchbase Server 7.6.2 and later, you can use the `WITH ` clause to set which node contains the index. +You still cannot use the `WITH ` clause with `ALTER INDEX` after you enable file-based rebalance. +endif::[] + +=== When File-Based Rebalance Take Effect + +The FBR method uses metadata in the index's files during the relocation process. + +For Self-Managed Clusters, File-Based Rebalance is disabled by default. + +For Couchbase Capella (Provisioned Clusters), File-Based Rebalance is enabled by default. +It can be disabled through a support request. +The on and off behavior is the same as in self-managed clusters. + +When Couchbase Server starts using FBR for an index depends on whether the index's files contains this metadata: + +* (Best practice) If you enable FBR before you create an index, Couchbase Server adds the metadata to the index files while creating them. +Because this metadata is in the index's files from the start, the initial rebalance of the index as well as all later rebalances use the file-based rebalance method. +If you choose to use FBR, your best practice is to enable it before you create any indexes. + +* If you enable FBR after you have created an index, Couchbase Server does not use the file-based rebalance method the next time it rebalances that index. +Instead, the next rebalance process still rebuilds the index. +During this rebuild, Couchbase Server adds the metadata to the index files to enable file-based rebalance. +After this initial rebalance, all later rebalances of the index use the file-based rebalance method. ++ +[#build-indexes-via-swap-rebalance] +If you enable File-Based Rebalance on a cluster with existing indexes, those indexes do not have shard affinity. +To establish shard affinity, rebuild all indexes once, for example, by performing a full swap-rebalance cycle as follows: ++ +-- +.. Select a source node (N1), add a new destination node (S), and perform a swap rebalance (remove N1, add S). ++ +All indexes from N1 are rebuilt on S using the DCP-based method, which adds the required shard affinity metadata. + +.. Add N1 back as an empty node and repeat the swap rebalance with the next node (N2). + +.. Continue this process for all nodes in the cluster until every index has been moved once. ++ +This operation rewrites the indexes with shard affinity. ++ +After the cycle completes, all indexes have shard affinity, and future index movements use File-Based Rebalance (FBR). +-- ++ + +* If you disable FBR: During a rebalance, index movements use the traditional DCP-based method, +which reads data from the Data Service and rebuilds the index from scratch on the destination node through a xref:learn:clusters-and-availability/rebalance-and-index-service.adoc#build-indexes-via-swap-rebalance[full swap rebalance]. + +* If you disable shard affinity on a cluster, future rebalances use the DCP-based method, and shard affinity is no longer guaranteed. + +==== Working on FBR in Common Operations + +Working of FBR during the following common operations: + +* Adding Capacity (Scale-Out): + ++ +-- +.. When a new index node is added to the cluster and a rebalance is triggered, the system may move indexes to the new node to balance the load. + +.. Source nodes remain online and continue serving queries while the index movement occurs in the background. + +.. The index files are copied to the destination node, which then catches up on any data changes that occurred during the transfer. + +.. After synchronization, the index on the destination node becomes active, and the original index on the source node is removed. +-- ++ +An example of adding capacity is as follows: ++ +-- +.. A cluster contains two index nodes, I1 and I2. +Add a new destination node, I3, and trigger a rebalance. + +.. During the rebalance, an index such as idx_A on source node I1 is moved to I3 by copying its shard file. +Other indexes that share the same shard are also moved to I3 as part of the same operation. + +.. While the copy is in progress, I1 continues to serve queries for idx_A. +After I3 synchronizes and catches up with recent changes, it takes over query processing for idx_A, and the original index on I1 is removed. +-- + +* Planned Node Removal (Rebalance-Out): + ++ +-- +.. When a node is marked for removal and a rebalance is triggered, the rebalance process moves all indexes from the source node to other nodes in the cluster. +Entire shards are transferred as part of this operation. + +.. The process does not interrupt service—queries remain available throughout. + +.. After synchronization completes and the destination nodes begin serving the indexes, the source node can be safely removed from the cluster. +-- ++ +An example of planned node removal is as follows: ++ +-- +.. A cluster includes 3 index nodes: I1, I2, and I3. +You plan to decommission I3. + +.. During rebalance, indexes on the source node I3 are moved to the destination nodes I1 and I2. +For example, idx_B on I3 is moved to I1, and idx_C on I3 is moved to I2, along with all other indexes that share the same shards. + +.. After all index movements are complete, I3 is safely removed from the cluster. +-- + +* Swap Rebalance (One-for-One Replacement): ++ +-- +.. An existing node O is replaced by a new node R. + +.. During rebalance, all indexes on the source node O are moved to the destination node R by copying their shard files. +No other index movements occur when Optimize Index Placement is disabled. + +.. The source node O continues to serve queries during the transfer. +After the File-Based Rebalance (FBR) completes and the destination node R catches up with new mutations, +it takes over serving the indexes, and the source node O is removed from the cluster. +-- ++ +An example of swap rebalance is as follows: ++ +-- +.. In a cluster with nodes I1, I2, and I3, you plan to replace the source node I1 with a new destination node N1. + +.. If I1 hosts indexes idx_A and idx_B, they are moved to N1 using File-Based Rebalance (FBR). +During the transfer, I1 continues to serve queries. + +.. After the rebalance completes, N1 becomes fully active, and I1 is removed from the cluster with no downtime. +-- + +=== Restarting a Rebalance + +If a file-based rebalance fails, you can try starting a new rebalance. +The second rebalance does not re-transfer any index that the failed rebalance finished moving. +Instead, it moves just the indexes that had not moved or were in the process of moving when the error occurred. + +You enable file-based rebalance using settings located under the under the xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Index Storage Mode] on the Couchbase Server Web Console's Settings page. +You can also enable it using the REST API's xref:manage:manage-settings/general-settings.adoc#index-settings-via-rest[`settings/indexes` endpoint]. + +=== Shard Affinity + +Plasma, the storage engine for Global Secondary Indexes (GSI), stores data in shards. +Each shard is a set of on-disk files that can contain multiple index partitions. +Sharing shard files across indexes reduces overhead and improves index scalability. +In earlier versions, Plasma automatically places each index partition into a shard. + +With shard affinity, the GSI layer assigns a shard slot or alternate shard ID to each index partition and passes it to Plasma. +Plasma stores the data in that specific shard on the node. +Plasma is unaware of the cluster layout and high-availability (HA) constraints, so the GSI layer makes this decision. +This ensures that the replicas are distributed across nodes or server groups and that matching replicas align on the same shard slot. +This approach does the following: + +* Provides deterministic collocation, where all indexes with the same shard ID share the same shard files. +* Prevents replica-on-same-node conflicts. +* Enables efficient data movement through file-based rebalance. + +Shard affinity keeps all index partitions with the same shard ID on the same node and moves them as a single unit during index rebalancing. +This behavior also applies to internal data structures associated with those shards, which remain collocated and move together. + +==== Relationship Between Shard Affinity and File-Based Rebalance + +The Shard Affinity is related to File-Based Rebalance or Shard Based Rebalance in the following ways: + +* Because partitions with the same shard ID reside in the same shard file, a rebalance can relocate them by copying that file to another node. + +* Without shard affinity, partitions of the same logical shard may be spread across multiple files or nodes, +making File-Based Rebalance inefficient and forcing the system to use the slower DCP rebuild method. +For this reason, a single configuration setting enables both shard affinity and File-Based Rebalance. + + +[#index-redistribution] +=== Index Redistribution + +Couchbase Server can redistribute indexes during rebalance. Redistributing indexes can improve performance by offloading heavily loaded nodes. A rebalance automatically redistributes indexes in the following situations: + +Rebalance when you add an index node:: +Rebalance always moves indexes off of nodes that you're removing from the cluster to the remaining nodes. +A rebalance does not affect indexes that reside on nodes that you're not removing. + +Rebalance when you add and remove index nodes:: +A swap rebalance moves indexes from nodes you're removing and places them on the nodes you're adding. + +You can change a setting to have a rebalance redistribute indexes in more cases. This setting is named **Optimize Index Placement On Rebalance** on the Couchbase Server Web Console's xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Settings page]. +You can also change this setting using the xref:manage:manage-settings/general-settings.adoc#index-settings-via-rest[Settings REST API] `redistributeIndexes` argument. + +NOTE: In Couchbase Server 7.2 and later, the redistribution setting affects both partitioned and non-partitioned indexes. + +Enabling the index redistribution setting causes a rebalance to redistribute indexes in the following situations: + +Rebalance after you add an index node:: +Rebalance optimizes index placement across all index nodes in the cluster, including on the new index nodes. + +Rebalance after you add or remove a non-index node:: +Rebalance moves indexes from heavily loaded nodes to nodes with free resources to balance distribution. + +Rebalance during an index server group repair:: +A group failure in a multiple server group database can force all replicas into a single group. In this case, rebalance redistributes the replicas to support high availability across server groups after the server group repair. + +NOTE: If after you drop Index Service nodes, the remaining nodes cannot handle all of the index replicas, Couchbase Server drops some of the replicas. If you later add additional Index Service nodes to the cluster, Couchbase Server replaces the dropped replicas. + +[#index-rebalance-batch-size] +=== Index Rebuild Batch Size + +When Couchbase Server rebalances indexes by rebuilding them, it groups the rebuilds in batches. +This batching limits the overhead of rebuilding the indexes on the cluster. +The default batch size is `3`, which means that a rebalance rebuilds up to 3 indexes at the same time. +This setting has no effect if you have enabled file-based rebalancing. + +Users with Full Admin or Cluster Admin roles can change the batch size using the REST API. +See xref:rest-api:rest-modify-index-batch-size.adoc[Modify Index Batch Size]. + +[#smart-batching] +=== Smart Batching + +During a Rebalance operation, Couchbase Server breaks the rebuilding process into batches to limit the performance impacts. + +The default batch size is set to 3 applying a limit on the amount of work attempted concurrently. + +In Couchbase Server 7.1 and later versions, you can use smart batching with one or more of the following purposes: + +* Reduces further time and resources required to move the index metadata. +* Rebuilds indexes at their new locations during rebalance. +* Increases rebalance performance by increasing pipeline parallelism by starting the next batch when the previous batch is only partially completed. +* Allows the increase of overall concurrency by using administrator-determined modifications of the batch size. +* Optimizes the sharing of data streams where index relocation takes place. +* Repairs index replicas lost due to node failure before relocating indexes. +* Dynamically reassigns index-rebuild tasks between batches to improve workload balance. + +If at least one node in the cluster is running Server 7.1 or later, most smart batching features apply across the cluster, +even when some nodes are running earlier versions. + +You can change the default batch size of 3 by the Full Admin and Cluster Admin roles using the REST API. +For more information, see xref:rest-api:rest-modify-index-batch-size.adoc[Modify Index Batch Size]. + +== Swap Rebalance for Index Services + +A swap rebalance replaces a set of existing source nodes with an equal number of new destination nodes. +During a swap rebalance, index movements occur only between the specified source and destination nodes. +The other nodes in the cluster are unaffected and continue to serve queries without index movement. +If Optimize Index Placement is enabled, index movements can occur across any node in the cluster. + +=== Example of Swap Rebalance for Index Services + +For example, in a four-node cluster (N1, N2, N3, N4) with Optimize Index Placement disabled, you plan to replace nodes N1 and N2. +Add two new empty nodes, N5 and N6, then perform a swap rebalance by marking N1 and N2 for removal and adding N5 and N6. + +. Assume the source node N1 hosts shards S1 that includes index idx_A, S7 and S10. +Assume node N2 hosts shards S2 that also includes idx_A and S9. + +. If shard affinity is enabled, entire shards move between nodes. +During the swap rebalance, the planner initiates index movements for all these shards to the new destination nodes N5 and N6. +For example, S1 and S10 may move from N1 to N6, while S7 moves from N1 to N5. + +. If shard affinity is not enabled, index movements aren’t restricted by shard grouping. + +. There’s no one-to-one mapping between source and destination nodes. +Indexes or shards can move from any of the source nodes to any of the destination nodes involved in the rebalance. ++ +Nodes N3 and N4 aren’t involved in this index movement. + +=== Rebuilding Indexes Without File-Based Rebalance Metadata + +Indexes that don’t have shard affinity must be rebuilt once by running a xref:learn:clusters-and-availability/rebalance-and-index-service.adoc#build-indexes-via-swap-rebalance[full swap rebalance] cycle, with File-Based Rebalance (FBR) enabled. +This rebalance uses the DCP-based method but adds the metadata required for FBR and enforces shard affinity. +After this process, all future rebalances use FBR. + +== Failover of Index Service Nodes + +The following is how node failover affects the Index Service: + +* If a node becomes unhealthy, ns_server can remove it from the cluster through autofailover, or you can manually fail it over. + +* Indexes on the failed node are unavailable when replicas do not exist on other nodes. + +* The Query Service automatically redirects requests to available replicas. + +* If a rebalance is triggered while the node remains failed over, the system performs a replica repair. +When a replica exists, it can be copied using File-Based Rebalance (FBR) if shard affinity is enabled. +If no replica exists, the index is lost. + +* If the failed node recovers before a rebalance occurs, it can be added back to the cluster, and the next rebalance restores its indexes. +Any duplicate replicas created during the failover are removed during this add-back rebalance. + +=== Node Failover Examples + +The following examples illustrate how Couchbase Server handles node failover scenarios, both when replicas are available and when they are not. + +==== Failover With Replica + +This example demonstrates how Couchbase Server maintains data availability when a node hosting an index fails and a replica is available: + +.. Node N1 hosts idx_A-r0, the primary replica of idx_A. + +.. Node N2 hosts idx_A-r1, a secondary replica of idx_A. + +.. When node N1 crashes, an administrator triggers a failover. + +.. idx_A-r0 is marked as lost, and queries are automatically redirected to idx_A-r1 on node N2. + +.. Afterwards, a rebalance is triggered. +The system creates a new replica, idx_A-r0, on another node (for example, N3) to restore the required replica count. +This process is known as replica repair. + +NOTE: If the Index Service is under memory pressure, for example, due to inadequate sizing, it may skip replica repair during rebalance. +Replica repair also does not occur if the feature is disabled in the settings or if there are not enough available nodes. + +==== Failover With No Replica (Index Loss) + +This example shows what happens when a node hosting an index fails and no replica exists to maintain data availability: + +.. Index idx_B exists only on node N1 (replica count = 0). + +.. Node N1 fails over. +When this happens, the system removes N1 from the active cluster topology. + +... Because idx_B has no replicas on other nodes, it becomes immediately unavailable. +Any queries that depend on idx_B return an error, because no valid copy of the index exists in the cluster. + +... If a rebalance runs, the system marks idx_B as lost and removes its definition from the cluster metadata. + +== Removal of Index Service Nodes + +The following is how node removal affects the Index Service: + +* A planned, graceful operation that decommissions a healthy node. + +* The node is marked for removal, and a rebalance is triggered. + +* Before the source node goes offline, all its indexes move to other destination nodes in the cluster by using File-Based Rebalance (FBR), if shard affinity is enabled. + +* The node is removed only after all index movements are complete. +This process ensures that ongoing scans on the source node complete before removal, preventing any data loss or service interruption. + +=== Node Removal Examples + +The following examples explain how node removal and rebalance operations affect the Index Service, both when replicas are present and when they are not. + +==== Removal and Rebalance-Out With Replicas + +The following example explains removing an Index Service node from a cluster and how the system maintains availability throughout the process. + +. Node N3 hosts the replica idx_C-r1. +The node is healthy but needs to be decommissioned. + +. An administrator marks N3 for removal and starts a rebalance. +Selecting Remove only marks the node for removal and you must start a rebalance for the removal to take effect. + +.. The system begins moving idx_C-r1 to a destination node, such as N1. + +.. During the transfer, N3 continues to serve queries for idx_C-r1 to maintain availability. + +.. After the transfer completes, N3 is safely removed from the cluster with no service interruption. + +==== Removal or Rebalance-Out Without Replicas + +The following example describes the process of removing an Index Service node when the index does not have replicas: + +. Index idx_D exists only on node N3. + +. An administrator marks N3 for removal and starts a rebalance. + +.. The system begins copying idx_D from the source node N3 to a destination node, such as N1. + +.. Node N3 leaves the cluster only after the copy completes and idx_D is fully available on N1. + +.. Queries that use idx_D remain online during the entire operation. + +== Failover vs Removal (Rebalance-Out) + +The following table summarizes the key differences between failover and planned removal (rebalance-out) of Index Service nodes: + +[cols="3,3,4", options="header"] +|=== +| Aspect| Failover | Removal (Rebalance-Out) + +| *Immediate availability* +| Potential for index loss +| No loss of service + +| *Data Transfer for FBR* +| No transfer from failed node but relies on replicas +| Graceful copy from source node being removed to destination nodes + +| *Node State* +| Node can be potentially recovered or added back +| Node is permanently decommissioned +|=== + +== Upgrade Index Service Using - Swap Rebalance vs Failover-Based Rebalance + +This section compares two approaches for upgrading Index Service nodes in a Couchbase cluster - swap rebalance and failover-based rebalance. + +[cols="1,1,1", options="header"] +|=== +| Aspect | Swap Rebalance | Failover-Based Rebalance + +| *Purpose* +| Replaces old nodes with new ones during a planned upgrade or maintenance. +| Used during an upgrade by failing over a node, adding a new node, and performing a rebalance. + +| *Index Movement* +| Indexes move only between the specified old and new nodes. Other nodes in the cluster are not involved. +| Indexes are rebuilt or repaired after failover as part of the rebalance process. + +| *Availability* +| Indexes remain available throughout the rebalance operation. +| One replica is lost during failover, and the workload shifts to remaining replicas. + +| *Impact on Replicas* +| Replica distribution remains intact. +| If a node with a single replica fails, the index is lost. + +| *Operation Type* +| Planned and controlled process. +| Reactive process following a node failure or manual failover. +|=== + +== File-Based Rebalance in Mixed-Version Clusters + +File-Based Rebalance (FBR) behavior depends on the Couchbase Server version running on the nodes in a mixed-version cluster: + +* Nodes running version 7.6 or later support FBR. + +* Nodes running a Couchbase Server version older than 7.6 do not support FBR. + +* During a rebalance, movements that occur only between 7.6 or later nodes use FBR. + +* Any movement that involves a node older than 7.6 falls back to the traditional DCP-based rebuild method. + diff --git a/modules/learn/pages/clusters-and-availability/rebalance.adoc b/modules/learn/pages/clusters-and-availability/rebalance.adoc index 96699e6ad1..55a6d87a29 100644 --- a/modules/learn/pages/clusters-and-availability/rebalance.adoc +++ b/modules/learn/pages/clusters-and-availability/rebalance.adoc @@ -138,49 +138,9 @@ A complete account of the report-content is provided in the xref:rebalance-refer Rebalance affects different services differently. The effects on services other than the Data Service are described below. -[#rebalancing-the-index-service] -=== Index Service +For information about the rebalance operation in Index Service, see xref:learn:clusters-and-availability/rebalance-and-index-service.adoc[Rebalance and Index Service]. -The Index Service maintains a cluster-wide set of index definitions and metadata, which allows the redistribution of indexes and index replicas during a rebalance. - -The rebalance process takes into account the nodes' CPU, RAM, and disk bandwidth to limit its effect on database performance. - -NOTE: Shard Based Rebalance and Rebalance Based on File Transfer are synonyms for File-based Rebalance. - -[#index-rebalance-methods] -==== Index Rebalance Methods - -By default, Couchbase Server rebuilds the indexes in their new locations during a rebalance. -If your cluster uses xref:learn:services-and-indexes/indexes/storage-modes.adoc#standard-index-storage[Standard Index Storage], you can choose to enable file-based rebalance which moves index files between nodes instead of rebuilding them. -Copying the index files is faster than having the target node rebuild the index from scratch. -You cannot use file-based rebalance if you have enabled xref:learn:services-and-indexes/indexes/storage-modes.adoc#memory-optimized-index-storage[Memory Optimized Index Storage] because this option does not store index metadata in files. - -Couchbase Capella defaults to file-based index rebalance. - -To learn how to enable file-based rebalance via the Couchbase Server Web Console, see File Transfer Based Rebalance under xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Index Storage Mode]. To learn how to enable it via the REST API, see the `enableShardAffinity` parameter in xref:rest-api:post-settings-indexes.adoc[]. - -// Remove after the 7.x series. -ifeval::['{page-component-version}' == '7.6'] -NOTE: In Couchbase Server versions 7.6.0 and 7.6.1, when you enabled file-based rebalance you could not choose which Index Service nodes would contain an index when using the `CREATE INDEX` statement. -In Couchbase Server 7.6.2 and later, you can use the `WITH ` clause to set which node contains the index. -You still cannot use the `WITH ` clause with `ALTER INDEX` after you enable file-based rebalance. -endif::[] - -===== When File-Based Rebalance Take Effect - -The file-based index rebalance method uses metadata in the index's files during the relocation process. -When Couchbase Server starts using file-based index rebalance for an index depends on whether the index's files contains this metadata: - -* If you enable file-based index rebalance before you create an index, Couchbase Server adds the metadata to the index files while creating them. -Because this metadata is in the index's files from the start, the initial rebalance of the index as well as all later rebalances use the file-based rebalance method. -If you choose to use file-based index rebalance, your best practice is to enable it before you create any indexes. - -* If you enable file-based index rebalance after you have created an index, Couchbase Server does not use the file-based rebalance method the next time it rebalances that index. -Instead, the next rebalance process still rebuilds the index. -During this rebuild, Couchbase Server adds the metadata to the index files to enable file-based rebalance. -After this initial rebalance, all later rebalances of the index use the file-based rebalance method. - -===== Restarting a Rebalance +=== Restarting a Rebalance If a file-based rebalance fails, you can try starting a new rebalance. The second rebalance does not re-transfer any index that the failed rebalance finished moving. @@ -189,69 +149,6 @@ Instead, it moves just the indexes that had not moved or were in the process of You enable file-based rebalance using settings located under the under the xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Index Storage Mode] on the Couchbase Server Web Console's Settings page. You can also enable it using the REST API's xref:manage:manage-settings/general-settings.adoc#index-settings-via-rest[`settings/indexes` endpoint]. -[#index-redistribution] -==== Index Redistribution - -Couchbase Server can redistribute indexes during rebalance. Redistributing indexes can improve performance by offloading heavily loaded nodes. A rebalance automatically redistributes indexes in the following situations: - -Rebalance when you add an index node:: -Rebalance always moves indexes off of nodes that you're removing from the cluster to the remaining nodes. -A rebalance does not affect indexes that reside on nodes that you're not removing. - -Rebalance when you add and remove index nodes:: -A swap rebalance moves indexes from nodes you're removing and places them on the nodes you're adding. - -You can change a setting to have a rebalance redistribute indexes in more cases. This setting is named **Optimize Index Placement On Rebalance** on the Couchbase Server Web Console's xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Settings page]. -You can also change this setting using the xref:manage:manage-settings/general-settings.adoc#index-settings-via-rest[Settings REST API] `redistributeIndexes` argument. - -NOTE: In Couchbase Server 7.2 and later, the redistribution setting affects both partitioned and non-partitioned indexes. - -Enabling the index redistribution setting causes a rebalance to redistribute indexes in the following situations: - -Rebalance after you add an index node:: -Rebalance optimizes index placement across _all_ index nodes in the cluster, including on the new index nodes. - -Rebalance after you add or remove a non-index node:: -Rebalance moves indexes from heavily loaded nodes to nodes with free resources to balance distribution. - -Rebalance during an index server group repair:: -A group failure in a multiple server group database can force all replicas into a single group. In this case, rebalance redistributes the replicas to support high availability across server groups after the server group repair. - -NOTE: If after you drop Index Service nodes, the remaining nodes cannot handle all of the index replicas, Couchbase Server drops some of the replicas. If you later add additional Index Service nodes to the cluster, Couchbase Server replaces the dropped replicas. - -[#index-rebalance-batch-size] -==== Index Rebuild Batch Size - -When Couchbase Server rebalances indexes by rebuilding them, it groups the rebuilds in _batches_. -This batching limits the overhead of rebuilding the indexes on the cluster. -The default batch size is `3`, which means that a rebalance rebuilds up to three indexes at the same time. -This setting has no effect if you have enabled file-based index rebalancing. - -Users with Full Admin or Cluster Admin roles can change the batch size using the REST API. -See xref:rest-api:rest-modify-index-batch-size.adoc[Modify Index Batch Size]. - -[#smart-batching] -==== Smart Batching - -During a Rebalance operation, Couchbase Server breaks the rebuilding process into batches to limit the performance impacts. - -The default batch size is set to 3 applying a limit on the amount of work attempted concurrently. - -In Couchbase Server 7.1 and later versions, you can use smart batching with one or more of the following purposes: - -* Reduces further time and resources required to move the index metadata. -* Rebuilds indexes at their new locations during rebalance. -* Increases rebalance performance by increasing pipeline parallelism by starting the next batch when the previous batch is only partially completed. -* Allows the increase of overall concurrency by using administrator-determined modifications of the batch size. -* Optimizes the sharing of data streams where index relocation takes place. -* Repairs, prior to index relocation, index replicas lost due to node failure. -* When appropriate, reassigns scheduled index-rebuilding from one batch to the next, to balance the workloads. - -If at least one node in the cluster is running a Server version 7.1+ then most of the smart batching features apply to the cluster where some of the nodes are running an earlier version. - -You can change the default batch size of 3 by the Full Admin and Cluster Admin roles using the REST API. -For information, see xref:rest-api:rest-modify-index-batch-size.adoc[Modify Index Batch Size]. - [#rebalancing-the-search-service] === Search Service diff --git a/modules/manage/pages/manage-settings/general-settings.adoc b/modules/manage/pages/manage-settings/general-settings.adoc index abe4e5a316..501ffce619 100644 --- a/modules/manage/pages/manage-settings/general-settings.adoc +++ b/modules/manage/pages/manage-settings/general-settings.adoc @@ -291,7 +291,7 @@ See xref:learn:services-and-indexes/indexes/index-replication.adoc#index-replica * *Indexer Rebalance Settings*: When cleared, *Optimize Index Placement On Rebalance* has Couchbase Server only redistribute indexes during a rebalance when the nodes containing them are leaving the cluster. When selected, Couchbase Server redistribute indexes among the Index Service nodes during a rebalance to optimize performance. -See xref:learn:clusters-and-availability/rebalance.adoc#index-redistribution[Index Redistribution]. +See xref:learn:clusters-and-availability/rebalance-and-index-service.adoc#index-redistribution[Index Redistribution]. * *Indexer Log Level*: Sets the logging level. @@ -318,7 +318,7 @@ Use the **Enable File Transfer Based Rebalance** checkbox to enable or disable t The default cleared setting has an Index Server node rebuild any newly assigned index during a rebalance. You cannot enable file-based rebalance when you have enabled Memory Optimized Index Storage. When you select this option, Couchbase Server copies the index files from one Index Server node to another during a rebalance instead of rebuilding them. -See xref:learn:clusters-and-availability/rebalance.adoc#index-rebalance-methods[Index Rebalance Methods]. +See xref:learn:clusters-and-availability/rebalance-and-index-service.adoc#index-rebalance-methods[]. + NOTE: Shard Based Rebalance and Rebalance Based on File Transfer are synonyms for File-based Rebalance. + diff --git a/modules/rest-api/pages/post-settings-indexes.adoc b/modules/rest-api/pages/post-settings-indexes.adoc index 88a826b79d..ad0447ed9f 100644 --- a/modules/rest-api/pages/post-settings-indexes.adoc +++ b/modules/rest-api/pages/post-settings-indexes.adoc @@ -4,7 +4,7 @@ // Cross-references :index-replication: xref:learn:services-and-indexes/indexes/index-replication.adoc#index-replication -:rebalancing-the-index-service: xref:learn:clusters-and-availability/rebalance.adoc#rebalancing-the-index-service +:rebalancing-the-index-service: xref:learn:clusters-and-availability/rebalance-and-index-service.adoc#rebalancing-the-index-service [abstract] {description} @@ -35,7 +35,7 @@ The parameters are specified as key-value pairs (e.g `key=value`). | Name | Description | Type | `enableShardAffinity` -a| Selects the xref:learn:clusters-and-availability/rebalance.adoc#index-rebalance-methods[index rebalance method]: +a| Selects the xref:learn:clusters-and-availability/rebalance-and-index-service.adoc#index-rebalance-methods[]: * `false` (default value): Index Service nodes rebuild indexes that are newly assigned to them during a rebalance. * `true`: Couchbase Server moves a reassigned index's files between Index Service nodes. diff --git a/modules/rest-api/pages/rest-modify-index-batch-size.adoc b/modules/rest-api/pages/rest-modify-index-batch-size.adoc index 6091e644d4..e6c188fd36 100644 --- a/modules/rest-api/pages/rest-modify-index-batch-size.adoc +++ b/modules/rest-api/pages/rest-modify-index-batch-size.adoc @@ -56,5 +56,5 @@ If successful, the call returns `200 OK` and no object. == See Also -An overview of rebalance as it affects the Index Service, including an overview of _smart batching_, is provided in xref:learn:clusters-and-availability/rebalance.adoc#rebalancing-the-index-service[Index Service]. +An overview of rebalance as it affects the Index Service, including an overview of _smart batching_, is provided in xref:learn:clusters-and-availability/rebalance-and-index-service.adoc#rebalancing-the-index-service[Index Service]. For information on Couchbase-Server ports, see xref:install:install-ports.adoc[Couchbase Server Ports]. diff --git a/preview/DOC-13173-preview.yml b/preview/DOC-13173-preview.yml new file mode 100644 index 0000000000..0e1be9b7dc --- /dev/null +++ b/preview/DOC-13173-preview.yml @@ -0,0 +1,28 @@ +sources: + docs-server: + branches: DOC_13173_Rebalance_doc_enhancements + docs-analytics: + branches: release/7.6 + docs-devex: + url: https://github.com/couchbaselabs/docs-devex.git + branches: master + startPaths: docs/ + couchbase-cli: + # url: ../../docs-includes/couchbase-cli + url: https://github.com/couchbaselabs/couchbase-cli-doc + # branches: HEAD + branches: master + startPaths: docs/ + backup: + # url: ../../docs-includes/backup + url: https://github.com/couchbaselabs/backup-docs.git + #branches: HEAD + branches: master + startPaths: docs/ + #analytics: + # url: ../../docs-includes/docs-analytics + # branches: HEAD + #cb-swagger: + # url: https://github.com/couchbaselabs/cb-swagger + # branches: release/7.6 + # start_path: docs \ No newline at end of file From 41fd729ddcf41d65ee5bc09243b057ecdee6544b Mon Sep 17 00:00:00 2001 From: Shwetha Rao Date: Tue, 11 Nov 2025 19:33:38 +0530 Subject: [PATCH 05/26] minor changes --- .../rebalance-and-index-service.adoc | 81 +++++++++---------- .../clusters-and-availability/rebalance.adoc | 9 --- 2 files changed, 40 insertions(+), 50 deletions(-) diff --git a/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc b/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc index e6688f4211..d8deb762f8 100644 --- a/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc +++ b/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc @@ -16,7 +16,7 @@ The Index Service maintains a cluster-wide set of index definitions and metadata The rebalance process takes into account the nodes' CPU, RAM, and disk bandwidth to limit its effect on database performance. -NOTE: Shard Based Rebalance and Rebalance Based on File Transfer are synonyms for File-based Rebalance. +NOTE: Shard Based Rebalance and Rebalance Based on File Transfer are synonyms for File-Based Rebalance. [#index-rebalance-methods] == Index Service Rebalance @@ -25,49 +25,49 @@ By default, Couchbase Server rebuilds the indexes in their new locations during === File-Based Rebalance (FBR) or Shard Based Rebalance -If your cluster uses xref:learn:services-and-indexes/indexes/storage-modes.adoc#standard-index-storage[Standard Index Storage], you can choose to enable file-based rebalance which moves index files between nodes instead of rebuilding them. +If your cluster uses xref:learn:services-and-indexes/indexes/storage-modes.adoc#standard-index-storage[Standard Index Storage], you can choose to enable File-Based Rebalance (FBR) which moves index files between nodes instead of rebuilding them. Copying the index files is faster than having the target node rebuild the index from scratch. -You cannot use file-based rebalance if you have enabled xref:learn:services-and-indexes/indexes/storage-modes.adoc#memory-optimized-index-storage[Memory Optimized Index Storage] because this option does not store index metadata in files. +You cannot use FBR if you have enabled xref:learn:services-and-indexes/indexes/storage-modes.adoc#memory-optimized-index-storage[Memory Optimized Index Storage] because this option does not store index metadata in files. -The following are the internal parts of file-based rebalance: +The following are the internal parts of FBR: * *Shard Affinity:* It decides shard placement, so index partitions share the same shard ID. -* *Shard Based Rebalance:* It moves those shard files during rebalance. +* *Shard Based Rebalance:* It moves the shard files during rebalance. Couchbase Capella defaults to FBR. -To learn how to enable file-based rebalance via the Couchbase Server Web Console, see File Transfer Based Rebalance under xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Index Storage Mode]. To learn how to enable it via the REST API, see the `enableShardAffinity` parameter in xref:rest-api:post-settings-indexes.adoc[]. +To learn how to enable FBR via the Couchbase Server Web Console, see File Transfer Based Rebalance under xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Index Storage Mode]. To learn how to enable it via the REST API, see the `enableShardAffinity` parameter in xref:rest-api:post-settings-indexes.adoc[]. // Remove after the 7.x series. ifeval::['{page-component-version}' == '7.6'] -NOTE: In Couchbase Server versions 7.6.0 and 7.6.1, when you enabled file-based rebalance you could not choose which Index Service nodes would contain an index when using the `CREATE INDEX` statement. +NOTE: In Couchbase Server versions 7.6.0 and 7.6.1, when you enabled FBR you could not choose which Index Service nodes would contain an index when using the `CREATE INDEX` statement. In Couchbase Server 7.6.2 and later, you can use the `WITH ` clause to set which node contains the index. -You still cannot use the `WITH ` clause with `ALTER INDEX` after you enable file-based rebalance. +You still cannot use the `WITH ` clause with `ALTER INDEX` after you enable FBR. endif::[] -=== When File-Based Rebalance Take Effect +=== When FBR Take Effect The FBR method uses metadata in the index's files during the relocation process. -For Self-Managed Clusters, File-Based Rebalance is disabled by default. +For Self-Managed Clusters, FBR is disabled by default. -For Couchbase Capella (Provisioned Clusters), File-Based Rebalance is enabled by default. +For Couchbase Capella (Provisioned Clusters), FBR is enabled by default. It can be disabled through a support request. The on and off behavior is the same as in self-managed clusters. When Couchbase Server starts using FBR for an index depends on whether the index's files contains this metadata: * (Best practice) If you enable FBR before you create an index, Couchbase Server adds the metadata to the index files while creating them. -Because this metadata is in the index's files from the start, the initial rebalance of the index as well as all later rebalances use the file-based rebalance method. +Because this metadata is in the index's files from the start, the initial rebalance of the index as well as all later rebalances use the FBR method. If you choose to use FBR, your best practice is to enable it before you create any indexes. -* If you enable FBR after you have created an index, Couchbase Server does not use the file-based rebalance method the next time it rebalances that index. +* If you enable FBR after you have created an index, Couchbase Server does not use the FBR method the next time it rebalances that index. Instead, the next rebalance process still rebuilds the index. -During this rebuild, Couchbase Server adds the metadata to the index files to enable file-based rebalance. -After this initial rebalance, all later rebalances of the index use the file-based rebalance method. +During this rebuild, Couchbase Server adds the metadata to the index files to enable FBR. +After this initial rebalance, all later rebalances of the index use the FBR method. + [#build-indexes-via-swap-rebalance] -If you enable File-Based Rebalance on a cluster with existing indexes, those indexes do not have shard affinity. +If you enable FBR on a cluster with existing indexes, those indexes do not have shard affinity. To establish shard affinity, rebuild all indexes once, for example, by performing a full swap-rebalance cycle as follows: + -- @@ -81,7 +81,7 @@ All indexes from N1 are rebuilt on S using the DCP-based method, which adds the + This operation rewrites the indexes with shard affinity. + -After the cycle completes, all indexes have shard affinity, and future index movements use File-Based Rebalance (FBR). +After the cycle completes, all indexes have shard affinity, and future index movements use FBR. -- + @@ -153,7 +153,7 @@ For example, idx_B on I3 is moved to I1, and idx_C on I3 is moved to I2, along w No other index movements occur when Optimize Index Placement is disabled. .. The source node O continues to serve queries during the transfer. -After the File-Based Rebalance (FBR) completes and the destination node R catches up with new mutations, +After the FBR completes and the destination node R catches up with new mutations, it takes over serving the indexes, and the source node O is removed from the cluster. -- + @@ -162,21 +162,12 @@ An example of swap rebalance is as follows: -- .. In a cluster with nodes I1, I2, and I3, you plan to replace the source node I1 with a new destination node N1. -.. If I1 hosts indexes idx_A and idx_B, they are moved to N1 using File-Based Rebalance (FBR). +.. If I1 hosts indexes idx_A and idx_B, they are moved to N1 using FBR. During the transfer, I1 continues to serve queries. .. After the rebalance completes, N1 becomes fully active, and I1 is removed from the cluster with no downtime. -- -=== Restarting a Rebalance - -If a file-based rebalance fails, you can try starting a new rebalance. -The second rebalance does not re-transfer any index that the failed rebalance finished moving. -Instead, it moves just the indexes that had not moved or were in the process of moving when the error occurred. - -You enable file-based rebalance using settings located under the under the xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Index Storage Mode] on the Couchbase Server Web Console's Settings page. -You can also enable it using the REST API's xref:manage:manage-settings/general-settings.adoc#index-settings-via-rest[`settings/indexes` endpoint]. - === Shard Affinity Plasma, the storage engine for Global Secondary Indexes (GSI), stores data in shards. @@ -192,20 +183,20 @@ This approach does the following: * Provides deterministic collocation, where all indexes with the same shard ID share the same shard files. * Prevents replica-on-same-node conflicts. -* Enables efficient data movement through file-based rebalance. +* Enables efficient data movement through FBR. Shard affinity keeps all index partitions with the same shard ID on the same node and moves them as a single unit during index rebalancing. This behavior also applies to internal data structures associated with those shards, which remain collocated and move together. -==== Relationship Between Shard Affinity and File-Based Rebalance +==== Relationship Between Shard Affinity and FBR -The Shard Affinity is related to File-Based Rebalance or Shard Based Rebalance in the following ways: +The Shard Affinity is related to FBR or Shard Based Rebalance in the following ways: * Because partitions with the same shard ID reside in the same shard file, a rebalance can relocate them by copying that file to another node. * Without shard affinity, partitions of the same logical shard may be spread across multiple files or nodes, -making File-Based Rebalance inefficient and forcing the system to use the slower DCP rebuild method. -For this reason, a single configuration setting enables both shard affinity and File-Based Rebalance. +making FBR inefficient and forcing the system to use the slower DCP rebuild method. +For this reason, a single configuration setting enables both shard affinity and FBR. [#index-redistribution] @@ -298,12 +289,21 @@ Indexes or shards can move from any of the source nodes to any of the destinatio + Nodes N3 and N4 aren’t involved in this index movement. -=== Rebuilding Indexes Without File-Based Rebalance Metadata +=== Rebuilding Indexes Without FBR Metadata -Indexes that don’t have shard affinity must be rebuilt once by running a xref:learn:clusters-and-availability/rebalance-and-index-service.adoc#build-indexes-via-swap-rebalance[full swap rebalance] cycle, with File-Based Rebalance (FBR) enabled. +Indexes that don’t have shard affinity must be rebuilt once by running a xref:learn:clusters-and-availability/rebalance-and-index-service.adoc#build-indexes-via-swap-rebalance[full swap rebalance] cycle, with FBR enabled. This rebalance uses the DCP-based method but adds the metadata required for FBR and enforces shard affinity. After this process, all future rebalances use FBR. +== Restarting an FBR + +If an FBR fails, you can try starting a new rebalance. +The second rebalance does not re-transfer any index that the failed rebalance finished moving. +Instead, it moves just the indexes that had not moved or were in the process of moving when the error occurred. + +You enable FBR using settings located under the under the xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Index Storage Mode] on the Couchbase Server Web Console's Settings page. +You can also enable it using the REST API's xref:manage:manage-settings/general-settings.adoc#index-settings-via-rest[`settings/indexes` endpoint]. + == Failover of Index Service Nodes The following is how node failover affects the Index Service: @@ -315,7 +315,7 @@ The following is how node failover affects the Index Service: * The Query Service automatically redirects requests to available replicas. * If a rebalance is triggered while the node remains failed over, the system performs a replica repair. -When a replica exists, it can be copied using File-Based Rebalance (FBR) if shard affinity is enabled. +When a replica exists, it can be copied using FBR if shard affinity is enabled. If no replica exists, the index is lost. * If the failed node recovers before a rebalance occurs, it can be added back to the cluster, and the next rebalance restores its indexes. @@ -366,7 +366,7 @@ The following is how node removal affects the Index Service: * The node is marked for removal, and a rebalance is triggered. -* Before the source node goes offline, all its indexes move to other destination nodes in the cluster by using File-Based Rebalance (FBR), if shard affinity is enabled. +* Before the source node goes offline, all its indexes move to other destination nodes in the cluster by using FBR, if shard affinity is enabled. * The node is removed only after all index movements are complete. This process ensures that ongoing scans on the source node complete before removal, preventing any data loss or service interruption. @@ -455,9 +455,9 @@ This section compares two approaches for upgrading Index Service nodes in a Couc | Reactive process following a node failure or manual failover. |=== -== File-Based Rebalance in Mixed-Version Clusters +== FBR in Mixed-Version Clusters -File-Based Rebalance (FBR) behavior depends on the Couchbase Server version running on the nodes in a mixed-version cluster: +FBR behavior depends on the Couchbase Server version running on the nodes in a mixed-version cluster: * Nodes running version 7.6 or later support FBR. @@ -465,5 +465,4 @@ File-Based Rebalance (FBR) behavior depends on the Couchbase Server version runn * During a rebalance, movements that occur only between 7.6 or later nodes use FBR. -* Any movement that involves a node older than 7.6 falls back to the traditional DCP-based rebuild method. - +* Any movement that involves a node older than 7.6 falls back to the traditional DCP-based rebuild method. \ No newline at end of file diff --git a/modules/learn/pages/clusters-and-availability/rebalance.adoc b/modules/learn/pages/clusters-and-availability/rebalance.adoc index 55a6d87a29..0af8c2da61 100644 --- a/modules/learn/pages/clusters-and-availability/rebalance.adoc +++ b/modules/learn/pages/clusters-and-availability/rebalance.adoc @@ -140,15 +140,6 @@ The effects on services other than the Data Service are described below. For information about the rebalance operation in Index Service, see xref:learn:clusters-and-availability/rebalance-and-index-service.adoc[Rebalance and Index Service]. -=== Restarting a Rebalance - -If a file-based rebalance fails, you can try starting a new rebalance. -The second rebalance does not re-transfer any index that the failed rebalance finished moving. -Instead, it moves just the indexes that had not moved or were in the process of moving when the error occurred. - -You enable file-based rebalance using settings located under the under the xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Index Storage Mode] on the Couchbase Server Web Console's Settings page. -You can also enable it using the REST API's xref:manage:manage-settings/general-settings.adoc#index-settings-via-rest[`settings/indexes` endpoint]. - [#rebalancing-the-search-service] === Search Service From 4042ab010300aea58c0429aa2f35c8b457912ca2 Mon Sep 17 00:00:00 2001 From: rao-shwe Date: Wed, 12 Nov 2025 10:03:24 +0530 Subject: [PATCH 06/26] Minor grammar edit in smart batching section --- .../rebalance-and-index-service.adoc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc b/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc index d8deb762f8..c4fc9dcc86 100644 --- a/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc +++ b/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc @@ -249,13 +249,13 @@ The default batch size is set to 3 applying a limit on the amount of work attemp In Couchbase Server 7.1 and later versions, you can use smart batching with one or more of the following purposes: -* Reduces further time and resources required to move the index metadata. -* Rebuilds indexes at their new locations during rebalance. -* Increases rebalance performance by increasing pipeline parallelism by starting the next batch when the previous batch is only partially completed. -* Allows the increase of overall concurrency by using administrator-determined modifications of the batch size. -* Optimizes the sharing of data streams where index relocation takes place. -* Repairs index replicas lost due to node failure before relocating indexes. -* Dynamically reassigns index-rebuild tasks between batches to improve workload balance. +* Reduce further time and resources required to move the index metadata. +* Rebuild indexes at their new locations during rebalance. +* Increase rebalance performance by increasing pipeline parallelism by starting the next batch when the previous batch is only partially completed. +* Allow the increase of overall concurrency by using administrator-determined modifications of the batch size. +* Optimize the sharing of data streams where index relocation takes place. +* Repair index replicas lost due to node failure before relocating indexes. +* Dynamically reassign index-rebuild tasks between batches to improve workload balance. If at least one node in the cluster is running Server 7.1 or later, most smart batching features apply across the cluster, even when some nodes are running earlier versions. @@ -465,4 +465,4 @@ FBR behavior depends on the Couchbase Server version running on the nodes in a m * During a rebalance, movements that occur only between 7.6 or later nodes use FBR. -* Any movement that involves a node older than 7.6 falls back to the traditional DCP-based rebuild method. \ No newline at end of file +* Any movement that involves a node older than 7.6 falls back to the traditional DCP-based rebuild method. From 05c37e1a5aac4cfffb866fff7844837af8e70627 Mon Sep 17 00:00:00 2001 From: Shwetha Rao Date: Tue, 25 Nov 2025 17:12:08 +0530 Subject: [PATCH 07/26] rewrote and rearranged contents --- .../rebalance-and-index-service.adoc | 415 ++++++++++-------- .../clusters-and-availability/rebalance.adoc | 13 +- 2 files changed, 246 insertions(+), 182 deletions(-) diff --git a/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc b/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc index c4fc9dcc86..fdee3d9360 100644 --- a/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc +++ b/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc @@ -7,36 +7,125 @@ {description} Rebalance affects different services differently. -The effects on Index Service are described below. +The following sections explain how rebalance operation affects the Index Service. -[#rebalancing-the-index-service] == Index Service -The Index Service maintains a cluster-wide set of index definitions and metadata, which allows the redistribution of indexes and index replicas during a rebalance. +The Index Service maintains cluster-wide index definitions and metadata to redistribute indexes and replicas during rebalance operations. -The rebalance process takes into account the nodes' CPU, RAM, and disk bandwidth to limit its effect on database performance. +The rebalance operation evaluates each node's CPU, RAM, and disk bandwidth to minimize effects on database performance. + +== Index Storage Modes, Shards, and Partitions + +Couchbase Server defines how Global Secondary Indexes (GSI) stores and manages its underlying data structures using the following Index Storage Modes: + +* Standard GSI Storage, which stores index data on disk required for File-Based Rebalance (FBR). + +* Memory-Optimized GSI Storage, which stores most index structures in-memory and does not support file-based operations. + +Plasma, the storage engine for GSI, stores index data in shards. +Each shard is a set of on-disk files that can contain one or more index partitions, allowing multiple indexes to share the same physical storage. +Sharing shard files across indexes reduces disk overhead and improves index storage scalability. + +[#shard-affinity] +== Shard Affinity + +In Couchbase Server versions earlier than 7.6, Plasma automatically chose which shard an index partition belonged to. +In Couchbase Server 7.6 and later versions, shard affinity is supported. + +With shard affinity, the GSI layer assigns a shard slot (an alternate shard ID) to each index partition and provides this information to Plasma. +Plasma then places the partition’s data into the designated shard on the node as specified by the GSI layer. +Plasma is unaware of the cluster topology and high-availability (HA) constraints, so the GSI layer makes this decision. + +Only GSI can do the following: + +* The replicas are distributed appropriately across nodes and server groups. +* The corresponding replicas share the same shard slot (shard ID). + +As a result, this design provides the following benefits: + +* Provides deterministic collocation, where all indexes with the same shard ID share the same shard files. +* Prevents replica-on-same-node conflicts. +* Enables efficient data movement through FBR. + +Shard affinity keeps all index partitions with the same shard ID on the same node and moves them as a single unit during index rebalancing. +This behavior also applies to internal data structures associated with those shards, which remain collocated and move together. + +For information about how this affects File-Based Rebalance (FBR), see <<#shard-affinity-and-fbr,Relationship Between Shard Affinity and FBR>>. -NOTE: Shard Based Rebalance and Rebalance Based on File Transfer are synonyms for File-Based Rebalance. [#index-rebalance-methods] -== Index Service Rebalance +== Index Rebalance Methods -By default, Couchbase Server rebuilds the indexes in their new locations during a rebalance. +Couchbase Server provides the following index rebalance methods: -=== File-Based Rebalance (FBR) or Shard Based Rebalance +* *Standard Rebalance*: This is the default method, which is the DCP-based method. +This method reads data from the Data Service and rebuilds indexes on the destination node. +Couchbase Server uses this method when File-Based Rebalance (FBR) is disabled, which is the default for self-managed clusters. -If your cluster uses xref:learn:services-and-indexes/indexes/storage-modes.adoc#standard-index-storage[Standard Index Storage], you can choose to enable File-Based Rebalance (FBR) which moves index files between nodes instead of rebuilding them. +* *<<#file-based-rebalance-fbr,File-Based Rebalance (FBR) or Shard Based Rebalance>>*: This is the relocation method. +In this method, Couchbase Server moves index files between nodes instead of rebuilding them during a rebalance. Copying the index files is faster than having the target node rebuild the index from scratch. -You cannot use FBR if you have enabled xref:learn:services-and-indexes/indexes/storage-modes.adoc#memory-optimized-index-storage[Memory Optimized Index Storage] because this option does not store index metadata in files. -The following are the internal parts of FBR: +* (Special case) *<<#swap-rebalance-for-index-service,Swap Rebalance for Index Service>>*: This is a swap rebalance operation that moves indexes from the nodes you're removing and places them on the nodes you're adding. + +[#file-based-rebalance-fbr] +=== File-Based Rebalance (FBR) or Shard Based Rebalance + +File-Based Rebalance (FBR), called also as Shard Based Rebalance, moves index files between nodes instead of rebuilding them. + +FBR is composed of the following features: + +* xref:learn:clusters-and-availability/rebalance-and-index-service.adoc#shard-affinity[*Shard Affinity*]: It decides shard placement, so index partitions share the same shard ID. +* *Shard Based Rebalance:* It moves the shard files between nodes during rebalance. + +[NOTE] +==== +* FBR is supported only if you have enabled xref:learn:services-and-indexes/indexes/storage-modes.adoc#standard-index-storage[Standard Index Storage] on your cluster. +* You cannot use FBR if you have enabled xref:learn:services-and-indexes/indexes/storage-modes.adoc#memory-optimized-index-storage[Memory Optimized Index Storage] on your cluster because it does not store index metadata in files. +* Shard Based Rebalance and Rebalance Based on File Transfer are synonyms for File-Based Rebalance. +==== -* *Shard Affinity:* It decides shard placement, so index partitions share the same shard ID. -* *Shard Based Rebalance:* It moves the shard files during rebalance. +[#shard-affinity-and-fbr] +==== Relationship Between Shard Affinity and FBR + +The Shard Affinity is related to FBR (or Shard Based Rebalance) in the following ways: + +* As partitions with the same shard ID reside in the same shard file, a rebalance can relocate those partitions by copying that file to another node. + +* Without shard affinity, partitions of the same logical shard may be spread across multiple files or nodes. +This distribution makes FBR inefficient forcing it to use the slower DCP rebuild method. +For this reason, a single configuration setting enables both shard affinity and FBR. + +[#enabling-fbr] +==== Enabling FBR + +For self-managed clusters, FBR is disabled by default. +You need to enable FBR to use it. + +* To enable FBR from the UI, do the following: + +.. On your cluster, in the xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Index Storage Mode], enable Standard Index Storage. + +.. Select *Enable File Transfer Based Rebalance*. + +* To enable FBR using the REST API, set the `enableShardAffinity` parameter in xref:rest-api:post-settings-indexes.adoc[]. + +NOTE: <<#smart-batching,Smart Batching>> does not work if you have enabled FBR on your cluster. + +For Couchbase Capella (Provisioned Clusters), FBR is enabled by default. +It can be disabled through a support request. +The on and off behavior is the same as in self-managed clusters. -Couchbase Capella defaults to FBR. +==== Restarting an FBR + +If an FBR fails, you can start a new rebalance. +The second rebalance does not re-transfer any index that the failed rebalance finished moving. +Instead, it moves just the indexes that had not moved or were in the process of moving when the error occurred. + +To restart FBR, enable it. +For more information, see <<#enabling-fbr, Enabling FBR>>. -To learn how to enable FBR via the Couchbase Server Web Console, see File Transfer Based Rebalance under xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Index Storage Mode]. To learn how to enable it via the REST API, see the `enableShardAffinity` parameter in xref:rest-api:post-settings-indexes.adoc[]. // Remove after the 7.x series. ifeval::['{page-component-version}' == '7.6'] @@ -45,52 +134,154 @@ In Couchbase Server 7.6.2 and later, you can use the `WITH ` clause to set You still cannot use the `WITH ` clause with `ALTER INDEX` after you enable FBR. endif::[] -=== When FBR Take Effect +[#swap-rebalance-for-index-service] +=== Swap Rebalance for Index Service + +A swap rebalance removes one or more source nodes and adds the same number of destination nodes. +During the swap rebalance operation, indexes move only between those source and destination nodes. +All other nodes continue serving queries and no indexes relocate between them. + +You can enable index movements across any index node during a rebalance in the cluster through the following ways: + +* From the UI, enable Optimize Index Placement in the xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Index Storage Mode] section. + +* Use the REST API `redistributeIndexes` argument. +For more information, see xref:manage:manage-settings/general-settings.adoc#index-settings-via-rest[Settings REST API]. + +== When Does FBR Take Effect The FBR method uses metadata in the index's files during the relocation process. -For Self-Managed Clusters, FBR is disabled by default. +Couchbase Server can perform FBR for an index only when the index’s files include the required metadata: -For Couchbase Capella (Provisioned Clusters), FBR is enabled by default. -It can be disabled through a support request. -The on and off behavior is the same as in self-managed clusters. +* <<#fbr-enabled-before-index-creation,FBR Enabled Before Index Creation>> +* <<#fbr-enabled-after-index-creation,FBR Enabled After Index Creation>> -When Couchbase Server starts using FBR for an index depends on whether the index's files contains this metadata: +[#fbr-enabled-before-index-creation] +=== FBR Enabled Before Index Creation -* (Best practice) If you enable FBR before you create an index, Couchbase Server adds the metadata to the index files while creating them. -Because this metadata is in the index's files from the start, the initial rebalance of the index as well as all later rebalances use the FBR method. -If you choose to use FBR, your best practice is to enable it before you create any indexes. +If you enable FBR before you create indexes, Couchbase Server adds the metadata to the index files when creating them. +As this metadata is in the index's files from the start, the initial rebalance of the index as well as all later rebalances use the FBR method. -* If you enable FBR after you have created an index, Couchbase Server does not use the FBR method the next time it rebalances that index. -Instead, the next rebalance process still rebuilds the index. -During this rebuild, Couchbase Server adds the metadata to the index files to enable FBR. -After this initial rebalance, all later rebalances of the index use the FBR method. -+ -[#build-indexes-via-swap-rebalance] -If you enable FBR on a cluster with existing indexes, those indexes do not have shard affinity. -To establish shard affinity, rebuild all indexes once, for example, by performing a full swap-rebalance cycle as follows: +NOTE: This is the best practice for using FBR. + +[#fbr-enabled-after-index-creation] +=== FBR Enabled After Index Creation + +When you create indexes and then enable FBR, Couchbase Server does not use FBR method for that index right away because those indexes do not have <<#shard-affinity,Shard Affinity>>. +Instead, the next rebalance rebuilds the index, and during this rebuild Couchbase Server adds the required metadata to the index files. +After this initial rebuild, all subsequent rebalances for that index use FBR. + +To establish shard affinity for all existing indexes, you must rebuild them once. +A <<#full-swap-rebalance-example,full swap rebalance>> cycle is a method for performing this rebuild. + +[#index-redistribution] +== More about Index Redistribution + +Couchbase Server can redistribute indexes during rebalance. +Redistributing indexes can improve performance by offloading heavily loaded nodes. + +A rebalance automatically redistributes indexes in the following situations: + +* *Rebalance when you add an index node*: +Rebalance always moves indexes off of nodes that you're removing from the cluster to the remaining nodes. +A rebalance does not affect indexes that reside on nodes that you're not removing. + +* *Rebalance when you add and remove index nodes*: +A swap rebalance moves indexes from nodes you're removing and places them on the nodes you're adding. +For more information, see <<#swap-rebalance-for-index-service,Swap Rebalance for Index Service>>. + +You can enable index movements across any index node during a rebalance in the cluster through the following ways: + +* From the UI, enable Optimize Index Placement in the xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Index Storage Mode] section. + +* Use the REST API `redistributeIndexes` argument. +For more information, see xref:manage:manage-settings/general-settings.adoc#index-settings-via-rest[Settings REST API]. + +NOTE: In Couchbase Server 7.2 and later versions, the redistribution setting affects both partitioned and non-partitioned indexes. + +Enabling the index redistribution setting causes a rebalance to redistribute indexes in the following situations: + +* *Rebalance after you add an index node*: +Rebalance optimizes index placement across all index nodes in the cluster, including on the new index nodes. + +* *Rebalance after you add or remove a non-index node*: +Rebalance moves indexes from heavily loaded nodes to nodes with free resources to balance distribution. + +* *Rebalance during an index server group repair*: +A group failure in a multiple server group database can force all replicas into a single group. In this case, rebalance redistributes the replicas to support high availability across server groups after the server group repair. + +NOTE: If after you drop Index Service nodes, the remaining nodes cannot handle all of the index replicas, Couchbase Server drops some of the replicas. +If you later add additional Index Service nodes to the cluster, Couchbase Server replaces the dropped replicas. + +[#smart-batching] +== Smart Batching + +When Couchbase Server rebalances indexes by rebuilding them, it groups the rebuilds in batches. +This batching limits the overhead of rebuilding the indexes on the cluster and limits the performance impacts. +This process is called smart batching. + +The default batch size is `3`, which means that a rebalance rebuilds up to 3 indexes at the same time. + +NOTE: Smart batching does not work if you have enabled FBR. + +Users with Full Admin or Cluster Admin roles can xref:rest-api:rest-modify-index-batch-size.adoc[Modify Index Batch Size] using the REST API. + +You can use smart batching for one or more of the following purposes: + +* Reduce further time and resources required to move the index metadata. +* Rebuild indexes at their new locations during rebalance. +* Increase rebalance performance by increasing pipeline parallelism by starting the next batch when the previous batch is only partially completed. +* Allow the increase of overall concurrency by using administrator-determined modifications of the batch size. +* Optimize the sharing of data streams where index relocation takes place. +* Repair index replicas lost due to node failure before relocating indexes. +* Dynamically reassign index-rebuild tasks between batches to improve workload balance. + +NOTE: If at least one node in the cluster is running Server 7.1 or a later version, most smart batching features apply across the cluster, +even when some nodes are running earlier versions. + +== Examples + + +== Example of Swap Rebalance for Index Services + +For example, in a four-node cluster (N1, N2, N3, N4) with Optimize Index Placement disabled, you plan to replace nodes N1 and N2. +Add two new empty nodes, N5 and N6, then perform a swap rebalance by marking N1 and N2 for removal and adding N5 and N6. + +. Assume the source node N1 hosts shards S1 that includes index idx_A, S7 and S10. +Assume node N2 hosts shards S2 that also includes idx_A and S9. + +. If shard affinity is enabled, entire shards move between nodes. +During the swap rebalance, the planner initiates index movements for all these shards to the new destination nodes N5 and N6. +For example, S1 and S10 may move from N1 to N6, while S7 moves from N1 to N5. + +. If shard affinity is not enabled, index movements aren’t restricted by shard grouping. + +. There’s no one-to-one mapping between source and destination nodes. +Indexes or shards can move from any of the source nodes to any of the destination nodes involved in the rebalance. + --- -.. Select a source node (N1), add a new destination node (S), and perform a swap rebalance (remove N1, add S). +Nodes N3 and N4 aren’t involved in this index movement. + + +[#full-swap-rebalance-example] +==== Full Swap Rebalance Example + +Perform a full swap rebalance cycle as follows: + +. Select a source node (N1), add a new destination node (S), and perform a swap rebalance (remove N1, add S). + All indexes from N1 are rebuilt on S using the DCP-based method, which adds the required shard affinity metadata. -.. Add N1 back as an empty node and repeat the swap rebalance with the next node (N2). +. Add N1 back as an empty node and repeat the swap rebalance with the next node (N2). -.. Continue this process for all nodes in the cluster until every index has been moved once. +. Continue this process for all nodes in the cluster until every index has been moved once. + This operation rewrites the indexes with shard affinity. + After the cycle completes, all indexes have shard affinity, and future index movements use FBR. --- -+ -* If you disable FBR: During a rebalance, index movements use the traditional DCP-based method, -which reads data from the Data Service and rebuilds the index from scratch on the destination node through a xref:learn:clusters-and-availability/rebalance-and-index-service.adoc#build-indexes-via-swap-rebalance[full swap rebalance]. -* If you disable shard affinity on a cluster, future rebalances use the DCP-based method, and shard affinity is no longer guaranteed. - -==== Working on FBR in Common Operations +=== Working on FBR in Common Operations Working of FBR during the following common operations: @@ -168,142 +359,6 @@ During the transfer, I1 continues to serve queries. .. After the rebalance completes, N1 becomes fully active, and I1 is removed from the cluster with no downtime. -- -=== Shard Affinity - -Plasma, the storage engine for Global Secondary Indexes (GSI), stores data in shards. -Each shard is a set of on-disk files that can contain multiple index partitions. -Sharing shard files across indexes reduces overhead and improves index scalability. -In earlier versions, Plasma automatically places each index partition into a shard. - -With shard affinity, the GSI layer assigns a shard slot or alternate shard ID to each index partition and passes it to Plasma. -Plasma stores the data in that specific shard on the node. -Plasma is unaware of the cluster layout and high-availability (HA) constraints, so the GSI layer makes this decision. -This ensures that the replicas are distributed across nodes or server groups and that matching replicas align on the same shard slot. -This approach does the following: - -* Provides deterministic collocation, where all indexes with the same shard ID share the same shard files. -* Prevents replica-on-same-node conflicts. -* Enables efficient data movement through FBR. - -Shard affinity keeps all index partitions with the same shard ID on the same node and moves them as a single unit during index rebalancing. -This behavior also applies to internal data structures associated with those shards, which remain collocated and move together. - -==== Relationship Between Shard Affinity and FBR - -The Shard Affinity is related to FBR or Shard Based Rebalance in the following ways: - -* Because partitions with the same shard ID reside in the same shard file, a rebalance can relocate them by copying that file to another node. - -* Without shard affinity, partitions of the same logical shard may be spread across multiple files or nodes, -making FBR inefficient and forcing the system to use the slower DCP rebuild method. -For this reason, a single configuration setting enables both shard affinity and FBR. - - -[#index-redistribution] -=== Index Redistribution - -Couchbase Server can redistribute indexes during rebalance. Redistributing indexes can improve performance by offloading heavily loaded nodes. A rebalance automatically redistributes indexes in the following situations: - -Rebalance when you add an index node:: -Rebalance always moves indexes off of nodes that you're removing from the cluster to the remaining nodes. -A rebalance does not affect indexes that reside on nodes that you're not removing. - -Rebalance when you add and remove index nodes:: -A swap rebalance moves indexes from nodes you're removing and places them on the nodes you're adding. - -You can change a setting to have a rebalance redistribute indexes in more cases. This setting is named **Optimize Index Placement On Rebalance** on the Couchbase Server Web Console's xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Settings page]. -You can also change this setting using the xref:manage:manage-settings/general-settings.adoc#index-settings-via-rest[Settings REST API] `redistributeIndexes` argument. - -NOTE: In Couchbase Server 7.2 and later, the redistribution setting affects both partitioned and non-partitioned indexes. - -Enabling the index redistribution setting causes a rebalance to redistribute indexes in the following situations: - -Rebalance after you add an index node:: -Rebalance optimizes index placement across all index nodes in the cluster, including on the new index nodes. - -Rebalance after you add or remove a non-index node:: -Rebalance moves indexes from heavily loaded nodes to nodes with free resources to balance distribution. - -Rebalance during an index server group repair:: -A group failure in a multiple server group database can force all replicas into a single group. In this case, rebalance redistributes the replicas to support high availability across server groups after the server group repair. - -NOTE: If after you drop Index Service nodes, the remaining nodes cannot handle all of the index replicas, Couchbase Server drops some of the replicas. If you later add additional Index Service nodes to the cluster, Couchbase Server replaces the dropped replicas. - -[#index-rebalance-batch-size] -=== Index Rebuild Batch Size - -When Couchbase Server rebalances indexes by rebuilding them, it groups the rebuilds in batches. -This batching limits the overhead of rebuilding the indexes on the cluster. -The default batch size is `3`, which means that a rebalance rebuilds up to 3 indexes at the same time. -This setting has no effect if you have enabled file-based rebalancing. - -Users with Full Admin or Cluster Admin roles can change the batch size using the REST API. -See xref:rest-api:rest-modify-index-batch-size.adoc[Modify Index Batch Size]. - -[#smart-batching] -=== Smart Batching - -During a Rebalance operation, Couchbase Server breaks the rebuilding process into batches to limit the performance impacts. - -The default batch size is set to 3 applying a limit on the amount of work attempted concurrently. - -In Couchbase Server 7.1 and later versions, you can use smart batching with one or more of the following purposes: - -* Reduce further time and resources required to move the index metadata. -* Rebuild indexes at their new locations during rebalance. -* Increase rebalance performance by increasing pipeline parallelism by starting the next batch when the previous batch is only partially completed. -* Allow the increase of overall concurrency by using administrator-determined modifications of the batch size. -* Optimize the sharing of data streams where index relocation takes place. -* Repair index replicas lost due to node failure before relocating indexes. -* Dynamically reassign index-rebuild tasks between batches to improve workload balance. - -If at least one node in the cluster is running Server 7.1 or later, most smart batching features apply across the cluster, -even when some nodes are running earlier versions. - -You can change the default batch size of 3 by the Full Admin and Cluster Admin roles using the REST API. -For more information, see xref:rest-api:rest-modify-index-batch-size.adoc[Modify Index Batch Size]. - -== Swap Rebalance for Index Services - -A swap rebalance replaces a set of existing source nodes with an equal number of new destination nodes. -During a swap rebalance, index movements occur only between the specified source and destination nodes. -The other nodes in the cluster are unaffected and continue to serve queries without index movement. -If Optimize Index Placement is enabled, index movements can occur across any node in the cluster. - -=== Example of Swap Rebalance for Index Services - -For example, in a four-node cluster (N1, N2, N3, N4) with Optimize Index Placement disabled, you plan to replace nodes N1 and N2. -Add two new empty nodes, N5 and N6, then perform a swap rebalance by marking N1 and N2 for removal and adding N5 and N6. - -. Assume the source node N1 hosts shards S1 that includes index idx_A, S7 and S10. -Assume node N2 hosts shards S2 that also includes idx_A and S9. - -. If shard affinity is enabled, entire shards move between nodes. -During the swap rebalance, the planner initiates index movements for all these shards to the new destination nodes N5 and N6. -For example, S1 and S10 may move from N1 to N6, while S7 moves from N1 to N5. - -. If shard affinity is not enabled, index movements aren’t restricted by shard grouping. - -. There’s no one-to-one mapping between source and destination nodes. -Indexes or shards can move from any of the source nodes to any of the destination nodes involved in the rebalance. -+ -Nodes N3 and N4 aren’t involved in this index movement. - -=== Rebuilding Indexes Without FBR Metadata - -Indexes that don’t have shard affinity must be rebuilt once by running a xref:learn:clusters-and-availability/rebalance-and-index-service.adoc#build-indexes-via-swap-rebalance[full swap rebalance] cycle, with FBR enabled. -This rebalance uses the DCP-based method but adds the metadata required for FBR and enforces shard affinity. -After this process, all future rebalances use FBR. - -== Restarting an FBR - -If an FBR fails, you can try starting a new rebalance. -The second rebalance does not re-transfer any index that the failed rebalance finished moving. -Instead, it moves just the indexes that had not moved or were in the process of moving when the error occurred. - -You enable FBR using settings located under the under the xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Index Storage Mode] on the Couchbase Server Web Console's Settings page. -You can also enable it using the REST API's xref:manage:manage-settings/general-settings.adoc#index-settings-via-rest[`settings/indexes` endpoint]. - == Failover of Index Service Nodes The following is how node failover affects the Index Service: @@ -459,7 +514,7 @@ This section compares two approaches for upgrading Index Service nodes in a Couc FBR behavior depends on the Couchbase Server version running on the nodes in a mixed-version cluster: -* Nodes running version 7.6 or later support FBR. +* Nodes running Couchbase Server 7.6 or later versions support FBR. * Nodes running a Couchbase Server version older than 7.6 do not support FBR. diff --git a/modules/learn/pages/clusters-and-availability/rebalance.adoc b/modules/learn/pages/clusters-and-availability/rebalance.adoc index 0af8c2da61..2070ad39d7 100644 --- a/modules/learn/pages/clusters-and-availability/rebalance.adoc +++ b/modules/learn/pages/clusters-and-availability/rebalance.adoc @@ -136,9 +136,18 @@ A complete account of the report-content is provided in the xref:rebalance-refer == Rebalance and Other Services Rebalance affects different services differently. -The effects on services other than the Data Service are described below. +The following sections explain the rebalance operation effects on non-Data Services. -For information about the rebalance operation in Index Service, see xref:learn:clusters-and-availability/rebalance-and-index-service.adoc[Rebalance and Index Service]. +[#rebalancing-the-index-service] +== Index Service + +The Index Service maintains a cluster-wide set of index definitions and metadata, which allows the redistribution of indexes and index replicas during a rebalance. + +The rebalance process considers the node's CPU, RAM, and disk bandwidth to limit its effect on database performance. + +Couchbase Server either rebuilds indexes in their new locations or moves index files between nodes during a rebalance, +depending on the cluster's index storage mode and on configuration settings. +For more information about the rebalance operation on Index Service, see xref:learn:clusters-and-availability/rebalance-and-index-service.adoc[Rebalance and Index Service]. [#rebalancing-the-search-service] === Search Service From 3efae0dd83765cf3ec5af0d68aeececb29157e34 Mon Sep 17 00:00:00 2001 From: Shwetha Rao Date: Tue, 25 Nov 2025 19:00:20 +0530 Subject: [PATCH 08/26] Added corrected and formatted examples --- .../rebalance-and-index-service.adoc | 213 ++++++++++-------- .../clusters-and-availability/rebalance.adoc | 1 + 2 files changed, 115 insertions(+), 99 deletions(-) diff --git a/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc b/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc index fdee3d9360..9eb172e350 100644 --- a/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc +++ b/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc @@ -81,8 +81,9 @@ FBR is composed of the following features: [NOTE] ==== -* FBR is supported only if you have enabled xref:learn:services-and-indexes/indexes/storage-modes.adoc#standard-index-storage[Standard Index Storage] on your cluster. -* You cannot use FBR if you have enabled xref:learn:services-and-indexes/indexes/storage-modes.adoc#memory-optimized-index-storage[Memory Optimized Index Storage] on your cluster because it does not store index metadata in files. +* FBR is supported only if you have enabled Standard Global Secondary xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Index Storage Mode] on your cluster. + +* You cannot use FBR if you have enabled xref:learn:services-and-indexes/indexes/storage-modes.adoc#memory-optimized-index-storage[Memory Optimized Index Storage] in the xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Index Storage Mode] settings on your cluster because it does not store index metadata in files. * Shard Based Rebalance and Rebalance Based on File Transfer are synonyms for File-Based Rebalance. ==== @@ -105,7 +106,9 @@ You need to enable FBR to use it. * To enable FBR from the UI, do the following: -.. On your cluster, in the xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Index Storage Mode], enable Standard Index Storage. +.. On your cluster, in the xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Index Storage Mode], enable Standard Global Secondary mode. ++ +For more information about Standard Global Secondary index storage mode, see xref:learn:services-and-indexes/indexes/storage-modes.adoc#standard-index-storage[Standard Index Storage]. .. Select *Enable File Transfer Based Rebalance*. @@ -139,7 +142,7 @@ endif::[] A swap rebalance removes one or more source nodes and adds the same number of destination nodes. During the swap rebalance operation, indexes move only between those source and destination nodes. -All other nodes continue serving queries and no indexes relocate between them. +All other nodes continue supporting Query Service and no indexes relocate between them. You can enable index movements across any index node during a rebalance in the cluster through the following ways: @@ -148,7 +151,7 @@ You can enable index movements across any index node during a rebalance in the c * Use the REST API `redistributeIndexes` argument. For more information, see xref:manage:manage-settings/general-settings.adoc#index-settings-via-rest[Settings REST API]. -== When Does FBR Take Effect +== When FBR Takes Effect The FBR method uses metadata in the index's files during the relocation process. @@ -168,7 +171,8 @@ NOTE: This is the best practice for using FBR. [#fbr-enabled-after-index-creation] === FBR Enabled After Index Creation -When you create indexes and then enable FBR, Couchbase Server does not use FBR method for that index right away because those indexes do not have <<#shard-affinity,Shard Affinity>>. +When you create indexes and then enable FBR (this is same as when FBR is disabled and you create new indexes), Couchbase Server does not use FBR method for that index right away because those indexes do not have <<#shard-affinity,Shard Affinity>>. + Instead, the next rebalance rebuilds the index, and during this rebuild Couchbase Server adds the required metadata to the index files. After this initial rebuild, all subsequent rebalances for that index use FBR. @@ -240,10 +244,18 @@ You can use smart batching for one or more of the following purposes: NOTE: If at least one node in the cluster is running Server 7.1 or a later version, most smart batching features apply across the cluster, even when some nodes are running earlier versions. +[#fbr-all-examples] == Examples +This section provides examples of how different rebalance methods affect the Index Service. -== Example of Swap Rebalance for Index Services +[#example-of-swap-rebalance] +=== Example of Swap Rebalance + +The following examples show how Couchbase Server handles swap rebalance operations for the Index Service. + +[#swap-rebalance-for-index-service-example] +==== Swap Rebalance for Index Services For example, in a four-node cluster (N1, N2, N3, N4) with Optimize Index Placement disabled, you plan to replace nodes N1 and N2. Add two new empty nodes, N5 and N6, then perform a swap rebalance by marking N1 and N2 for removal and adding N5 and N6. @@ -280,119 +292,118 @@ This operation rewrites the indexes with shard affinity. + After the cycle completes, all indexes have shard affinity, and future index movements use FBR. +=== Working of FBR in Common Operations -=== Working on FBR in Common Operations +Working of File-Based Rebalance (FBR) during the following common operations. -Working of FBR during the following common operations: +==== Adding Capacity (Scale-Out) -* Adding Capacity (Scale-Out): +The following procedure shows how File-Based Rebalance (FBR) works when adding index capacity: -+ --- -.. When a new index node is added to the cluster and a rebalance is triggered, the system may move indexes to the new node to balance the load. +. When a new index node is added to the cluster and a rebalance is triggered, the system may move indexes to the new node to balance the load. -.. Source nodes remain online and continue serving queries while the index movement occurs in the background. +. Source nodes remain online and continue supporting Query Service while the index movement occurs in the background. -.. The index files are copied to the destination node, which then catches up on any data changes that occurred during the transfer. +. The index files are copied to the destination node, which then catches up on any data changes that occurred during the transfer. -.. After synchronization, the index on the destination node becomes active, and the original index on the source node is removed. --- -+ -An example of adding capacity is as follows: +. After synchronization, the index on the destination node becomes active, and the original index on the source node is removed. + +An example of adding index capacity is as follows: + +. A cluster has 2 index nodes, I1 and I2. + --- -.. A cluster contains two index nodes, I1 and I2. Add a new destination node, I3, and trigger a rebalance. -.. During the rebalance, an index such as idx_A on source node I1 is moved to I3 by copying its shard file. -Other indexes that share the same shard are also moved to I3 as part of the same operation. +. During the rebalance, an index such as idx_A on source node I1 is moved to node I3 by copying its shard file. +Other indexes that share the same shard are also moved to node I3 as a part of the same operation. -.. While the copy is in progress, I1 continues to serve queries for idx_A. +. While the copy is in progress, I1 continues to support Query Service for idx_A. After I3 synchronizes and catches up with recent changes, it takes over query processing for idx_A, and the original index on I1 is removed. --- -* Planned Node Removal (Rebalance-Out): -+ --- -.. When a node is marked for removal and a rebalance is triggered, the rebalance process moves all indexes from the source node to other nodes in the cluster. -Entire shards are transferred as part of this operation. +==== Planned Node Removal (Rebalance-Out) -.. The process does not interrupt service—queries remain available throughout. +The following procedure shows how File-Based Rebalance (FBR) works when removing a node: + +. When a node is marked for removal and a rebalance is triggered, the rebalance process moves all indexes from the source node to other nodes in the cluster. +Entire shards are transferred as a part of this operation. + +. The process does not interrupt service. +Query Service remains available throughout. + +. After synchronization completes and the destination nodes begin serving the indexes, the source node can be safely removed from the cluster. -.. After synchronization completes and the destination nodes begin serving the indexes, the source node can be safely removed from the cluster. --- -+ An example of planned node removal is as follows: + +. A cluster has 3 index nodes, I1, I2, and I3. + --- -.. A cluster includes 3 index nodes: I1, I2, and I3. You plan to decommission I3. -.. During rebalance, indexes on the source node I3 are moved to the destination nodes I1 and I2. -For example, idx_B on I3 is moved to I1, and idx_C on I3 is moved to I2, along with all other indexes that share the same shards. +. During rebalance, indexes on the source node I3 are moved to the destination nodes I1 and I2. +For example, idx_B on I3 is moved to I1, and idx_C on I3 is moved to I2, along with all indexes that share the same shards. -.. After all index movements are complete, I3 is safely removed from the cluster. --- +. After all index movements are complete, I3 is safely removed from the cluster. -* Swap Rebalance (One-for-One Replacement): -+ --- -.. An existing node O is replaced by a new node R. +==== Swap Rebalance (One-for-One Replacement) + +The following procedure shows how File-Based Rebalance (FBR) works when one node is replaced by another: + +. An existing node O is replaced by a new node R. -.. During rebalance, all indexes on the source node O are moved to the destination node R by copying their shard files. +. During rebalance, all indexes on the source node O are moved to the destination node R by copying their shard files. ++ No other index movements occur when Optimize Index Placement is disabled. -.. The source node O continues to serve queries during the transfer. -After the FBR completes and the destination node R catches up with new mutations, +. The source node O continues to support Query Service during the transfer. + +. After the FBR completes and the destination node R catches up with new mutations, it takes over serving the indexes, and the source node O is removed from the cluster. --- -+ + An example of swap rebalance is as follows: -+ --- -.. In a cluster with nodes I1, I2, and I3, you plan to replace the source node I1 with a new destination node N1. -.. If I1 hosts indexes idx_A and idx_B, they are moved to N1 using FBR. -During the transfer, I1 continues to serve queries. +. In a cluster having nodes I1, I2, and I3, you plan to replace the source node I1 with a new destination node N1. -.. After the rebalance completes, N1 becomes fully active, and I1 is removed from the cluster with no downtime. --- +. If I1 hosts indexes idx_A and idx_B, they're moved to N1 using FBR. +During the transfer, I1 continues to support Query Service. -== Failover of Index Service Nodes +. After the rebalance completes, N1 becomes fully active, and I1 is removed from the cluster with no downtime. + +[#failover-idx-nodes] +=== Failover of Index Service Nodes The following is how node failover affects the Index Service: -* If a node becomes unhealthy, ns_server can remove it from the cluster through autofailover, or you can manually fail it over. +. If a node becomes unhealthy, ns_server can remove it from the cluster through autofailover, or you can manually fail it over. -* Indexes on the failed node are unavailable when replicas do not exist on other nodes. +. Indexes on the failed node are unavailable when replicas do not exist on other nodes. -* The Query Service automatically redirects requests to available replicas. +. The Query Service automatically redirects requests to available replicas. -* If a rebalance is triggered while the node remains failed over, the system performs a replica repair. +. If a rebalance is triggered while the node remains failed over, the system performs a replica repair. When a replica exists, it can be copied using FBR if shard affinity is enabled. If no replica exists, the index is lost. -* If the failed node recovers before a rebalance occurs, it can be added back to the cluster, and the next rebalance restores its indexes. +. If the failed node recovers before a rebalance occurs, it can be added back to the cluster, and the next rebalance restores its indexes. Any duplicate replicas created during the failover are removed during this add-back rebalance. -=== Node Failover Examples - The following examples illustrate how Couchbase Server handles node failover scenarios, both when replicas are available and when they are not. ==== Failover With Replica -This example demonstrates how Couchbase Server maintains data availability when a node hosting an index fails and a replica is available: - -.. Node N1 hosts idx_A-r0, the primary replica of idx_A. +This example shows how Couchbase Server maintains data availability when a node hosting an index fails and a replica is available: -.. Node N2 hosts idx_A-r1, a secondary replica of idx_A. - -.. When node N1 crashes, an administrator triggers a failover. +. Node N1 hosts idx_A-r0, the primary replica of idx_A. ++ +Node N2 hosts idx_A-r1, a secondary replica of idx_A. ++ +When node N1 crashes, an administrator triggers a failover. -.. idx_A-r0 is marked as lost, and queries are automatically redirected to idx_A-r1 on node N2. +. idx_A-r0 is marked as lost. ++ +Query Services are automatically redirected to idx_A-r1 on node N2. -.. Afterwards, a rebalance is triggered. +. Afterwards, a rebalance is triggered. ++ The system creates a new replica, idx_A-r0, on another node (for example, N3) to restore the required replica count. This process is known as replica repair. @@ -403,31 +414,30 @@ Replica repair also does not occur if the feature is disabled in the settings or This example shows what happens when a node hosting an index fails and no replica exists to maintain data availability: -.. Index idx_B exists only on node N1 (replica count = 0). - -.. Node N1 fails over. +. Index idx_B exists only on node N1 (replica count = 0). ++ +Node N1 fails over. When this happens, the system removes N1 from the active cluster topology. ++ +Because idx_B has no replicas on other nodes, it becomes immediately unavailable. ++ +Any Query Services that depend on idx_B return an error, because no valid copy of the index exists in the cluster. -... Because idx_B has no replicas on other nodes, it becomes immediately unavailable. -Any queries that depend on idx_B return an error, because no valid copy of the index exists in the cluster. - -... If a rebalance runs, the system marks idx_B as lost and removes its definition from the cluster metadata. +. If a rebalance runs, the system marks idx_B as lost and removes its definition from the cluster metadata. -== Removal of Index Service Nodes +=== Removal of Index Service Nodes The following is how node removal affects the Index Service: -* A planned, graceful operation that decommissions a healthy node. - -* The node is marked for removal, and a rebalance is triggered. +. A planned, graceful operation that decommissions a healthy node. ++ +The node is marked for removal, and a rebalance is triggered. -* Before the source node goes offline, all its indexes move to other destination nodes in the cluster by using FBR, if shard affinity is enabled. +. Before the source node goes offline, all its indexes move to other destination nodes in the cluster by using FBR, if shard affinity is enabled. -* The node is removed only after all index movements are complete. +. The node is removed only after all index movements are complete. This process ensures that ongoing scans on the source node complete before removal, preventing any data loss or service interruption. -=== Node Removal Examples - The following examples explain how node removal and rebalance operations affect the Index Service, both when replicas are present and when they are not. ==== Removal and Rebalance-Out With Replicas @@ -436,30 +446,33 @@ The following example explains removing an Index Service node from a cluster and . Node N3 hosts the replica idx_C-r1. The node is healthy but needs to be decommissioned. ++ +An administrator marks N3 for removal and starts a rebalance. ++ +NOTE: Selecting Remove only marks the node for removal. +You must start a rebalance for the removal to take effect. -. An administrator marks N3 for removal and starts a rebalance. -Selecting Remove only marks the node for removal and you must start a rebalance for the removal to take effect. - -.. The system begins moving idx_C-r1 to a destination node, such as N1. +. The system begins moving idx_C-r1 to a destination node, for example, N1. -.. During the transfer, N3 continues to serve queries for idx_C-r1 to maintain availability. +. During the transfer, N3 continues to support Query Service for idx_C-r1 to maintain availability. -.. After the transfer completes, N3 is safely removed from the cluster with no service interruption. +. After the transfer completes, N3 is safely removed from the cluster with no service interruption. ==== Removal or Rebalance-Out Without Replicas The following example describes the process of removing an Index Service node when the index does not have replicas: . Index idx_D exists only on node N3. ++ +An administrator marks N3 for removal and starts a rebalance. -. An administrator marks N3 for removal and starts a rebalance. - -.. The system begins copying idx_D from the source node N3 to a destination node, such as N1. - -.. Node N3 leaves the cluster only after the copy completes and idx_D is fully available on N1. +. The system begins copying idx_D from the source node N3 to a destination node, for example, N1. -.. Queries that use idx_D remain online during the entire operation. +. Node N3 leaves the cluster only after the copy completes and idx_D is fully available on N1. ++ +Query Service that uses idx_D remain online during the entire operation. +[#failover-vs-removal] == Failover vs Removal (Rebalance-Out) The following table summarizes the key differences between failover and planned removal (rebalance-out) of Index Service nodes: @@ -481,6 +494,7 @@ The following table summarizes the key differences between failover and planned | Node is permanently decommissioned |=== +[#upgrade-idx-service-swap-vs-fbr] == Upgrade Index Service Using - Swap Rebalance vs Failover-Based Rebalance This section compares two approaches for upgrading Index Service nodes in a Couchbase cluster - swap rebalance and failover-based rebalance. @@ -510,6 +524,7 @@ This section compares two approaches for upgrading Index Service nodes in a Couc | Reactive process following a node failure or manual failover. |=== +[fbr-in-mixed-version-clusters] == FBR in Mixed-Version Clusters FBR behavior depends on the Couchbase Server version running on the nodes in a mixed-version cluster: diff --git a/modules/learn/pages/clusters-and-availability/rebalance.adoc b/modules/learn/pages/clusters-and-availability/rebalance.adoc index 2070ad39d7..ec57ce8256 100644 --- a/modules/learn/pages/clusters-and-availability/rebalance.adoc +++ b/modules/learn/pages/clusters-and-availability/rebalance.adoc @@ -147,6 +147,7 @@ The rebalance process considers the node's CPU, RAM, and disk bandwidth to limit Couchbase Server either rebuilds indexes in their new locations or moves index files between nodes during a rebalance, depending on the cluster's index storage mode and on configuration settings. + For more information about the rebalance operation on Index Service, see xref:learn:clusters-and-availability/rebalance-and-index-service.adoc[Rebalance and Index Service]. [#rebalancing-the-search-service] From 8734ca316586cdad3bf7c0b5070e96785ae2563d Mon Sep 17 00:00:00 2001 From: Shwetha Rao Date: Tue, 25 Nov 2025 20:13:22 +0530 Subject: [PATCH 09/26] A few arrangements --- .../rebalance-and-index-service.adoc | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc b/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc index 9eb172e350..8d0a27a1ea 100644 --- a/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc +++ b/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc @@ -157,28 +157,23 @@ The FBR method uses metadata in the index's files during the relocation process. Couchbase Server can perform FBR for an index only when the index’s files include the required metadata: -* <<#fbr-enabled-before-index-creation,FBR Enabled Before Index Creation>> -* <<#fbr-enabled-after-index-creation,FBR Enabled After Index Creation>> - -[#fbr-enabled-before-index-creation] -=== FBR Enabled Before Index Creation - +* *FBR Enabled Before Index Creation*: If you enable FBR before you create indexes, Couchbase Server adds the metadata to the index files when creating them. As this metadata is in the index's files from the start, the initial rebalance of the index as well as all later rebalances use the FBR method. - ++ NOTE: This is the best practice for using FBR. -[#fbr-enabled-after-index-creation] -=== FBR Enabled After Index Creation - +* *FBR Enabled After Index Creation*: When you create indexes and then enable FBR (this is same as when FBR is disabled and you create new indexes), Couchbase Server does not use FBR method for that index right away because those indexes do not have <<#shard-affinity,Shard Affinity>>. - ++ Instead, the next rebalance rebuilds the index, and during this rebuild Couchbase Server adds the required metadata to the index files. After this initial rebuild, all subsequent rebalances for that index use FBR. - To establish shard affinity for all existing indexes, you must rebuild them once. ++ A <<#full-swap-rebalance-example,full swap rebalance>> cycle is a method for performing this rebuild. +For more examples on the working of FBR, see <<#working-of-fbr-operations,Working of FBR in Common Operations>> + [#index-redistribution] == More about Index Redistribution @@ -292,6 +287,7 @@ This operation rewrites the indexes with shard affinity. + After the cycle completes, all indexes have shard affinity, and future index movements use FBR. +[#working-of-fbr-operations] === Working of FBR in Common Operations Working of File-Based Rebalance (FBR) during the following common operations. From 4b0854ab68909876f0aee395b3da10fa750ffcdb Mon Sep 17 00:00:00 2001 From: Shwetha Rao Date: Tue, 25 Nov 2025 21:54:14 +0530 Subject: [PATCH 10/26] Interlinked a few sections for easy readability --- modules/ROOT/nav.adoc | 2 +- .../rebalance-and-index-service.adoc | 49 ++++++++++--------- .../clusters-and-availability/rebalance.adoc | 4 +- 3 files changed, 30 insertions(+), 25 deletions(-) diff --git a/modules/ROOT/nav.adoc b/modules/ROOT/nav.adoc index 3f39f66d64..8c346ad626 100644 --- a/modules/ROOT/nav.adoc +++ b/modules/ROOT/nav.adoc @@ -69,7 +69,7 @@ include::third-party:partial$nav.adoc[] ** xref:learn:clusters-and-availability/size-limitations.adoc[Size Limits] ** xref:learn:clusters-and-availability/nodes.adoc[Nodes] *** xref:learn:clusters-and-availability/rebalance.adoc[Rebalance] - **** xref:learn:clusters-and-availability/rebalance-and-index-service.adoc[Rebalance and Index Service] + **** xref:learn:clusters-and-availability/rebalance-and-index-service.adoc[Index Rebalance] *** xref:learn:clusters-and-availability/removal.adoc[Removal] *** xref:learn:clusters-and-availability/failover.adoc[Failover] **** xref:learn:clusters-and-availability/graceful-failover.adoc[Graceful] diff --git a/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc b/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc index 8d0a27a1ea..9162fa3f46 100644 --- a/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc +++ b/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc @@ -1,5 +1,5 @@ -= Rebalance and Index Service -:description: pass:q[This page describes how rebalance operations impact the Index Service in Couchbase Server, covering file-based rebalance, shard affinity, index redistribution, and node failover.] += Index Rebalance +:description: pass:q[This page explains how rebalance operations impact the Index Service in Couchbase Server, covering file-based rebalance, shard affinity, index redistribution, and node failover.] :page-aliases: clusters-and-availability:rebalance :page-toclevels: 3 @@ -11,7 +11,7 @@ The following sections explain how rebalance operation affects the Index Service == Index Service -The Index Service maintains cluster-wide index definitions and metadata to redistribute indexes and replicas during rebalance operations. +The Index Service maintains cluster-wide index definitions and metadata to <<#index-redistribution,redistribute indexes and replicas>> during rebalance operations. The rebalance operation evaluates each node's CPU, RAM, and disk bandwidth to minimize effects on database performance. @@ -19,9 +19,9 @@ The rebalance operation evaluates each node's CPU, RAM, and disk bandwidth to mi Couchbase Server defines how Global Secondary Indexes (GSI) stores and manages its underlying data structures using the following Index Storage Modes: -* Standard GSI Storage, which stores index data on disk required for File-Based Rebalance (FBR). +* xref:learn:services-and-indexes/indexes/storage-modes.adoc#standard-index-storage[Standard GSI Storage], which stores index data on disk required for File-Based Rebalance (FBR). -* Memory-Optimized GSI Storage, which stores most index structures in-memory and does not support file-based operations. +* xref:learn:services-and-indexes/indexes/storage-modes.adoc#memory-optimized-index-storage[Memory Optimized GSI Storage], which stores most index structures in-memory and does not support file-based operations. Plasma, the storage engine for GSI, stores index data in shards. Each shard is a set of on-disk files that can contain one or more index partitions, allowing multiple indexes to share the same physical storage. @@ -62,6 +62,8 @@ Couchbase Server provides the following index rebalance methods: * *Standard Rebalance*: This is the default method, which is the DCP-based method. This method reads data from the Data Service and rebuilds indexes on the destination node. Couchbase Server uses this method when File-Based Rebalance (FBR) is disabled, which is the default for self-managed clusters. ++ +For an example of DCP-based rebalance operation, see <<#full-swap-rebalance,Full Swap Rebalance (DCP-based Rebuild)>>. * *<<#file-based-rebalance-fbr,File-Based Rebalance (FBR) or Shard Based Rebalance>>*: This is the relocation method. In this method, Couchbase Server moves index files between nodes instead of rebuilding them during a rebalance. @@ -87,6 +89,8 @@ FBR is composed of the following features: * Shard Based Rebalance and Rebalance Based on File Transfer are synonyms for File-Based Rebalance. ==== +For examples of Index Rebalance and FBR in action, see <<#fbr-all-examples,Understanding Index Rebalance with Examples>>. + [#shard-affinity-and-fbr] ==== Relationship Between Shard Affinity and FBR @@ -144,12 +148,11 @@ A swap rebalance removes one or more source nodes and adds the same number of de During the swap rebalance operation, indexes move only between those source and destination nodes. All other nodes continue supporting Query Service and no indexes relocate between them. -You can enable index movements across any index node during a rebalance in the cluster through the following ways: +For examples of how swap rebalance works for Index Service using DCP-method, see <<#examples-of-swap-rebalance,Example of Swap Rebalance>>. -* From the UI, enable Optimize Index Placement in the xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Index Storage Mode] section. +For an example of how swap rebalance works for Index Service using FBR, see <<#swap-rebalance-fbr,Swap Rebalance (One-for-One Replacement)>>. -* Use the REST API `redistributeIndexes` argument. -For more information, see xref:manage:manage-settings/general-settings.adoc#index-settings-via-rest[Settings REST API]. +[#when-fbr-takes-effect] == When FBR Takes Effect @@ -170,7 +173,7 @@ Instead, the next rebalance rebuilds the index, and during this rebuild Couchbas After this initial rebuild, all subsequent rebalances for that index use FBR. To establish shard affinity for all existing indexes, you must rebuild them once. + -A <<#full-swap-rebalance-example,full swap rebalance>> cycle is a method for performing this rebuild. +A <<#full-swap-rebalance,full swap rebalance>> cycle is a method for performing this rebuild. For more examples on the working of FBR, see <<#working-of-fbr-operations,Working of FBR in Common Operations>> @@ -190,7 +193,7 @@ A rebalance does not affect indexes that reside on nodes that you're not removin A swap rebalance moves indexes from nodes you're removing and places them on the nodes you're adding. For more information, see <<#swap-rebalance-for-index-service,Swap Rebalance for Index Service>>. -You can enable index movements across any index node during a rebalance in the cluster through the following ways: +You can enable index redistribution or index movements across any index node during a rebalance in the cluster using one of the following ways: * From the UI, enable Optimize Index Placement in the xref:manage:manage-settings/general-settings.adoc#index-storage-mode[Index Storage Mode] section. @@ -214,7 +217,7 @@ NOTE: If after you drop Index Service nodes, the remaining nodes cannot handle a If you later add additional Index Service nodes to the cluster, Couchbase Server replaces the dropped replicas. [#smart-batching] -== Smart Batching +=== Smart Batching When Couchbase Server rebalances indexes by rebuilding them, it groups the rebuilds in batches. This batching limits the overhead of rebuilding the indexes on the cluster and limits the performance impacts. @@ -240,17 +243,17 @@ NOTE: If at least one node in the cluster is running Server 7.1 or a later versi even when some nodes are running earlier versions. [#fbr-all-examples] -== Examples +== Understanding Index Rebalance with Examples This section provides examples of how different rebalance methods affect the Index Service. -[#example-of-swap-rebalance] -=== Example of Swap Rebalance +[#examples-of-swap-rebalance] +=== Examples of Swap Rebalance The following examples show how Couchbase Server handles swap rebalance operations for the Index Service. -[#swap-rebalance-for-index-service-example] -==== Swap Rebalance for Index Services +[#swap-rebalance-without-optimize-index-placement] +==== Swap Rebalance without Optimize Index Placement For example, in a four-node cluster (N1, N2, N3, N4) with Optimize Index Placement disabled, you plan to replace nodes N1 and N2. Add two new empty nodes, N5 and N6, then perform a swap rebalance by marking N1 and N2 for removal and adding N5 and N6. @@ -270,8 +273,8 @@ Indexes or shards can move from any of the source nodes to any of the destinatio Nodes N3 and N4 aren’t involved in this index movement. -[#full-swap-rebalance-example] -==== Full Swap Rebalance Example +[#full-swap-rebalance] +==== Full Swap Rebalance (DCP-based Rebuild) Perform a full swap rebalance cycle as follows: @@ -340,6 +343,7 @@ For example, idx_B on I3 is moved to I1, and idx_C on I3 is moved to I2, along w . After all index movements are complete, I3 is safely removed from the cluster. +[#swap-rebalance-fbr] ==== Swap Rebalance (One-for-One Replacement) The following procedure shows how File-Based Rebalance (FBR) works when one node is replaced by another: @@ -493,7 +497,7 @@ The following table summarizes the key differences between failover and planned [#upgrade-idx-service-swap-vs-fbr] == Upgrade Index Service Using - Swap Rebalance vs Failover-Based Rebalance -This section compares two approaches for upgrading Index Service nodes in a Couchbase cluster - swap rebalance and failover-based rebalance. +This section compares 2 approaches for upgrading Index Service nodes in a Couchbase cluster - swap rebalance and failover-based rebalance. [cols="1,1,1", options="header"] |=== @@ -504,7 +508,8 @@ This section compares two approaches for upgrading Index Service nodes in a Couc | Used during an upgrade by failing over a node, adding a new node, and performing a rebalance. | *Index Movement* -| Indexes move only between the specified old and new nodes. Other nodes in the cluster are not involved. +| Indexes move only between the specified old and new nodes. +Other nodes in the cluster are not involved. | Indexes are rebuilt or repaired after failover as part of the rebalance process. | *Availability* @@ -527,7 +532,7 @@ FBR behavior depends on the Couchbase Server version running on the nodes in a m * Nodes running Couchbase Server 7.6 or later versions support FBR. -* Nodes running a Couchbase Server version older than 7.6 do not support FBR. +* Nodes running a Couchbase Server version earlier than 7.6 do not support FBR. * During a rebalance, movements that occur only between 7.6 or later nodes use FBR. diff --git a/modules/learn/pages/clusters-and-availability/rebalance.adoc b/modules/learn/pages/clusters-and-availability/rebalance.adoc index ec57ce8256..1d3bbdd3d9 100644 --- a/modules/learn/pages/clusters-and-availability/rebalance.adoc +++ b/modules/learn/pages/clusters-and-availability/rebalance.adoc @@ -145,10 +145,10 @@ The Index Service maintains a cluster-wide set of index definitions and metadata The rebalance process considers the node's CPU, RAM, and disk bandwidth to limit its effect on database performance. -Couchbase Server either rebuilds indexes in their new locations or moves index files between nodes during a rebalance, +Couchbase Server either rebuilds indexes (using DCP-based method) in their new locations or moves index files between nodes (File-Based Rebalance) during a rebalance, depending on the cluster's index storage mode and on configuration settings. -For more information about the rebalance operation on Index Service, see xref:learn:clusters-and-availability/rebalance-and-index-service.adoc[Rebalance and Index Service]. +For more information about the rebalance operation on Index Service, see xref:learn:clusters-and-availability/rebalance-and-index-service.adoc[Index Rebalance]. [#rebalancing-the-search-service] === Search Service From 5f642cf174e029ae4e2e3a3f6a4e89c69f9e5a34 Mon Sep 17 00:00:00 2001 From: Shwetha Rao Date: Tue, 25 Nov 2025 22:13:28 +0530 Subject: [PATCH 11/26] Edited the last heading --- .../rebalance-and-index-service.adoc | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc b/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc index 9162fa3f46..bef11c97ec 100644 --- a/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc +++ b/modules/learn/pages/clusters-and-availability/rebalance-and-index-service.adoc @@ -458,7 +458,7 @@ You must start a rebalance for the removal to take effect. . After the transfer completes, N3 is safely removed from the cluster with no service interruption. -==== Removal or Rebalance-Out Without Replicas +==== Removal and Rebalance-Out Without Replicas The following example describes the process of removing an Index Service node when the index does not have replicas: @@ -472,8 +472,12 @@ An administrator marks N3 for removal and starts a rebalance. + Query Service that uses idx_D remain online during the entire operation. +== Operational Comparisons + +The following sections provide concise, side-by-side comparisons to clarify operational behaviors and choices for Index Service during rebalance, failover, and upgrades. + [#failover-vs-removal] -== Failover vs Removal (Rebalance-Out) +=== Failover vs Removal (Rebalance-Out) The following table summarizes the key differences between failover and planned removal (rebalance-out) of Index Service nodes: @@ -495,7 +499,7 @@ The following table summarizes the key differences between failover and planned |=== [#upgrade-idx-service-swap-vs-fbr] -== Upgrade Index Service Using - Swap Rebalance vs Failover-Based Rebalance +=== Upgrade Index Service Using - Swap Rebalance vs Failover-Based Rebalance This section compares 2 approaches for upgrading Index Service nodes in a Couchbase cluster - swap rebalance and failover-based rebalance. @@ -526,7 +530,7 @@ Other nodes in the cluster are not involved. |=== [fbr-in-mixed-version-clusters] -== FBR in Mixed-Version Clusters +=== FBR in Mixed-Version Clusters FBR behavior depends on the Couchbase Server version running on the nodes in a mixed-version cluster: From e6225f0c143f1082c5cc352a55a7220bd09d479c Mon Sep 17 00:00:00 2001 From: Shwetha Rao Date: Wed, 26 Nov 2025 09:40:21 +0530 Subject: [PATCH 12/26] testing images --- .../full-swap-stage0.png | Bin 0 -> 113272 bytes .../full-swap-stage1.png | Bin 0 -> 176487 bytes .../full-swap-stage2.png | Bin 0 -> 84244 bytes .../full-swap-stage3.png | Bin 0 -> 73237 bytes .../images/clusters-and-availability/test.png | Bin 0 -> 86939 bytes .../rebalance-and-index-service.adoc | 49 +++++++++++------- 6 files changed, 31 insertions(+), 18 deletions(-) create mode 100644 modules/learn/assets/images/clusters-and-availability/full-swap-stage0.png create mode 100644 modules/learn/assets/images/clusters-and-availability/full-swap-stage1.png create mode 100644 modules/learn/assets/images/clusters-and-availability/full-swap-stage2.png create mode 100644 modules/learn/assets/images/clusters-and-availability/full-swap-stage3.png create mode 100644 modules/learn/assets/images/clusters-and-availability/test.png diff --git a/modules/learn/assets/images/clusters-and-availability/full-swap-stage0.png b/modules/learn/assets/images/clusters-and-availability/full-swap-stage0.png new file mode 100644 index 0000000000000000000000000000000000000000..daa0aac20159e32a1e0bb11399663a5cf59dad53 GIT binary patch literal 113272 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 Vgv@OWTm}CfmQ^?yzu&;~{{Zlwn4ACr literal 0 HcmV?d00001 diff --git a/modules/learn/assets/images/clusters-and-availability/full-swap-stage2.png b/modules/learn/assets/images/clusters-and-availability/full-swap-stage2.png new file mode 100644 index 0000000000000000000000000000000000000000..527a994dcb71f9cd0d83595b62cf8f9be658bb40 GIT binary patch literal 84244 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