我们关注主从复制之前,首先要考虑单机有什么问题?
这些都是单节点所遇到的问题,所以这个时候出现了主从复制(一主一从,一主多从)
使用主从复制可以:
注意:
两种实现方式
两台机器:主节点:47.11.11.11 从节点 47.22.22.22
在从节点执行 slaveof 命令
47.22.22.22-6379 > slacefof 47.11.11.11 6379
OK
取消复制:
47.22.22.22-6379 > slacefof no one
OK
slaveof ip port //从节点ip + 端口
slave-read-only yes //开启只做读的操作
127.0.0.1:6379> info replication
# Replication
role:master //主节点
connected_slaves:0
master_replid:1d43401335a5343b27b1638fc9843e3a593fc1a7
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
知识点 :
每个redis节点启动后都会动态分配一个40位的十六进制字符串为运行ID。运行ID的主要作用是来唯一识别redis节点,比如从节点保存主节点的运行ID识别自已正在复制是哪个主节点。如果只使用ip+port的方式识别主节点,那么主节点重启变更了整体数据集(如替换RDB/AOF文件),从节点再基于偏移量复制数据将是不安全的,因此当运行ID变化后从节点将做全量复制。可以在info server命令查看当前节点的运行ID。
需要注意的是redis关闭再启动,运行的id会随之变化
用于初次复制或其它无法进行部分复制的情况,将主节点中的所有数据都发送给从节点。当数据量过大的时候,会造成很大的网络开销。
redis2.8+ 全量复制流程
开销:
用于处理在主从复制中因网络闪退等原因造成数据丢失场景,当从节点再次连上主节点,如果条件允许,主节点会补发丢失数据给从节点,因为补发的数据远远小于全量数据,可以有效避免全量复制的过高开销。但需要注意,如果网络中断时间过长,造成主节点没有能够完整地保存中断期间执行的写命令,则无法进行部分复制,仍使用全量复制 。
流程:
读写分离
分流到从节点。主节点写数据,从节点读数据,可能遇到读问题
主从配置不一致
规避全量复制
规避复制风暴
本文系作者在时代Java发表,未经许可,不得转载。
如有侵权,请联系nowjava@qq.com删除。