主从
准备两台服务器部署redis 192.168.222.102(主) 192.168.222.103 (从)
分别安装redis
在192.168.222.103这台的redis.conf配置文件中添加 slaveof 192.168.222.102 6379
分别启动主从redis
主服务器
执行 info replication
插入数据set aaa bbb 成功
从服务器
执行 info replication
插入数据set aaa bbb 提示只能查看数据
主节点挂掉后
手动将S1子节点升级为Master(命令:slaveof no one 手动将Slaver节点升级为Master节点)
操作步骤如下:
a) Master节点:Shutdown关闭节点
b) Slaver1节点:slaveof no one将其升级为Master节点
c) Slaver2节点:使用slaveof 192.168.222.102 6379 重连Slaver1将其视为Master节点
d) 原来的Master节点:重新启动后,可以使用slaveof 192.168.222.102 6379 连接Slaver1将其视为Master节点,自己成为Slaver节点
哨兵
Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。
在Server1 掉线后:
升级Server2 为新的主服务器:
在主服务器的sentinel.conf中添加 sentinel monitor mymaster 192.168.222.102 6379 2
启动sentinel ./redis-sentinel ./sentinel.conf
手动关闭master (此时的master为192.168.222.102)
我们手动关闭Master 之后,sentinel 在监听master 确实是断线了之后,将会开始计算权值,然后重新分配主服务器
此时原来的从服务器(192.168.222.103)变为了主服务器(master)
重连Master
大家可能会好奇,如果master 重连之后,会不会抢回属于他的位置,答案是否定的,就比如你被一个小弟抢了你老大的位置,他肯给回你这个位置吗。因此当master 回来之后,他也只能当个小弟
Sentinel 总结
一、Sentinel的作用:
A、Master 状态监测
B、如果Master 异常,则会进行Master-slave 转换,将其中一个Slave作为Master,将之前的Master作为Slave
C、Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换
二、Sentinel的工作方式:
1):每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令
2):如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。
3):如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。
4):当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线
5):在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有Master,Slave发送 INFO 命令
6):当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次
7):若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的客观下线状态就会被移除。
若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。
参考文档:https://www.cnblogs.com/gossip/p/5992716.html
https://www.cnblogs.com/jaycekon/p/6237562.html