Redis高可用集群之Redis主从复制+哨兵机制实现故障转移

- 日理万妓 2023-02-13 05:47 111阅读 0赞

一、前言

上一篇文章我们已经完成了在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),如下图:
redis-master-slave

客户端可对主数据库进行读写操作,对从数据库进行读操作,主数据库写入的数据会实时自动同步给从数据库。

2. 具体工作机制

  1. slave启动后,向master发送SYNC命令,master接收到SYNC命令后通过bgsave保存快照(即上文所介绍的RDB持久化),并使用缓冲区记录保存快照这段时间内执行的写命令
  2. master将保存的快照文件发送给slave,并继续记录执行的写命令
  3. slave接收到快照文件后,加载快照文件,载入数据
  4. master快照发送完后开始向slave发送缓冲区的写命令,slave接收命令并执行,完成复制初始化
  5. 此后master每次执行一个写命令都会同步发送给slave,保持master与slave之间数据的一致性

四、主服务器配置

1. 配置主服务器密码redis.conf

  1. masterauth 123456

五、从服务器1配置

1. 配置从节点指向主节点redis.conf

  1. slaveof 192.168.15.129 6379
  2. masterauth 123456

六、从服务器2配置

将哨兵监控应用程序部署在从节点2中,起到对其他master、slave节点的监控。

1. 配置从节点指向主节点redis.conf

  1. slaveof 192.168.15.129 6379
  2. masterauth 123456

2 配置哨兵sentinel.conf

  • 拷贝到etc目录

    cp sentinel.conf /usr/local/redis/etc

  • 修改sentinel.conf配置文件

