一.reids集群(主从复制)
1.配置步骤:
1). 修改从节点(slave)的redis.conf文件的slaveof属性(redis5.0以上版本: replicaof);
slaveof 主节点ip 主节点端口号 / replicaof 主节点ip 主节点端口号
2). 如果主节点有密码,则需要更改masterauth属性;
masterauth 主节点密码
3). 修改主节点(master)redis.conf文件的bind属性;bind属性表示:允许那个ip访问此节点;
bind 从节点ip(多个用空格隔开)/0.0.0.0(任意ip都可以访问)
4). 在启动rdis client连接redis server后,可以使用info replication命令,查看当前redis client连接的redis server的节点信息.
2.数据同步
1). 全量复制: 主节点生成快照,保存到磁盘,之后发送给从节点;新增节点时或初始化,采用全量复制;
2). 增量复制: 主节点发送相同命令给从节点,从节点执行;例: 主节点执行set A 123 命令,主节点会把这个命令发送给从节点,从节点接收后执行此命令;
3). 无磁盘复制: 主节点在内存中生成快照,不保存到磁盘,之后发送给从节点; 通过redis.conf文件总的repl-diskless-sync属性来配置; repl-diskless-sync : yes
全量复制示意图:
1). slave节点发送psync命令给master节点,命令的第一个参数:runId,第二个参数:偏移量,由于第一次复制,slave节点不知道master的runId,也不知道自己的偏移量,这时会传 ? 和 -1,通知master节点是第一次同步;
2). master接收到psync ? -1 时,就知道slave节点要全量复制,就会将自己的runId和offset告知slave节点;
3). slave节点将masterInfo保存;
4). master节点执行bgsave操作,生成一个RDB文件;
5). 将RDB发送给slave节点;
6). 将复制缓冲区记录的操作数据发送给slave节点;(主节点执行bgsave之后的数据,放在数据缓冲区中)
7). salve节点清空自己的所有老数据;
8). slave节点加载RDB文件和复制缓冲区的数据, 完成同步;
3.其他
- min-slaves-to-write(/min-replicas-to-write)属性: redis.conf文件中, 通过min-slaves-to-write(/min-replicas-to-write)属性, 来保证master节点在同步 几 个从节点之后,才可以接收下一次请求.例: min-slaves-to-write: 3;
- min-slaves-max-lag(/min-replicas-max-lag)属性: 允许从节点最大丢失时间.超过这个时间就认为从节点断开;例: min-slaves-max-lag: 10 (单位s)
- 思考: 如何保证从节点断开后,下次启动从节点时,同步master节点数据,是从slave节点上次断开处, 同步数据? —从节点中有个叫backlog日志文件, 其中有个offset属性, 改属性记录的是从主节点同步数据的断点位置,这样就可以保证数据一致.
- 从节点监听主节点同步数据命令: -->> replconf listening-port 6379 -->> sync;
- 主节点会不断发送 PING 命令,不断监测从节点,类似心跳包;
二.哨兵集群
1.概述:
redis