{
  "schema_version": 2,
  "id": "operate/rs/databases/active-active/syncer",
  "title": "Syncer process",
  "url": "https://redis.io/docs/latest/operate/rs/databases/active-active/syncer/",
  "summary": "Detailed information about the syncer process and its role in distributed databases.",
  "tags": [
    "docs",
    "operate",
    "rs"
  ],
  "last_updated": "2026-09-24T09:16:24+01:00",
  "page_type": "content",
  "content_hash": "6d6089fe15674e47d44e4f0e2373781151f034733b6e25a787550c51fbf7a1cc",
  "sections": [
    {
      "id": "syncer-process",
      "title": "Syncer process",
      "role": "overview",
      "text": "Each 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."
    },
    {
      "id": "syncer-in-active-active-replication",
      "title": "Syncer in Active-Active replication",
      "role": "content",
      "text": "In 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> [!WARNING]\n> Full sync triggers heavy data transfers between geo-replicated instances of an Active-Active database.\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> [!NOTE]\n> Synchronization of data from the primary shard to the replica shard is always a full synchronization."
    },
    {
      "id": "troubleshooting-syncer-errors",
      "title": "Troubleshooting syncer errors",
      "role": "errors",
      "text": ""
    },
    {
      "id": "unrecoverable-syncer-errors",
      "title": "Unrecoverable syncer errors",
      "role": "content",
      "text": "Some 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[code example]\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   [code example]\n\n- Run [`crdb-cli crdb update`](https://redis.io/docs/latest/operate/rs/references/cli-utilities/crdb-cli/crdb/update):\n\n   [code example]\n\n> [!NOTE]\n> Replace `<username>`, `<password>`, `<host>`, `<port>`, `<database-id>`, and `<crdb-guid>` with your actual values."
    }
  ],
  "examples": [
    {
      "id": "unrecoverable-syncer-errors-ex0",
      "language": "sh",
      "code": "curl -v -k -u <username>:<password> -X PUT \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"sync\": \"enabled\"}' \\\n  https://<host>:<port>/v1/bdbs/<database-id>",
      "section_id": "unrecoverable-syncer-errors"
    },
    {
      "id": "unrecoverable-syncer-errors-ex1",
      "language": "sh",
      "code": "curl -v -k -u <username>:<password> -X PUT \\\n     -H \"Content-Type: application/json\" \\\n     -d '{\"sync\": \"enabled\"}' \\\n     https://<host>:<port>/v1/bdbs/<database-id>",
      "section_id": "unrecoverable-syncer-errors"
    },
    {
      "id": "unrecoverable-syncer-errors-ex2",
      "language": "sh",
      "code": "crdb-cli crdb update --crdb-guid <crdb-guid> --force",
      "section_id": "unrecoverable-syncer-errors"
    }
  ]
}
