环境搭建
环境:centos7.5
redis version:3.2.12
master:172.28.128.4
node01:172.28.128.5
redis主从复制
- 特点:一个master可由多个slave组成;支持链式复制,master以非阻塞方式同步数据至slave
- 主从复制过程(原理):当从节点进行slave of masterIP masterPORT命令时,
- 保存主节点信息
- 主从建立socket连接
- 发送ping命令
- 权限认证
- 同步数据集
- 命令持续复制
- 注意:
- 从服务器配置文件的bind需将本地IP放置在127.0.0.1之前,或使用0.0.0.0
- 如果masster使用requirepass开启了认证功能,从服务器使用masterauth password来连入服务请求使用此密码进行认证
- 缺点:
- 主节点出现问题,则不能提供服务,需人工进行故障转移
- 主从节点的写能力单机,能力有限
- 单机节点的存储有限
主从实现
- 两台服务器分别yum install redis
- 修改配置文件/etc/redis.conf
bind 0.0.0.0
- 启动redis
redis-server /etc/redis.conf &
- 进入master节点的redis设置一个件
redis-cli -h 172.28.128.4
set redis haha
- 进入从节点
redis-cli -h 172.28.128.5
slaveof 172.28.128.4
keys *
-->“redis”
info replication
#Replication
role:slave
master_host:172.28.128.4
master_port:6379
哨兵的故障转移机制及实现
- 功能:用于管理多个redis服务实现高可用,解决部分redis主从复制的缺点
- 故障转移:
- 由sentinel节点定期监控主节点是否发生故障;sentinel向master发送心跳包PING来确认master是否存活,如果master在“一定时间内”未回复PONG或者回复错误消息,那么sentinel会主观认为这个master已经不可用。
- 当主节点出现故障,由多个sentinel节点进行投票并选举一个从节点作为master节点
- sentinel执行故障转移,将一个从节点升级为主节点,将剩余的从节点指向到新的主节并通知客户端主节点已更换
- 当原来的主节点重新上线时,会变成从节点,并指向到新的主节点。
故障转移实现
基于上面的一主一从,添加一个sentinel服务,模拟主节点下线后,sentinel进行的故障转移。
- 修改sentinel配置文件
vim /etc/redis-sentinel.conf
sentinel monitor mymaster 172.28.128.4 6379 1
# 指明监控的主节点
其他默认即可
2.启动redis-sentinel服务
redis-sentinel /etc/redis-sentinel.conf &
3.进入sentinel服务中查看目前的master
redis-cli -p 26379
sentinel masters
>1) 1) "name"
2) "mymaster"
3) "ip"
4) "172.28.128.4"
5) "port"
6) "6379"
- 认为结束master节点上的redis进程
- 再次查看sentinel中的master
sentinel masters
>1) 1) "name"
2) "mymaster"
3) "ip"
4) "172.28.128.5"
5) "port"
6) "6379"
- 也可手动强制故障转移
sentinel failover <mastername>