Redis是通过slave of ip port来配置主从复制读写分离的,每次slave与master断开之后,都需要重新连接,从新执行上述配置命令,或者直接将配置写入配置文件
- case
1:一仆二主
如图所示,6380,6381都是slave,master是6379
1):一旦转成slave,master所有的数据都将被复制
2):slave写失败,只能读
3):master挂掉,slave依然保持自己slave的身份,连接状态down
4):master重新启动,slave则会自动连接,并进行主从复制
5):slave挂掉,重新启动,则只能slaveof ip port 连接
2:薪火相传
master:6379-slave:6380 master:6380-slave:6379
缺点:延时失真
3:反客为主
master挂掉,salveof no one,使得salve变为master,原master重新启动,则变成一个独立master,与slave不在相连
- 主从复制原理
salve启动成功,会向master发送一个sync的命令,master接收到命令之后,启动后台的存
盘进程,同时,收集所有的接收到的用于修改的数据集命令,在后台进程执行完毕之后,master
将传送整个数据文件到slave,以完后一次同步
全量复制:在slave服务接收到数据文件数据之后,将其存盘到内存中
增量复制:master继续将新的所有收集到的修改命令传给slave,完成同步,但是,只要是重新连接master,一次完全复制,将被自动执行
- 哨兵模式(反客为主的自动版)
能够在后台监控master-slave,如果slave挂掉,则投票从其余的salve选择一个合适的机器作为新的master
1:配置
在Redis的启动目录,新建sentinel.conf文件,内容如下:
sentinel monitor 主机 ip 端口 1(1代表投票)
2:启动哨兵
redis-sentinel sentinel.conf(上述新创建的文件)
3:一旦主机挂掉,sentinel检测投票选出一个新的主机
4:此时一旦,原先挂掉的主机重启,则在哨兵模式检测下,该重启的master会变成新的master的slave
**一种sentinel可以检测一组master,如果需要检测多个,配置文件里面配置上多个master的信息