{
  "id": "syncer",
  "title": "Syncer process",
  "url": "https://redis.io/docs/latest/operate/rs/8.0/databases/active-active/syncer/",
  "summary": "Detailed information about the syncer process and its role in distributed databases.",
  "content": "\n## Syncer process\n\nEach node in a cluster containing an instance of an Active-Active database hosts a process called the syncer.\nThe syncer process:\n\n1. Connects to the proxy on another participating cluster\n1. Reads data from that database instance\n1. Writes the data to the local cluster's primary(master) shard\n\nSome replication capabilities are also included in [Redis Open Source](https://redis.io/docs/latest/operate/oss_and_stack/management/replication).\n\nThe primary (also known as master) shard at the top of the primary-replica tree creates a replication ID.\nThis replication ID is identical for all replicas in that tree.\nWhen a new primary is appointed, the replication ID changes, but a partial sync from the previous ID is still possible.\n\n\nIn a partial sync, the backlog of operations since the offset are transferred as raw operations.\nIn a full sync, the data from the primary is transferred to the replica as an RDB file which is followed by a partial sync.\n\nPartial synchronization requires a backlog large enough to store the data operations until connection is restored. See [replication backlog](https://redis.io/docs/latest/operate/rs/databases/active-active/manage#replication-backlog) for more info on changing the replication backlog size.\n\n### Syncer in Active-Active replication\n\nIn the case of an Active-Active database:\n\n- Multiple past replication IDs and offsets are stored to allow for multiple syncs\n- The [Active-Active replication backlog](https://redis.io/docs/latest/operate/rs/databases/active-active/manage#replication-backlog) is also sent to the replica during a full sync.\n\n\nFull sync triggers heavy data transfers between geo-replicated instances of an Active-Active database.\n\n\nAn Active-Active database uses partial synchronization in the following situations:\n\n- Failover of primary shard to replica shard\n- Restart or crash of replica shard that requires sync from primary\n- Migrate replica shard to another node\n- Migrate primary shard to another node as a replica using failover and replica migration\n- Migrate primary shard and preserve roles using failover, replica migration, and second failover to return shard to primary\n\n\nSynchronization of data from the primary shard to the replica shard is always a full synchronization.\n\n\n## Troubleshooting syncer errors\n\n### Unrecoverable syncer errors\n\nSome syncer errors are unrecoverable and cause the syncer to exit with exit code 4. When this occurs, the Data Management Controller (DMC) automatically sets the `crdt_sync` or `replica_sync` value to `stopped`.\n\n#### Restart syncer for regular databases\n\nTo restart a regular database's syncer after an unrecoverable error, [update the database configuration](https://redis.io/docs/latest/operate/rs/references/rest-api/requests/bdbs#put-bdbs) with the REST API to enable `sync`:\n\n\n```sh\ncurl -v -k -u \u003cusername\u003e:\u003cpassword\u003e -X PUT \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"sync\": \"enabled\"}' \\\n  https://\u003chost\u003e:\u003cport\u003e/v1/bdbs/\u003cdatabase-id\u003e\n```\n\n#### Restart syncer for Active-Active databases\n\nTo restart an Active-Active database's syncer after an unrecoverable error, use one of the following methods.\n\n-  For each participating cluster, [update the database configuration](https://redis.io/docs/latest/operate/rs/references/rest-api/requests/bdbs#put-bdbs) with the REST API to enable `sync`:\n\n   ```sh\n   curl -v -k -u \u003cusername\u003e:\u003cpassword\u003e -X PUT \\\n     -H \"Content-Type: application/json\" \\\n     -d '{\"sync\": \"enabled\"}' \\\n     https://\u003chost\u003e:\u003cport\u003e/v1/bdbs/\u003cdatabase-id\u003e\n   ```\n\n- Run [`crdb-cli crdb update`](https://redis.io/docs/latest/operate/rs/references/cli-utilities/crdb-cli/crdb/update):\n\n   ```sh\n   crdb-cli crdb update --crdb-guid \u003ccrdb-guid\u003e --force\n   ```\n\n\nReplace `\u003cusername\u003e`, `\u003cpassword\u003e`, `\u003chost\u003e`, `\u003cport\u003e`, `\u003cdatabase-id\u003e`, and `\u003ccrdb-guid\u003e` with your actual values.\n\n",
  "tags": ["docs","operate","rs"],
  "last_updated": "2026-07-23T12:00:25-05:00"
}
