redis的集群:
高可用方案:
主从复制:主从复制是redis实现高可用的基础,哨兵模式和集群都是在主从复制的基础之上实现高可用。
主从复制实现数据的多机备份,以及读写分离(主服务器负责写,从服务器只能读)
缺陷:故障无法自动恢复,需要人工干预,无法实现写操作的负载均衡
主从复制的工作原理:
主节点(master)从节点(slave)组成,数据复制是单向的,只能从主节点到从节点
主从复制节点最少要有三台
主从复制推荐使用AOF,通过AOF文件实现实时持久化,主从节点都开启AOF持久化服务从节点同步的就是AOF文件
主从复制流程图:
主 192.168.120.110
从1 192.168.120.70
从2 192.168.120.10
修改master节点的配置文件
vim /etc/redis/6379.conf
?bind 0.0.0.0 ?????????????????????#70行,修改监听地址为0.0.0.0(生产环境中,尤其是多网卡最好填写物理网卡的IP)
?daemonize yes ????????????????????#137行,开启守护进程,后台启动
?logfile /var/log/redis_6379.log ??#172行,指定日志文件存放目录
?dir /var/lib/redis/6379 ??????????#264行,指定工作目录
?appendonly yes ???????????????????#700行,开启AOF持久化功能
/etc/init.d/redis_6379 restart ????#重启redis服务
修改slave1节点的配置文件
#修改slave1的配置文件
vim /etc/redis/6379.conf
?bind 0.0.0.0 ???????????????????????#70行,修改监听地址为0.0.0.0(生产环境中需要填写物理网卡的IP)
?daemonize yes ??????????????????????#137行,开启守护进程,后台启动
?logfile /var/log/redis_6379.log ????#172行,指定日志文件目录
?dir /var/lib/redis/6379 ????????????#264行,指定工作目录
?replicaof 192.168.120.110?6379 ??????#288行,指定要同步的Master节点的IP和端口
?appendonly yes ?????????????????????#700行,修改为yes,开启AOF持久化功能?
/etc/init.d/redis_6379 restart ?#重启redis
netstat -natp | grep redis ?????#查看主从服务器是否已建立连接
Slave2节点跟slave1节点操作相同
测试
Master写入数据
Slave1和slave2 只能读无法写
哨兵模式的原理:
哨兵:是一个分布式系统,用于在主从结构之间,对每台redis的的服务进行监控
哨兵模式的投票机制
主节点出现故障时,从节点通过投票的方式选择一个新的master
哨兵模式的结构:
哨兵节点:监控,不存储数据
数据节点:主节点和从节点,都是数据节点
哨兵模式的投票机制:
每个哨兵节点每隔一秒,通过ping命令方式,检测主从之间的心跳线。主节点在一定时间内没有回复或者回复了错误的消息,这个时候,哨兵就会主观的认为主节点下线了,超过半数的哨兵节点认为主节点下线了,这个时候才会认为主节点是客观下线
主节点选举过程:
哨兵节点通过raft算法(选举算法),每个节点共同投票选举出一个新的master,然后新的master实现主节点转移和故障恢复通知
主节点:
cd redis-5.0.7
vim sentinel.conf
#哨兵模式的配置文件
17行
protected-mode no
#解除注释
daemonize yes
#开启后台运行逃兵模式
36行
logfile "/var/log/sentinel.log"
#指定日志文件的存放位置
65行
dir"/var/lib/redis/6379"
#指定数据库存放的位置
85行
sentinel monitor mymaster 192.168.120.110?6379 2
#声明主节点的IP和端口号.2代表至少要有2台服务认为主已经下线才会进行主从切换。一般配置为主从服务器的一半
113行
sentinel down-after-milliseconds mymaster 30000
#服务器宕机的最小时间。单位是毫秒。30秒之内如果主节点但没有响应,主观认为主下线了。时间可以改可以自定义
146行
sentinel failover-timeout mymaster 180000
#服务器宕机的最大时间,180秒之内如果主节点但没有响应,从节点开始投票,客观认为主下线了。时间可以改可以自定义
两台从节点配置和主节点配置一致即可
三台配置完成后需要先起主节点再起从节点
三台主机在redis的源码包中启动哨兵模式
redis-sentinel sentinel.conf &
#启动哨兵模式。&表示后台运行
主节点:
redis-cli -p 26379 info Sentinel
#查看整个集群的哨兵情况
查看主从信息:
tail -f /var/log/redis_6379.log
#查看主节点日志,查看主从信息
模拟故障切换:
可能会有延迟不是立刻切换
ps-elf | grep redis
#查看主节点
kill -9 redis的主进程或者/etc/init.d/redis_6379 stop停止redis都可以测试
测试新主是否可以正常插入数据
测试两从是否可以数据同步
测试旧主机是否还有插入数据
旧主失去写的功能,新主增加写的功能。从2的配置文件指向了新的主
而旧主的配置文件中指向自己的配置将会消失
流程图: