redis主从
redis既然有读有写,为了更好的分担压力,就需要配置主从来分压。 从服务器可以从主服务器上获取数据,从级联服务器可以根从服务器相关联。
当有从节点进来的时候,主服务器会执行bgsave命令,生成一份儿快照,发给从服务器上。从服务器为了与主服务器保持一致,会丢弃之前有的数据,载入主服务器上的快照,并开始接收主服务器没有写入快照当中的命令。用来保证主从数据一致
主节点:11.2.3.63
从节点:11.2.2.228
1)由于从节点需要连接到主节点,所以需要修改两个节点的bind,监听到所有地址上
bind 0.0.0.0
2)配置从节点
slaveof <masterip> <masterport>
:当前节点属于哪个主节点masterauth <master-password>
:主节点认证,requirepass
设置的
slaveof 11.2.3.63 6379
masterauth centos
slave-serve-stale-data yes 是否使用过期的数据响应给客户
slave-read-only yes 从服务器是否是只读的
repl-diskless-sync no
如果主从服务器有一段时间失去联系,那么数据肯定存在差异,这时从服务器需要做一次完全同步,有两种方式
Disk-backend:主节点创建新快照文件于磁盘中,而后将其发送给从节点
Diskless: 主节点新创建快照后直接通过网络套接字发送给从节点,
repl-diskless-sync-delay 5 当使用套接字发送的时候,延迟多久发送
repl-ping-slave-period 10 从节点多久发送一次ping给主节点
repl-timeout 60 主从复制超时时长
min-slaves-to-write 3 当从节点大于3的时候,才允许写操作
min-slaves-max-lag 10 从节点延迟时长超出此处指定的时长时,主节点会拒绝写入操作;
设置完成后,重启,在主服务器上使用INFO
可以看到slave0:ip=11.2.2.228,port=6379,state=online,offset=1,lag=1
,证明从节点已经连上。
测试主从的key是否一致
11.2.3.63:6379> LRANGE colors 0 3 主节点
1) "blue"
2) "yellow"
3) "red"
4) "green"
11.2.2.228:6379> LRANGE colors 0 3
1) "blue"
2) "yellow"
3) "red"
4) "green"
仅仅只有主从还不够,如果主节点挂掉,那么从是无法接替主节点继续为用户提供写操作。所以我们还需要对其实现高可用性。 redis提供了叫sentinel的工具。
sentinel工作机制:
- 至少有三个哨兵,三个哨兵的作用类似于少数服从多数。 1个哨兵认为主节点挂掉,并不能说明问题。两个以上都认为才是真正的挂掉
- 在从节点中选举出来新的master,并告知剩下的从节点现在谁是真正的master。剩下的从节点会从新的masters上面进行数据同步
sentinel监听在每个节点上
主节点:11.2.3.63 sentinel
从节点:11.2.2.228 sentinel
从节点:11.2.3.25 sentinel
1)首先需要修改两个从节点的优先级,主节点挂掉之后,优先级高的优先上位
slave-priority 80 此处只更改25节点
2)开始配置三个节点上的redis-sentinel.conf
bind 0.0.0.0 绑定地址
protected-mode no
port 26379 端口
sentinel announce-ip 1.2.3.4 对外发现的地址,如果不指定的话,sentinel会自动探测地址
sentinel monitor mymaster 11.2.3.63 6379 2 monitor表示监听,mymaster 自定义名称 master的ip地址 port 2表示至少有多少个sentinel检测到问题之后,才进行故障转移
sentinel auth-pass mymaster centos 主节点名称和redis中requirepass设置的密码
sentinel down-after-milliseconds mymaster 30000 监听到主节点故障多少毫秒才判定为故障
sentinel parallel-syncs mymaster 1 在故障转移时,允许sentinel配置的从节点有几个
sentinel failover-timeout mymaster 180000 在故障转移时,180000毫秒内必须完成转移操作,如果失败,
设置完成之后,优先启动主节点
主动down掉主节点,观察/var/log/redis/sentinel日志,会发现类似9286:X 03 Sep 23:05:41.107 # +switch-master mymaster 192.168.199.182 6379 192.168.199.155 6379
(此处由于换了网络,所以地址与上述不同)。
这样就完成了故障转移,并且155主机也变成了master角色。