a. 哨兵监听的主节点mymaster;最后面的数字 1 表示最低通过票数;# 默认值 2
如果投票通过,则哨兵群体认为该主节点客观下线(odowm)

  1. sentinel monitor mymaster 192.168.15.129 6379 1 #哨兵监听的主节点mymaster;最后面的数字 1 表示最低通过票数;# 默认值 2
  2. 如果投票通过,则哨兵群体认为该主节点客观下线(odowm

b. 哨兵监听的主节点mymaster的连接密码

  1. sentinel auth-pass mymaster 123456 #哨兵监听的主节点mymaster的连接密码

3. 哨兵认定当前主节点mymaster失效的判别间隔时间

当master宕机的时候,哨兵每隔10秒判断一次master是否失效,默认是30秒

  1. sentinel down-after-milliseconds mymaster 10000

4.执行故障转移时,最多有多少个从节点同时对新的主节点进行同步

  1. sentinel parallel-syncs mymaster 2

5. 启动哨兵模式

  1. ./redis-server /usr/local/redis/etc/sentinel.conf --sentinel &

6. 关闭哨兵模式

a. 先查看redis进程

  1. ps -ef|grep redis

b. 杀掉redis进程(pid为进程的id)

  1. kill -9 pid

七、主Redis部署示例

1. redis.conf的主要配置

  1. ###网络相关###
  2. # bind 127.0.0.1 # 绑定监听的网卡IP,注释掉或配置成0.0.0.0可使任意IP均可访问
  3. protected-mode no # 关闭保护模式,使用密码访问
  4. port 6379 # 设置监听端口,建议生产环境均使用自定义端口
  5. timeout 30 # 客户端连接空闲多久后断开连接,单位秒,0表示禁用
  6. ###通用配置###
  7. daemonize yes # 在后台运行
  8. pidfile /var/run/redis_6379.pid # pid进程文件名
  9. logfile /usr/local/redis/logs/redis.log # 日志文件的位置
  10. ###RDB持久化配置###
  11. save 900 1 # 900s内至少一次写操作则执行bgsave进行RDB持久化
  12. save 300 10
  13. save 60 10000
  14. # 如果禁用RDB持久化,可在这里添加 save ""
  15. rdbcompression yes #是否对RDB文件进行压缩,建议设置为no,以(磁盘)空间换(CPU)时间
  16. dbfilename dump.rdb # RDB文件名称
  17. dir /usr/local/redis/datas # RDB文件保存路径,AOF文件也保存在这里
  18. ###AOF配置###
  19. appendonly yes # 默认值是no,表示不使用AOF增量持久化的方式,使用RDB全量持久化的方式
  20. appendfsync everysec # 可选值 always, everysec,no,建议设置为everysec
  21. ###设置密码,当master宕机后重新恢复上线后,需要通过此密码同步,如果都没有设置密码则此选项不用配###
  22. requirepass 123456 # 设置复杂一点的密码

2. sentinel.conf的主要配置

  1. # 关闭保护模式
  2. protected-mode no
  3. #sentinel哨兵端口号
  4. port 26379
  5. #临时目录
  6. dir /tmp
  7. # 哨兵监听的主节点mymaster;最后面的数字 1 表示最低通过票数;# 默认值 2,如果投票通过,则哨兵群体认为该主节点客观下线(odowm)
  8. sentinel monitor mymaster 192.168.15.129 6379 1
  9. # 哨兵监听的主节点mymaster的连接密码
  10. sentinel auth-pass mymaster 123456
  11. # 哨兵认定当前主节点mymaster失效的判别间隔时间,5s未回复PING,则认为master主观下线,默认为30s
  12. sentinel down-after-milliseconds mymaster 5000
  13. # 执行故障转移时,最多有1个从节点同时对新的主节点进行同步
  14. sentinel parallel-syncs mymaster 1
  15. # 故障转移超时时间。
  16. # 当故障转移开始后,但是在此时间内仍然没有触发任何故障转移操作,则当前哨兵会认为此次故障转移失败
  17. sentinel failover-timeout mymaster 180000

八、从1Redis部署示例

1. redis.conf的主要配置

  1. ###网络相关###
  2. # bind 127.0.0.1 # 绑定监听的网卡IP,注释掉或配置成0.0.0.0可使任意IP均可访问
  3. protected-mode no # 关闭保护模式,使用密码访问
  4. port 6379 # 设置监听端口,建议生产环境均使用自定义端口
  5. timeout 30 # 客户端连接空闲多久后断开连接,单位秒,0表示禁用
  6. ###通用配置###
  7. daemonize yes # 在后台运行
  8. pidfile /var/run/redis_6379.pid # pid进程文件名
  9. logfile /usr/local/redis/logs/redis.log # 日志文件的位置
  10. ###RDB持久化配置###
  11. save 900 1 # 900s内至少一次写操作则执行bgsave进行RDB持久化
  12. save 300 10
  13. save 60 10000
  14. # 如果禁用RDB持久化,可在这里添加 save ""
  15. rdbcompression yes #是否对RDB文件进行压缩,建议设置为no,以(磁盘)空间换(CPU)时间
  16. dbfilename dump.rdb # RDB文件名称
  17. dir /usr/local/redis/datas # RDB文件保存路径,AOF文件也保存在这里
  18. ###AOF配置###
  19. appendonly yes # 默认值是no,表示不使用AOF增量持久化的方式,使用RDB全量持久化的方式
  20. appendfsync everysec # 可选值 always, everysec,no,建议设置为everysec
  21. #从服务器需要配置指向主服务器的节点,在主从复制进行数据同步时使用
  22. slaveof 192.168.15.129 6379
  23. ###设置密码###
  24. requirepass 123456 # 设置复杂一点的密码

2. sentinel.conf的主要配置

  1. # 关闭保护模式
  2. protected-mode no
  3. #sentinel哨兵端口号
  4. port 26379
  5. #临时目录
  6. dir /tmp
  7. # 哨兵监听的主节点mymaster;最后面的数字 1 表示最低通过票数;# 默认值 2,如果投票通过,则哨兵群体认为该主节点客观下线(odowm)
  8. sentinel monitor mymaster 192.168.15.129 6379 1
  9. # 哨兵监听的主节点mymaster的连接密码
  10. sentinel auth-pass mymaster 123456
  11. # 哨兵认定当前主节点mymaster失效的判别间隔时间,5s未回复PING,则认为master主观下线,默认为30s
  12. sentinel down-after-milliseconds mymaster 5000
  13. # 执行故障转移时,最多有1个从节点同时对新的主节点进行同步
  14. sentinel parallel-syncs mymaster 1
  15. # 故障转移超时时间。
  16. # 当故障转移开始后,但是在此时间内仍然没有触发任何故障转移操作,则当前哨兵会认为此次故障转移失败
  17. sentinel failover-timeout mymaster 180000

九、从2Redis部署示例

1. redis.conf的主要配置

  1. ###网络相关###
  2. # bind 127.0.0.1 # 绑定监听的网卡IP,注释掉或配置成0.0.0.0可使任意IP均可访问
  3. protected-mode no # 关闭保护模式,使用密码访问
  4. port 6379 # 设置监听端口,建议生产环境均使用自定义端口
  5. timeout 30 # 客户端连接空闲多久后断开连接,单位秒,0表示禁用
  6. ###通用配置###
  7. daemonize yes # 在后台运行
  8. pidfile /var/run/redis_6379.pid # pid进程文件名
  9. logfile /usr/local/redis/logs/redis.log # 日志文件的位置
  10. ###RDB持久化配置###
  11. save 900 1 # 900s内至少一次写操作则执行bgsave进行RDB持久化
  12. save 300 10
  13. save 60 10000
  14. # 如果禁用RDB持久化,可在这里添加 save ""
  15. rdbcompression yes #是否对RDB文件进行压缩,建议设置为no,以(磁盘)空间换(CPU)时间
  16. dbfilename dump.rdb # RDB文件名称
  17. dir /usr/local/redis/datas # RDB文件保存路径,AOF文件也保存在这里
  18. ###AOF配置###
  19. appendonly yes # 默认值是no,表示不使用AOF增量持久化的方式,使用RDB全量持久化的方式
  20. appendfsync everysec # 可选值 always, everysec,no,建议设置为everysec
  21. #从服务器需要配置指向主服务器的节点,在主从复制进行数据同步时使用
  22. slaveof 192.168.15.129 6379
  23. ###设置密码###
  24. requirepass 123456 # 设置复杂一点的密码

2. sentinel.conf的主要配置

  1. # 关闭保护模式
  2. protected-mode no
  3. #sentinel哨兵端口号
  4. port 26379
  5. #临时目录
  6. dir /tmp
  7. # 哨兵监听的主节点mymaster;最后面的数字 1 表示最低通过票数;# 默认值 2,如果投票通过,则哨兵群体认为该主节点客观下线(odowm)
  8. sentinel monitor mymaster 192.168.15.129 6379 1
  9. # 哨兵监听的主节点mymaster的连接密码
  10. sentinel auth-pass mymaster 123456
  11. # 哨兵认定当前主节点mymaster失效的判别间隔时间,5s未回复PING,则认为master主观下线,默认为30s
  12. sentinel down-after-milliseconds mymaster 5000
  13. # 执行故障转移时,最多有1个从节点同时对新的主节点进行同步
  14. sentinel parallel-syncs mymaster 1
  15. # 故障转移超时时间。
  16. # 当故障转移开始后,但是在此时间内仍然没有触发任何故障转移操作,则当前哨兵会认为此次故障转移失败
  17. 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

发表评论

表情:
评论列表 (有 0 条评论,111人围观)

还没有评论,来说两句吧...

相关阅读