Redis哨兵模式实现主从故障互切换的方法

Redis Sentinel 是一个分布式系统,用于监控、通知和故障迁移。当主服务器出现问题时,Sentinel 会自动将从服务器提升为新的主服务器,并进行故障迁移。配置哨兵涉及多个Redis和Sentinel配置文件,启动时可能遇到如overcommit_memory和TCP backlog等问题,需要调整系统设置。哨兵端口不可直接用客户端连接,但保证了主从故障切换的高可用性。

Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。

我的官方群点击此处

虽然 Redis Sentinel 释出为一个单独的可执行文件 redis-sentinel , 但实际上它只是一个运行在特殊模式下的 Redis 服务器, 你可以在启动一个普通 Redis 服务器时通过给定 --sentinel 选项来启动 Redis Sentinel 。

Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:

1、监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。

2、提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。

3、自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

配置

当主宕机了从接替主成为新的主,宕机的主启动后自动变成了从,其实它和Mysql的双主模式是一样的互为主从;redis哨兵需要用到redis-sentinel程序和sentinel.conf配置文件。

mkdir -p /usr/local/redis

mkdir -p /usr/local/redis/6379

mkdir -p /usr/local/redis/6380

mkdir -p /usr/local/redis/redis_cluster

主配置

vim redis_6379.conf

daemonize yes

pidfile /usr/local/redis/6379/redis_6379.pid

port 6379

tcp-backlog 128

timeout 0

tcp-keepalive 0

loglevel notice

logfile ""

databases 16

save 900 1    ###save

save 300 10

save 60 10000

stop-writes-on-bgsave-error yes

rdbcompression yes

rdbchecksum yes

dbfilename dump.rdb   ###dbfile

dir "/usr/local/redis/6379"

masterauth "123456"

requirepass "123456"

slave-serve-stale-data yes

slave-read-only yes

repl-diskless-sync no

repl-diskless-sync-delay 5

repl-disable-tcp-nodelay no

slave-priority 100

appendonly yes

appendfilename "appendonly.aof"

appendfsync everysec

no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

aof-load-truncated yes

lua-time-limit 5000

slowlog-log-slower-than 10000

slowlog-max-len 128

latency-monitor-threshold 0

notify-keyspace-events ""

hash-max-ziplist-entries 512

hash-max-ziplist-value 64

list-max-ziplist-entries 512

list-max-ziplist-value 64

set-max-intset-entries 512

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

activerehashing yes

client-output-buffer-limit normal 0 0 0

client-output-buffer-limit slave 256mb 64mb 60

client-output-buffer-limit pubsub 32
### Redis Sentinel 主从切换的工作原理 在Redis哨兵模式下,主从切换机制旨在提高数据库服务的高可用性。当监控到主节点发生故障时,Sentinel会自动执行一系列操作来选举新的主节点并完成角色转换[^2]。 具体来说,在正常运行期间,多个哨兵实例持续监测所有主库及其副本的状态。一旦检测到当前正在提供写入服务的主要实例不可达(例如网络中断或硬件故障),其余存活的哨兵成员之间就会发起投票过程决定由哪个现有的只读副本来接替成为新任领导者继续对外界请求作出响应。为了防止脑裂现象的发生——即同一时间存在两个以上相都认为自己是合法领导者的实体——整个决策流程遵循严格的仲裁协议以确保最终只会有一个胜利者被选出来接管原主人职责[^1]。 ### 配置方法实现上述功能,则需按照如下方式设置环境: #### 启动Redis Server 和 Sentinel Service 对于每台参与构成集群架构的服务端机器而言,应当先开启相应的Redis进程,并指定其监听特定端口;之后再单独启动一个关联着该主机上已部署完毕的标准配置文件`redis-sentinel.conf` 的哨兵守护程序作为监视器使用[^3]。 ```bash # 开启Redis server /etc/init.d/redis_6379 start # 启动sentinel service redis-sentinel /etc/redis-sentinel.conf & ``` #### 编辑 `redis-sentinel.conf` 文件 此步骤涉及修改哨兵专用配置文档中的若干参数选项以便于自定义化调整行为逻辑。比如设定最低票数门槛、通知邮箱地址列表等个性化需求均可在此处体现。特别需要注意的是关于quorum值的选择,它决定了多少比例以上的哨兵同意才能触发一次完整的故障转移动作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值