本文档风哥主要介绍Redis哨兵高可用部署实战,包括哨兵概念、哨兵架构、哨兵功能、哨兵规划、硬件要求、网络要求、哨兵部署、哨兵配置、哨兵操作、哨兵监控以及实战案例等内容,风哥教程参考Redis官方文档Sentinel等内容编写,适合DBA人员和开发人员在生产环境中使用。
Part01-基础概念与理论知识
1.1 哨兵概念
Redis Sentinel是Redis的高可用性解决方案,它可以监控Redis主从集群的健康状态,并在主节点故障时自动进行故障转移。哨兵的核心概念:
- 哨兵节点:监控Redis主从集群的健康状态的特殊Redis实例
- 主节点:负责处理写操作的Redis实例
- 从节点:负责处理读操作并从主节点同步数据的Redis实例
- 故障转移:当主节点故障时,从从节点中选举一个新的主节点的过程
1.2 哨兵架构
Redis Sentinel的架构:
- 多个哨兵节点:通常部署3个或以上的哨兵节点,以提高可靠性
- 主从集群:一个主节点和多个从节点
- 哨兵之间的通信:哨兵节点之间通过Gossip协议通信,交换集群状态信息
- 客户端连接:客户端通过哨兵获取主节点的地址
1.3 哨兵功能
Redis Sentinel的主要功能:
- 监控:监控Redis主从集群的健康状态
- 通知:当集群状态发生变化时,通知相关人员
- 自动故障转移:当主节点故障时,自动从从节点中选举一个新的主节点
- 配置管理:当故障转移发生时,自动更新集群的配置
更多视频教程www.fgedu.net.cn
Part02-生产环境规划与建议
2.1 哨兵规划
生产环境哨兵规划:
- 哨兵数量:建议部署3个或以上的哨兵节点,以提高可靠性
- 部署位置:哨兵节点应部署在不同的物理机器上,避免单点故障
- 网络规划:确保哨兵节点之间以及哨兵节点与Redis节点之间的网络连接稳定
- 配置规划:合理配置哨兵的参数,如quorum、down-after-milliseconds等
2.2 硬件要求
- CPU:哨兵节点对CPU的要求较低,一般1-2核即可
- 内存:哨兵节点对内存的要求较低,一般512MB-1GB即可
- 磁盘:哨兵节点对磁盘的要求较低,一般10GB即可
- 网络:哨兵节点需要稳定的网络连接
2.3 网络要求
## 1. 网络延迟
– 哨兵节点之间的网络延迟应尽可能低,建议不超过10ms
– 哨兵节点与Redis节点之间的网络延迟也应尽可能低
## 2. 网络带宽
– 哨兵节点之间的通信带宽要求较低
– 哨兵节点与Redis节点之间的通信带宽也要求较低
## 3. 网络稳定性
– 确保哨兵节点之间的网络连接稳定
– 确保哨兵节点与Redis节点之间的网络连接稳定
## 4. 网络安全
– 配置防火墙规则,只允许哨兵节点之间以及哨兵节点与Redis节点之间的通信
– 考虑使用专线或VPN连接
学习交流加群风哥QQ113257174
Part03-生产环境项目实施方案
3.1 哨兵部署
## 1. 环境准备
# 主节点:192.168.1.100:6379
# 从节点1:192.168.1.101:6379
# 从节点2:192.168.1.102:6379
# 哨兵节点1:192.168.1.100:26379
# 哨兵节点2:192.168.1.101:26379
# 哨兵节点3:192.168.1.102:26379
## 2. 配置主从集群
# 主节点配置(192.168.1.100)
$ vi /redis/app/redis.conf
bind 192.168.1.100
port 6379
requirepass fgedu@2026
repl-backlog-size 1mb
# 从节点1配置(192.168.1.101)
$ vi /redis/app/redis.conf
bind 192.168.1.101
port 6379
requirepass fgedu@2026
replicaof 192.168.1.100 6379
masterauth fgedu@2026
# 从节点2配置(192.168.1.102)
$ vi /redis/app/redis.conf
bind 192.168.1.102
port 6379
requirepass fgedu@2026
replicaof 192.168.1.100 6379
masterauth fgedu@2026
## 3. 配置哨兵节点1
$ vi /redis/app/sentinel.conf
bind 192.168.1.100
port 26379
dir /redis/fgdata
sentinel monitor mymaster 192.168.1.100 6379 2
sentinel auth-pass mymaster fgedu@2026
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
## 4. 配置哨兵节点2
$ vi /redis/app/sentinel.conf
bind 192.168.1.101
port 26379
dir /redis/fgdata
sentinel monitor mymaster 192.168.1.100 6379 2
sentinel auth-pass mymaster fgedu@2026
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
## 5. 配置哨兵节点3
$ vi /redis/app/sentinel.conf
bind 192.168.1.102
port 26379
dir /redis/fgdata
sentinel monitor mymaster 192.168.1.100 6379 2
sentinel auth-pass mymaster fgedu@2026
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
## 6. 启动主从集群
$ systemctl start redis # 在主节点上执行
$ systemctl start redis # 在从节点1上执行
$ systemctl start redis # 在从节点2上执行
## 7. 启动哨兵节点
$ /redis/app/bin/redis-sentinel /redis/app/sentinel.conf # 在哨兵节点1上执行
$ /redis/app/bin/redis-sentinel /redis/app/sentinel.conf # 在哨兵节点2上执行
$ /redis/app/bin/redis-sentinel /redis/app/sentinel.conf # 在哨兵节点3上执行
3.2 哨兵配置详解
## 1. 核心配置参数
– bind:绑定地址
– port:哨兵端口,默认26379
– dir:工作目录
– sentinel monitor:监控的主节点,格式为sentinel monitor
– sentinel auth-pass:主节点的密码
– sentinel down-after-milliseconds:判断主节点下线的时间阈值,单位毫秒
– sentinel parallel-syncs:故障转移后,从节点同步新主节点的并行数量
– sentinel failover-timeout:故障转移的超时时间,单位毫秒
– sentinel notification-script:故障转移时执行的脚本
– sentinel client-reconfig-script:客户端重新配置时执行的脚本
## 2. 配置示例
“`
bind 192.168.1.100
port 26379
dir /redis/fgdata
sentinel monitor mymaster 192.168.1.100 6379 2
sentinel auth-pass mymaster fgedu@2026
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
“`
3.3 哨兵操作
## 1. 查看哨兵状态
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 26379 info sentinel
# 输出示例
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.1.100:6379,slaves=2,sentinels=3
## 2. 查看主节点信息
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 26379 sentinel master mymaster
## 3. 查看从节点信息
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 26379 sentinel slaves mymaster
## 4. 查看哨兵节点信息
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 26379 sentinel sentinels mymaster
## 5. 手动触发故障转移
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 26379 sentinel failover mymaster
## 6. 检查主节点状态
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 info replication
## 7. 检查从节点状态
$ /redis/app/bin/redis-cli -h 192.168.1.101 -p 6379 -a fgedu@2026 info replication
3.4 哨兵监控
## 1. 监控哨兵状态
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 26379 info sentinel
## 2. 监控主节点状态
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 26379 sentinel master mymaster
## 3. 监控从节点状态
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 26379 sentinel slaves mymaster
## 4. 监控哨兵节点状态
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 26379 sentinel sentinels mymaster
## 5. 使用监控工具
# 可以使用Prometheus + Grafana监控Redis Sentinel
# 可以使用Redis自带的监控命令
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 26379 monitor
风哥提示:Redis接口限流是保护系统的重要机制,合理的限流策略可以防止系统过载,确保系统的稳定性和可用性。在实际应用中,需要根据具体业务场景和数据特点,选择合适的限流算法和策略。
Part04-生产案例与实战讲解
4.1 哨兵部署实战
## 1. 环境准备
# 主节点:192.168.1.100:6379
# 从节点1:192.168.1.101:6379
# 从节点2:192.168.1.102:6379
# 哨兵节点1:192.168.1.100:26379
# 哨兵节点2:192.168.1.101:26379
# 哨兵节点3:192.168.1.102:26379
## 2. 配置主从集群
# 主节点配置
$ vi /redis/app/redis.conf
bind 192.168.1.100
port 6379
requirepass fgedu@2026
repl-backlog-size 1mb
# 从节点1配置
$ vi /redis/app/redis.conf
bind 192.168.1.101
port 6379
requirepass fgedu@2026
replicaof 192.168.1.100 6379
masterauth fgedu@2026
# 从节点2配置
$ vi /redis/app/redis.conf
bind 192.168.1.102
port 6379
requirepass fgedu@2026
replicaof 192.168.1.100 6379
masterauth fgedu@2026
## 3. 配置哨兵节点
# 哨兵节点1配置
$ vi /redis/app/sentinel.conf
bind 192.168.1.100
port 26379
dir /redis/fgdata
sentinel monitor mymaster 192.168.1.100 6379 2
sentinel auth-pass mymaster fgedu@2026
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
# 哨兵节点2配置
$ vi /redis/app/sentinel.conf
bind 192.168.1.101
port 26379
dir /redis/fgdata
sentinel monitor mymaster 192.168.1.100 6379 2
sentinel auth-pass mymaster fgedu@2026
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
# 哨兵节点3配置
$ vi /redis/app/sentinel.conf
bind 192.168.1.102
port 26379
dir /redis/fgdata
sentinel monitor mymaster 192.168.1.100 6379 2
sentinel auth-pass mymaster fgedu@2026
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
## 4. 启动主从集群
$ systemctl start redis # 在主节点上执行
$ systemctl start redis # 在从节点1上执行
$ systemctl start redis # 在从节点2上执行
## 5. 启动哨兵节点
$ /redis/app/bin/redis-sentinel /redis/app/sentinel.conf –daemonize yes # 在哨兵节点1上执行
$ /redis/app/bin/redis-sentinel /redis/app/sentinel.conf –daemonize yes # 在哨兵节点2上执行
$ /redis/app/bin/redis-sentinel /redis/app/sentinel.conf –daemonize yes # 在哨兵节点3上执行
## 6. 验证哨兵状态
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 26379 info sentinel
# 输出示例
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.1.100:6379,slaves=2,sentinels=3
## 7. 验证主从状态
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 info replication
# 输出示例
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.1.101,port=6379,state=online,offset=12345,lag=0
slave1:ip=192.168.1.102,port=6379,state=online,offset=12345,lag=0
master_replid:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:12345
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:12345
4.2 故障转移测试
## 1. 模拟主节点故障
$ systemctl stop redis # 在主节点上执行
## 2. 监控哨兵日志
$ tail -f /redis/app/log/redis-sentinel.log
## 3. 检查故障转移状态
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 26379 info sentinel
# 输出示例
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.1.101:6379,slaves=2,sentinels=3
## 4. 检查新主节点状态
$ /redis/app/bin/redis-cli -h 192.168.1.101 -p 6379 -a fgedu@2026 info replication
# 输出示例
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.1.102,port=6379,state=online,offset=12345,lag=0
slave1:ip=192.168.1.100,port=6379,state=online,offset=12345,lag=0
master_replid:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
master_replid2:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
master_repl_offset:12345
second_repl_offset:12345
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:12345
## 5. 测试新主节点的写入能力
$ /redis/app/bin/redis-cli -h 192.168.1.101 -p 6379 -a fgedu@2026 set test:failover “failover success”
# 输出示例
OK
## 6. 测试从节点的读取能力
$ /redis/app/bin/redis-cli -h 192.168.1.102 -p 6379 -a fgedu@2026 get test:failover
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 get test:failover
# 输出示例
“failover success”
“failover success”
## 7. 恢复原主节点
$ systemctl start redis # 在原主节点上执行
## 8. 检查原主节点状态
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 info replication
# 输出示例
# Replication
role:slave
master_host:192.168.1.101
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:12345
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:12345
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:12345
4.3 哨兵管理实战
## 1. 查看哨兵配置
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 26379 sentinel config get *
## 2. 修改哨兵配置
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 26379 sentinel config set mymaster down-after-milliseconds 10000
## 3. 查看哨兵状态
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 26379 info sentinel
## 4. 查看主节点信息
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 26379 sentinel master mymaster
## 5. 查看从节点信息
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 26379 sentinel slaves mymaster
## 6. 查看哨兵节点信息
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 26379 sentinel sentinels mymaster
## 7. 手动触发故障转移
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 26379 sentinel failover mymaster
## 8. 停止哨兵节点
$ pkill redis-sentinel
## 9. 启动哨兵节点
$ /redis/app/bin/redis-sentinel /redis/app/sentinel.conf –daemonize yes
4.4 高可用实战
## 1. 配置哨兵高可用集群
# 主节点:192.168.1.100:6379
# 从节点1:192.168.1.101:6379
# 从节点2:192.168.1.102:6379
# 哨兵节点1:192.168.1.100:26379
# 哨兵节点2:192.168.1.101:26379
# 哨兵节点3:192.168.1.102:26379
## 2. 客户端连接哨兵
# 使用Redis客户端连接哨兵获取主节点地址
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 26379 sentinel get-master-addr-by-name mymaster
# 输出示例
1) “192.168.1.100”
2) “6379”
## 3. 测试客户端连接
# 连接主节点
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 set test:ha “high availability”
# 输出示例
OK
# 从从节点读取
$ /redis/app/bin/redis-cli -h 192.168.1.101 -p 6379 -a fgedu@2026 get test:ha
# 输出示例
“high availability”
## 4. 模拟主节点故障
$ systemctl stop redis # 在主节点上执行
## 5. 等待故障转移完成
# 查看新主节点地址
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 26379 sentinel get-master-addr-by-name mymaster
# 输出示例
1) “192.168.1.101”
2) “6379”
## 6. 测试新主节点
# 连接新主节点
$ /redis/app/bin/redis-cli -h 192.168.1.101 -p 6379 -a fgedu@2026 set test:newmaster “new master”
# 输出示例
OK
# 从从节点读取
$ /redis/app/bin/redis-cli -h 192.168.1.102 -p 6379 -a fgedu@2026 get test:newmaster
# 输出示例
“new master”
## 7. 恢复原主节点
$ systemctl start redis # 在原主节点上执行
## 8. 测试整个集群
# 连接新主节点
$ /redis/app/bin/redis-cli -h 192.168.1.101 -p 6379 -a fgedu@2026 set test:recovery “recovery success”
# 从所有节点读取
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 get test:recovery
$ /redis/app/bin/redis-cli -h 192.168.1.102 -p 6379 -a fgedu@2026 get test:recovery
# 输出示例
“recovery success”
“recovery success”
更多学习教程公众号风哥教程itpux_com
Part05-风哥经验总结与分享
5.1 最佳实践
Redis哨兵高可用部署实战最佳实践:
- 哨兵数量:部署3个或以上的哨兵节点,以提高可靠性,学习交流加群风哥微信: itpux-com
- 部署位置:哨兵节点应部署在不同的物理机器上,避免单点故障
- 网络配置:确保哨兵节点之间以及哨兵节点与Redis节点之间的网络连接稳定
- 配置参数:合理配置哨兵的参数,如quorum、down-after-milliseconds等
- 监控配置:监控哨兵的状态,及时发现问题
- 故障转移测试:定期测试故障转移流程,确保其可靠性
- 客户端配置:客户端应通过哨兵获取主节点的地址,而不是硬编码
- 安全配置:配置哨兵节点的认证和加密
5.2 常见问题
- 哨兵无法发现主节点:检查网络连接和主节点状态
- 故障转移失败:检查哨兵配置和从节点状态
- 哨兵节点之间无法通信:检查网络连接和防火墙规则
- 客户端无法获取主节点地址:检查哨兵配置和客户端代码
- 哨兵节点崩溃:检查哨兵日志,找出崩溃原因
- 故障转移时间过长:调整down-after-milliseconds和failover-timeout参数
5.3 优化技巧
## 1. 哨兵配置优化
– 合理设置quorum值,一般为哨兵节点数量的一半加1
– 合理设置down-after-milliseconds值,平衡故障检测速度和误判概率
– 合理设置parallel-syncs值,平衡故障转移速度和从节点同步压力
– 合理设置failover-timeout值,确保故障转移有足够的时间完成
## 2. 网络优化
– 确保哨兵节点之间的网络延迟低
– 确保哨兵节点与Redis节点之间的网络延迟低
– 配置防火墙规则,只允许哨兵节点之间以及哨兵节点与Redis节点之间的通信
– 考虑使用专线或VPN连接
## 3. 监控优化
– 监控哨兵节点的状态,及时发现问题
– 监控主从集群的状态,确保数据一致性
– 设置合理的告警机制,当集群状态发生变化时及时通知
– 定期检查哨兵日志,找出潜在问题
## 4. 故障转移优化
– 定期测试故障转移流程,确保其可靠性
– 准备好故障转移的回滚方案
– 建立完善的故障处理流程
– 考虑使用Redis Cluster作为更高级的高可用解决方案
## 5. 客户端优化
– 客户端应通过哨兵获取主节点的地址,而不是硬编码
– 客户端应实现重试机制,当主节点故障时重新获取主节点地址
– 客户端应实现读写分离,将读请求发送到从节点
– 客户端应监控连接状态,及时发现连接问题
通过本文档的学习,您应该掌握了Redis哨兵高可用部署实战,能够在生产环境中合理部署和配置哨兵节点,实现Redis集群的高可用性。在实际应用中,需要根据具体业务场景选择合适的高可用方案,确保系统的可靠性和稳定性。
风哥提示:Redis哨兵是实现Redis高可用的重要工具。在实际应用中,需要合理部署和配置哨兵节点,确保集群的可靠性和稳定性。
from Redis视频:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
