数据库复制
数据库复制有助于确保高可用性。当启用复制时,您的数据集会被复制到一个副本分片,该副本分片会不断与主分片同步。如果主分片发生故障,将发生自动故障转移,副本分片将被提升。也就是说,它将成为新的主分片。
当旧的主分片恢复时,它将成为新主分片的副本分片。这种自动故障转移机制保证了数据服务的中断最小化。
您可以通过以下方式调整您的高可用性配置:
- Rack/Zone Awareness - 当使用机架-区域感知时,额外的逻辑确保主分片和副本分片永远不会共享同一个机架,从而确保即使在整个机架丢失的情况下也能保持可用性。
- 副本分片的高可用性 - 当使用副本分片的高可用性时,副本分片会在节点故障转移时自动迁移,以保持高可用性。
自动分层复制注意事项
我们建议您使用rladmin
设置顺序复制功能。这是因为在启用自动分层的数据库中,可能会出现相对较慢的复制时间。在某些情况下,如果未设置顺序复制,您可能会耗尽内存。
虽然它不会导致主分片上的数据丢失,但只要主分片上有高写入率的流量并且同时进行多次复制,复制到副本分片的操作可能不会成功。
以下rladmin
命令设置可以从同一集群节点复制的合格主分片数量,以及在同一集群节点上可以运行复制过程的副本分片数量。
推荐的顺序复制配置是两个,即:
rladmin tune cluster max_redis_forks 1 max_slave_full_syncs 1
数据库复制积压
使用复制以实现高可用性的Redis数据库维护一个复制积压(每个分片),以同步数据库的主分片和副本分片。
默认情况下,复制积压设置为数据库大小的百分之一(1%)除以数据库的分片数量,每个分片的大小范围在1MB到250MB之间。
使用rladmin
和crdb-cli
工具来控制复制积压的大小。您可以将其设置为auto
或设置特定大小。
语法在常规数据库和Active-Active数据库之间有所不同。
对于一个常规的Redis数据库:
rladmin tune db <db:id | name> repl_backlog <Backlog size in MB | 'auto'>
对于一个Active-Active数据库:
crdb-cli crdb update --crdb-guid <crdb_guid> --default-db-config "{\"repl_backlog_size\": <size in MB | 'auto'>}"
主动-主动复制积压
除了数据库复制积压外,Active-Active 数据库还维护一个积压(每个分片)以同步集群之间的数据库实例。
默认情况下,Active-Active 复制积压设置为数据库大小的百分之一(1%)除以数据库的分片数量,每个分片的范围在1MB到250MB之间。
使用 crdb-cli
工具来控制 CRDT 复制积压的大小。您可以将其设置为 auto
或设置特定大小:
crdb-cli crdb update --crdb-guid <crdb_guid> --default-db-config "{\"crdt_repl_backlog_size\": <size in MB | 'auto'>}"
对于早于6.0.20版本的Redis软件:
复制积压和CRDT复制积压的默认值设置为1MB,并且无法使用'auto'模式动态设置。
要控制复制日志的大小,请使用rladmin
来调整每个集群中的本地数据库实例。
rladmin tune db <db:id | name> repl_backlog <Backlog size in MB (or if ending with bytes, KB or GB, in the respective unit)>