目录
摘要:
第三方工具调研:
一. redis-dump, 不推荐
二. redis-migrate-tool, 推荐
作为redis集群备份的方案:
待处理:
摘要:
redis的cluster集群数据按槽位存储, 本文记录如何将全部数据导出.
第三方工具调研: 一. redis-dump, 不推荐安装redis-dump:
yum install ruby rubygems ruby-devel -y gem install redis-dump
但是在测试的时候发现, redis-dump只能将连接的redis-server的数据导出, 不能导出整个集群的数据.
二. redis-migrate-tool, 推荐github地址: https://github.com/JokerQueue/redis-migrate-tool
编译方法:
1. 先得装上automake
yum install automake -y
2. 编译:
aclocal autoconf autoheader automake --add-missing ./configure make
原理是模仿主从协议,
第一次使用rdb文件全量同步
随后使用增量同步
配置从一个集群拷贝到另一个集群:
[source] type: redis cluster servers : -127.0.0.1:7000 -127.0.0.1:7001 -127.0.0.1:7002 -127.0.0.1:7003 [target] type: redis cluster servers: -127.0.0.1:6000 -127.0.0.1:6001 -127.0.0.1:6002 -127.0.0.1:6003 [common] listen: 0.0.0.0:8888
root@localhost:~# redis-cli -p 8888 info # Server version:0.1.0 os:Linux 4.18.0-348.2.1.el8_5.x86_64 x86_64 multiplexing_api:epoll gcc_version:8.5.0 process_id:2893067 tcp_port:8888 uptime_in_seconds:215 uptime_in_days:0 config_file:/root/work/github/redis-migrate-tool-master/./rmt.conf # Clients connected_clients:1 max_clients_limit:100 total_connections_received:1 # Memory mem_allocator:jemalloc-4.0.4 # Group source_nodes_count:4 target_nodes_count:4 # Stats all_rdb_received:1 all_rdb_parsed:1 all_aof_loaded:0 rdb_received_count:4 rdb_parsed_count:4 aof_loaded_count:0 total_msgs_recv:301 total_msgs_sent:301 total_net_input_bytes:11977 total_net_output_bytes:12125 total_net_input_bytes_human:11.70K total_net_output_bytes_human:11.84K total_mbufs_inqueue:0 total_msgs_outqueue:0
root@localhost:~/work/github/redis-migrate-tool-master# ./src/redis-migrate-tool -c ./rmt.conf [2021-12-15 20:40:23.612] rmt_core.c:525 Nodes count of source group : 4 [2021-12-15 20:40:23.612] rmt_core.c:526 Total threads count : 2 [2021-12-15 20:40:23.612] rmt_core.c:527 Read threads count assigned: 1 [2021-12-15 20:40:23.612] rmt_core.c:528 Write threads count assigned: 1 [2021-12-15 20:40:23.613] rmt_core.c:836 instances_by_host: [2021-12-15 20:40:23.613] rmt_core.c:840 127.0.0.1:7002@17002 [2021-12-15 20:40:23.613] rmt_core.c:840 127.0.0.1:7003@17003 [2021-12-15 20:40:23.613] rmt_core.c:840 127.0.0.1:7000@17000 [2021-12-15 20:40:23.613] rmt_core.c:840 127.0.0.1:7001@17001 [2021-12-15 20:40:23.613] rmt_core.c:842 [2021-12-15 20:40:23.613] rmt_core.c:2444 Total threads count in fact: 2 [2021-12-15 20:40:23.613] rmt_core.c:2445 Read threads count in fact: 1 [2021-12-15 20:40:23.613] rmt_core.c:2446 Write threads count in fact: 1 [2021-12-15 20:40:23.613] rmt_core.c:2455 read thread(0): [2021-12-15 20:40:23.613] rmt_core.c:2461 127.0.0.1:7002@17002 [2021-12-15 20:40:23.613] rmt_core.c:2461 127.0.0.1:7003@17003 [2021-12-15 20:40:23.613] rmt_core.c:2461 127.0.0.1:7000@17000 [2021-12-15 20:40:23.613] rmt_core.c:2461 127.0.0.1:7001@17001 [2021-12-15 20:40:23.613] rmt_core.c:2488 write thread(0): [2021-12-15 20:40:23.613] rmt_core.c:2494 127.0.0.1:7002@17002 [2021-12-15 20:40:23.613] rmt_core.c:2494 127.0.0.1:7003@17003 [2021-12-15 20:40:23.613] rmt_core.c:2494 127.0.0.1:7000@17000 [2021-12-15 20:40:23.613] rmt_core.c:2494 127.0.0.1:7001@17001 [2021-12-15 20:40:23.613] rmt_core.c:2551 migrate job is running... [2021-12-15 20:40:23.613] rmt_redis.c:1707 Start connecting to MASTER[127.0.0.1:7002@17002]. [2021-12-15 20:40:23.613] rmt_redis.c:1741 Master[127.0.0.1:7002@17002] replied to PING, replication can continue... [2021-12-15 20:40:23.614] rmt_redis.c:1052 Partial resynchronization for MASTER[127.0.0.1:7002@17002] not possible (no cached master). [2021-12-15 20:40:23.615] rmt_redis.c:1111 Full resync from MASTER[127.0.0.1:7002@17002]: fb0199c71a0fa03fabf74f850144336bc0a63dce:1395 [2021-12-15 20:40:23.663] rmt_redis.c:1518 MASTER <-> SLAVE sync: receiving 618 bytes from master[127.0.0.1:7002@17002] [2021-12-15 20:40:23.663] rmt_redis.c:1624 MASTER <-> SLAVE sync: RDB data for node[127.0.0.1:7002@17002] is received, used: 0 s [2021-12-15 20:40:23.663] rmt_redis.c:1644 rdb file node127.0.0.1:[email protected] write complete [2021-12-15 20:40:23.663] rmt_redis.c:6637 Rdb file for node[127.0.0.1:7002@17002] parsed finished, use: 0 s. [2021-12-15 20:40:23.664] rmt_redis.c:1707 Start connecting to MASTER[127.0.0.1:7003@17003]. [2021-12-15 20:40:23.664] rmt_redis.c:1741 Master[127.0.0.1:7003@17003] replied to PING, replication can continue... [2021-12-15 20:40:23.664] rmt_redis.c:1052 Partial resynchronization for MASTER[127.0.0.1:7003@17003] not possible (no cached master). [2021-12-15 20:40:23.665] rmt_redis.c:1111 Full resync from MASTER[127.0.0.1:7003@17003]: a4e79a39ce3b78730761b79e51aa59f459603ed9:1399 [2021-12-15 20:40:23.732] rmt_redis.c:1518 MASTER <-> SLAVE sync: receiving 622 bytes from master[127.0.0.1:7003@17003] [2021-12-15 20:40:23.732] rmt_redis.c:1624 MASTER <-> SLAVE sync: RDB data for node[127.0.0.1:7003@17003] is received, used: 0 s [2021-12-15 20:40:23.732] rmt_redis.c:1644 rdb file node127.0.0.1:[email protected] write complete [2021-12-15 20:40:23.732] rmt_redis.c:6637 Rdb file for node[127.0.0.1:7003@17003] parsed finished, use: 0 s. [2021-12-15 20:40:23.733] rmt_redis.c:1707 Start connecting to MASTER[127.0.0.1:7000@17000]. [2021-12-15 20:40:23.733] rmt_redis.c:1741 Master[127.0.0.1:7000@17000] replied to PING, replication can continue... [2021-12-15 20:40:23.733] rmt_redis.c:1052 Partial resynchronization for MASTER[127.0.0.1:7000@17000] not possible (no cached master). [2021-12-15 20:40:23.734] rmt_redis.c:1111 Full resync from MASTER[127.0.0.1:7000@17000]: 91bddaf546f16da73140408384ddde094767f0e0:1319 [2021-12-15 20:40:23.762] rmt_redis.c:1518 MASTER <-> SLAVE sync: receiving 586 bytes from master[127.0.0.1:7000@17000] [2021-12-15 20:40:23.762] rmt_redis.c:1624 MASTER <-> SLAVE sync: RDB data for node[127.0.0.1:7000@17000] is received, used: 0 s [2021-12-15 20:40:23.762] rmt_redis.c:1644 rdb file node127.0.0.1:[email protected] write complete [2021-12-15 20:40:23.763] rmt_redis.c:6637 Rdb file for node[127.0.0.1:7000@17000] parsed finished, use: 0 s. [2021-12-15 20:40:23.764] rmt_redis.c:1707 Start connecting to MASTER[127.0.0.1:7001@17001]. [2021-12-15 20:40:23.764] rmt_redis.c:1741 Master[127.0.0.1:7001@17001] replied to PING, replication can continue... [2021-12-15 20:40:23.765] rmt_redis.c:1052 Partial resynchronization for MASTER[127.0.0.1:7001@17001] not possible (no cached master). [2021-12-15 20:40:23.766] rmt_redis.c:1111 Full resync from MASTER[127.0.0.1:7001@17001]: 562cf43004a52ff1803a83beccad3084eaf9de7d:1319 [2021-12-15 20:40:23.864] rmt_redis.c:1518 MASTER <-> SLAVE sync: receiving 586 bytes from master[127.0.0.1:7001@17001] [2021-12-15 20:40:23.864] rmt_redis.c:1624 MASTER <-> SLAVE sync: RDB data for node[127.0.0.1:7001@17001] is received, used: 0 s [2021-12-15 20:40:23.864] rmt_redis.c:1644 rdb file node127.0.0.1:[email protected] write complete [2021-12-15 20:40:23.864] rmt_redis.c:6637 Rdb file for node[127.0.0.1:7001@17001] parsed finished, use: 0 s. [2021-12-15 20:40:23.865] rmt_redis.c:6745 All nodes' rdb file parsed finished for this write thread(0).
root@localhost:/tmp/data# redis-cli -p 6000 dbsize (integer) 74 root@localhost:/tmp/data# redis-cli -p 7000 dbsize (integer) 74作为redis集群备份的方案:
一. 修改redis代码中, slave节点从master节点同步数据的地方, 当从master将文件传输到slave之后, 只做磁盘持久化, 而不加载到slave内存中.
二. 将此经过修改后的slave放到兜底备份的机器上
三. 利用redis-migrate-tool 建立要备份的redis集群, 与兜底备份机器上经过改造的redis的转发关系.
四. 兜底备份上即可持续不断的从redis集群同步数据, 一旦redis集群出现问题, 可使用兜底备份上的持久化数据做恢复.
待处理:- 兜底备份的数据文件大小存在超过内存大小的可能, 导致无法全部一次性加载出来, 可以利用分割rdb和aof工具做分割之后逐个加载.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)