2021-12-15 [redis] cluster集群数据导出及备份策略

2021-12-15 [redis] cluster集群数据导出及备份策略,第1张

2021-12-15 [redis] cluster集群数据导出及备份策略

目录

摘要:

第三方工具调研:

一. 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集群出现问题, 可使用兜底备份上的持久化数据做恢复.

待处理:
  1. 兜底备份的数据文件大小存在超过内存大小的可能, 导致无法全部一次性加载出来, 可以利用分割rdb和aof工具做分割之后逐个加载.

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5672136.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存