Redis高可用集群之Redis主从复制+哨兵机制实现故障转移
一、前言
上一篇文章我们已经完成了在Linux环境上安装Redis:【https://blog.csdn.net/Thinkingcao/article/details/106366622】,这些工作都是事先安装好Vmware WorkStation虚拟机软件,然后在虚拟机环境上完成的Redis数据库安装工作。本篇文章主要实现高可用的集群环境搭建。Redis实现集群方案有3种,本篇主要通过Redis主从复制+哨兵机制监控实现Redis生产环境的集群方案。
Redis支持三种集群方案
- 主从复制模式
- Sentinel(哨兵)模式
- Cluster模式
二、准备工作
假设现在有3台服务器,都是基于Vmware WorkStation虚拟机虚拟出来的哈,一主两从,因为一主两从的3个节点都是在不同的服务器上,所以端口都是使用的默认的6379,这个没关系;然后这3台虚拟机的IP分别是与电脑主机共享的网路,所以虚拟机的IP地址只有这一个,这是什么意思呢,就是说我们现在是在Vmware虚拟机上操作Redis集群搭建,只有一个外网IP地址; 如果你是在公司的内网机器环境上操作,一般项目上生产都是将服务部署在内网区域内,那么肯定就有一个内网IP地址和一个外网IP地址,我的意思就是,如果是用公司内网的机器搭建集群,这时候最好使用内网的IP地址进行Redis的高可用集群环境搭建,因为企业为了安全都是将服务部署在内网区域内的,而且内网IP间可以互相通讯,只不过外层通过Nginx转发而已,这里稍微啰嗦了一点,希望小伙伴们注意下。好了,那么3台虚拟出来的机器相关信息分别如下:
作用 | ip | 端口 |
---|---|---|
主(master) | 192.168.15.29 | 6379 |
从(slave) | 192.168.15.32 | 6379 |
从 (slave) | 192.168.15.33 | 6379 |
三、主从复制模式
1. 基本原理
主从复制模式中包含一个主数据库实例(master)与一个或多个从数据库实例(slave),如下图:
客户端可对主数据库进行读写操作,对从数据库进行读操作,主数据库写入的数据会实时自动同步给从数据库。
2. 具体工作机制
- slave启动后,向master发送SYNC命令,master接收到SYNC命令后通过bgsave保存快照(即上文所介绍的RDB持久化),并使用缓冲区记录保存快照这段时间内执行的写命令
- master将保存的快照文件发送给slave,并继续记录执行的写命令
- slave接收到快照文件后,加载快照文件,载入数据
- master快照发送完后开始向slave发送缓冲区的写命令,slave接收命令并执行,完成复制初始化
- 此后master每次执行一个写命令都会同步发送给slave,保持master与slave之间数据的一致性
四、主服务器配置
1. 配置主服务器密码redis.conf
masterauth 123456
五、从服务器1配置
1. 配置从节点指向主节点redis.conf
slaveof 192.168.15.129 6379
masterauth 123456
六、从服务器2配置
将哨兵监控应用程序部署在从节点2中,起到对其他master、slave节点的监控。
1. 配置从节点指向主节点redis.conf
slaveof 192.168.15.129 6379
masterauth 123456
2 配置哨兵sentinel.conf
拷贝到etc目录
cp sentinel.conf /usr/local/redis/etc
修改sentinel.conf配置文件
a. 哨兵监听的主节点mymaster;最后面的数字 1 表示最低通过票数;# 默认值 2
如果投票通过,则哨兵群体认为该主节点客观下线(odowm)
sentinel monitor mymaster 192.168.15.129 6379 1 #哨兵监听的主节点mymaster;最后面的数字 1 表示最低通过票数;# 默认值 2
如果投票通过,则哨兵群体认为该主节点客观下线(odowm)
b. 哨兵监听的主节点mymaster的连接密码
sentinel auth-pass mymaster 123456 #哨兵监听的主节点mymaster的连接密码
3. 哨兵认定当前主节点mymaster失效的判别间隔时间
当master宕机的时候,哨兵每隔10秒判断一次master是否失效,默认是30秒
sentinel down-after-milliseconds mymaster 10000
4.执行故障转移时,最多有多少个从节点同时对新的主节点进行同步
sentinel parallel-syncs mymaster 2
5. 启动哨兵模式
./redis-server /usr/local/redis/etc/sentinel.conf --sentinel &
6. 关闭哨兵模式
a. 先查看redis进程
ps -ef|grep redis
b. 杀掉redis进程(pid为进程的id)
kill -9 pid
七、主Redis部署示例
1. redis.conf的主要配置
###网络相关###
# bind 127.0.0.1 # 绑定监听的网卡IP,注释掉或配置成0.0.0.0可使任意IP均可访问
protected-mode no # 关闭保护模式,使用密码访问
port 6379 # 设置监听端口,建议生产环境均使用自定义端口
timeout 30 # 客户端连接空闲多久后断开连接,单位秒,0表示禁用
###通用配置###
daemonize yes # 在后台运行
pidfile /var/run/redis_6379.pid # pid进程文件名
logfile /usr/local/redis/logs/redis.log # 日志文件的位置
###RDB持久化配置###
save 900 1 # 900s内至少一次写操作则执行bgsave进行RDB持久化
save 300 10
save 60 10000
# 如果禁用RDB持久化,可在这里添加 save ""
rdbcompression yes #是否对RDB文件进行压缩,建议设置为no,以(磁盘)空间换(CPU)时间
dbfilename dump.rdb # RDB文件名称
dir /usr/local/redis/datas # RDB文件保存路径,AOF文件也保存在这里
###AOF配置###
appendonly yes # 默认值是no,表示不使用AOF增量持久化的方式,使用RDB全量持久化的方式
appendfsync everysec # 可选值 always, everysec,no,建议设置为everysec
###设置密码,当master宕机后重新恢复上线后,需要通过此密码同步,如果都没有设置密码则此选项不用配###
requirepass 123456 # 设置复杂一点的密码
2. sentinel.conf的主要配置
# 关闭保护模式
protected-mode no
#sentinel哨兵端口号
port 26379
#临时目录
dir /tmp
# 哨兵监听的主节点mymaster;最后面的数字 1 表示最低通过票数;# 默认值 2,如果投票通过,则哨兵群体认为该主节点客观下线(odowm)
sentinel monitor mymaster 192.168.15.129 6379 1
# 哨兵监听的主节点mymaster的连接密码
sentinel auth-pass mymaster 123456
# 哨兵认定当前主节点mymaster失效的判别间隔时间,5s未回复PING,则认为master主观下线,默认为30s
sentinel down-after-milliseconds mymaster 5000
# 执行故障转移时,最多有1个从节点同时对新的主节点进行同步
sentinel parallel-syncs mymaster 1
# 故障转移超时时间。
# 当故障转移开始后,但是在此时间内仍然没有触发任何故障转移操作,则当前哨兵会认为此次故障转移失败
sentinel failover-timeout mymaster 180000
八、从1Redis部署示例
1. redis.conf的主要配置
###网络相关###
# bind 127.0.0.1 # 绑定监听的网卡IP,注释掉或配置成0.0.0.0可使任意IP均可访问
protected-mode no # 关闭保护模式,使用密码访问
port 6379 # 设置监听端口,建议生产环境均使用自定义端口
timeout 30 # 客户端连接空闲多久后断开连接,单位秒,0表示禁用
###通用配置###
daemonize yes # 在后台运行
pidfile /var/run/redis_6379.pid # pid进程文件名
logfile /usr/local/redis/logs/redis.log # 日志文件的位置
###RDB持久化配置###
save 900 1 # 900s内至少一次写操作则执行bgsave进行RDB持久化
save 300 10
save 60 10000
# 如果禁用RDB持久化,可在这里添加 save ""
rdbcompression yes #是否对RDB文件进行压缩,建议设置为no,以(磁盘)空间换(CPU)时间
dbfilename dump.rdb # RDB文件名称
dir /usr/local/redis/datas # RDB文件保存路径,AOF文件也保存在这里
###AOF配置###
appendonly yes # 默认值是no,表示不使用AOF增量持久化的方式,使用RDB全量持久化的方式
appendfsync everysec # 可选值 always, everysec,no,建议设置为everysec
#从服务器需要配置指向主服务器的节点,在主从复制进行数据同步时使用
slaveof 192.168.15.129 6379
###设置密码###
requirepass 123456 # 设置复杂一点的密码
2. sentinel.conf的主要配置
# 关闭保护模式
protected-mode no
#sentinel哨兵端口号
port 26379
#临时目录
dir /tmp
# 哨兵监听的主节点mymaster;最后面的数字 1 表示最低通过票数;# 默认值 2,如果投票通过,则哨兵群体认为该主节点客观下线(odowm)
sentinel monitor mymaster 192.168.15.129 6379 1
# 哨兵监听的主节点mymaster的连接密码
sentinel auth-pass mymaster 123456
# 哨兵认定当前主节点mymaster失效的判别间隔时间,5s未回复PING,则认为master主观下线,默认为30s
sentinel down-after-milliseconds mymaster 5000
# 执行故障转移时,最多有1个从节点同时对新的主节点进行同步
sentinel parallel-syncs mymaster 1
# 故障转移超时时间。
# 当故障转移开始后,但是在此时间内仍然没有触发任何故障转移操作,则当前哨兵会认为此次故障转移失败
sentinel failover-timeout mymaster 180000
九、从2Redis部署示例
1. redis.conf的主要配置
###网络相关###
# bind 127.0.0.1 # 绑定监听的网卡IP,注释掉或配置成0.0.0.0可使任意IP均可访问
protected-mode no # 关闭保护模式,使用密码访问
port 6379 # 设置监听端口,建议生产环境均使用自定义端口
timeout 30 # 客户端连接空闲多久后断开连接,单位秒,0表示禁用
###通用配置###
daemonize yes # 在后台运行
pidfile /var/run/redis_6379.pid # pid进程文件名
logfile /usr/local/redis/logs/redis.log # 日志文件的位置
###RDB持久化配置###
save 900 1 # 900s内至少一次写操作则执行bgsave进行RDB持久化
save 300 10
save 60 10000
# 如果禁用RDB持久化,可在这里添加 save ""
rdbcompression yes #是否对RDB文件进行压缩,建议设置为no,以(磁盘)空间换(CPU)时间
dbfilename dump.rdb # RDB文件名称
dir /usr/local/redis/datas # RDB文件保存路径,AOF文件也保存在这里
###AOF配置###
appendonly yes # 默认值是no,表示不使用AOF增量持久化的方式,使用RDB全量持久化的方式
appendfsync everysec # 可选值 always, everysec,no,建议设置为everysec
#从服务器需要配置指向主服务器的节点,在主从复制进行数据同步时使用
slaveof 192.168.15.129 6379
###设置密码###
requirepass 123456 # 设置复杂一点的密码
2. sentinel.conf的主要配置
# 关闭保护模式
protected-mode no
#sentinel哨兵端口号
port 26379
#临时目录
dir /tmp
# 哨兵监听的主节点mymaster;最后面的数字 1 表示最低通过票数;# 默认值 2,如果投票通过,则哨兵群体认为该主节点客观下线(odowm)
sentinel monitor mymaster 192.168.15.129 6379 1
# 哨兵监听的主节点mymaster的连接密码
sentinel auth-pass mymaster 123456
# 哨兵认定当前主节点mymaster失效的判别间隔时间,5s未回复PING,则认为master主观下线,默认为30s
sentinel down-after-milliseconds mymaster 5000
# 执行故障转移时,最多有1个从节点同时对新的主节点进行同步
sentinel parallel-syncs mymaster 1
# 故障转移超时时间。
# 当故障转移开始后,但是在此时间内仍然没有触发任何故障转移操作,则当前哨兵会认为此次故障转移失败
sentinel failover-timeout mymaster 180000
十、参考文档
https://blog.csdn.net/itanping/article/details/100544152
https://juejin.im/post/5d0c90b2e51d455070226fb4\#heading-4
https://blog.csdn.net/yhflyl/article/details/103491554
https://www.cnblogs.com/eoooxy/p/6945080.html
https://www.cnblogs.com/eoooxy/p/6945080.html
http://blog.jboost.cn/redis-cluster.html
还没有评论,来说两句吧...