基于Sentinel(哨兵)搭建实现Redis高可用集群

1.概述
Redis哨兵为Redis提供了高可用性。实际上这意味着你可以使用哨兵模式创建一个可以不用人为干预而应对各种故障的Redis部署。

哨兵模式还提供了其他的附加功能,如监控,通知,为客户端提供配置。

下面是在宏观层面上哨兵模式的功能列表:

监控:哨兵不断的检查master和slave是否正常的运行。
通知:当监控的某台Redis实例发生问题时,可以通过API通知系统管理员和其他的应用程序。
自动故障转移:如果一个master不正常运行了,哨兵可以启动一个故障转移进程,将一个slave升级成为master,其他的slave被重新配置使用新的master,并且应用程序使用Redis服务端通知的新地址。
配置提供者:哨兵作为Redis客户端发现的权威来源:客户端连接到哨兵请求当前可靠的master的地址。如果发生故障,哨兵将报告新地址。

哨兵的分布式特性
Redis哨兵是一个分布式系统:

哨兵自身被设计成和多个哨兵进程一起合作运行。有多个哨兵进程合作的好处有:

当多个哨兵对一个master不再可用达成一致时执行故障检测。这会降低错误判断的概率。
即使在不是所有的哨兵都工作时哨兵也会工作,使系统健壮的抵抗故障。毕竟在故障系统里单点故障没有什么意义。
Redis的哨兵、Redis实例(master和slave)、和客户端是一个有特种功能的大型分布式系统。在这个文档里将逐步从为了理解哨兵基本性质需要的基础信息,到为了理解怎样正确的使用哨兵工作的更复杂的信息(这是可选的)进行介绍。

2.机器规划
集群架构图如下:
这里写图片描述

3.集群配置

3.1 redis.conf配置

Master(192.168.50.100)机器配置如下:

#后台启动  
daemonize yes  
pidfile "/home/redis/redis/redisRun/redis_6379.pid"    
port 6379    
timeout 0    
tcp-keepalive 0    
loglevel notice    
logfile "/home/redis/redislog/redis.log"    
databases 16    
save 900 1    
save 300 10    
save 60 10000    
stop-writes-on-bgsave-error yes    
rdbcompression yes    
rdbchecksum yes    
dbfilename "dump.rdb"    
dir "/home/redis/redisdb"   
#如果做故障切换,不论主从节点都要填写密码且要保持一致    
masterauth "123456"  
slave-serve-stale-data yes    
slave-read-only yes    
repl-disable-tcp-nodelay no    
slave-priority 98  
#当前redis密码   
requirepass "123456"   
appendonly yes    
# appendfsync always    
appendfsync everysec    
# appendfsync no    
no-appendfsync-on-rewrite no    
auto-aof-rewrite-percentage 100    
auto-aof-rewrite-min-size 64mb    
lua-time-limit 5000    
slowlog-log-slower-than 10000    
slowlog-max-len 128    
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    
activerehashing yes    
client-output-buffer-limit normal 0 0 0    
client-output-buffer-limit slave 256mb 64mb 60    
client-output-buffer-limit pubsub 32mb 8mb 60    
hz 10    
aof-rewrite-incremental-fsync yes    
# Generated by CONFIG REWRITE

Slave(192.168.50.101-103)机器配置如下:

daemonize yes    
pidfile "/home/redis/redis/redisRun/redis_6379.pid"    
port 6379    
timeout 0    
tcp-keepalive 0    
loglevel notice    
logfile "/home/redis/redislog/redis.log"    
databases 16    
save 900 1    
save 300 10    
save 60 10000    
stop-writes-on-bgsave-error yes    
rdbcompression yes    
rdbchecksum yes    
dbfilename "dump.rdb"    
dir "/home/redis/redisdb"    
#主节点密码    
masterauth "123456"  
slave-serve-stale-data yes    
slave-read-only yes    
repl-disable-tcp-nodelay no    
slave-priority 98    
requirepass "123456"    
appendonly yes    
# appendfsync always    
appendfsync everysec    
# appendfsync no    
no-appendfsync-on-rewrite no    
auto-aof-rewrite-percentage 100    
auto-aof-rewrite-min-size 64mb    
lua-time-limit 5000    
slowlog-log-slower-than 10000    
slowlog-max-len 128    
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    
activerehashing yes    
client-output-buffer-limit normal 0 0 0    
client-output-buffer-limit slave 256mb 64mb 60    
client-output-buffer-limit pubsub 32mb 8mb 60    
hz 10    
aof-rewrite-incremental-fsync yes    
# Generated by CONFIG REWRITE    
#配置主节点信息    
slaveof 192.168.50.100 6379

3.2 sentinel.conf配置如下

Master(192.168.50.100)机器配置如下:

port 26379  
#1表示在sentinel集群中只要有两个节点检测到redis主节点出故障就进行切换,单sentinel节点无效(自己测试发现的)  
#如果3s内mymaster无响应,则认为mymaster宕机了  
#如果10秒后,mysater仍没活过来,则启动failover  
sentinel monitor mymaster 192.168.50.100 6379 1  
sentinel down-after-milliseconds mymaster 3000  
sentinel failover-timeout mymaster 10000  
daemonize yes  
#指定工作目录  
dir "/home/redis/sentinel-work"  
protected-mode no  
logfile "/home/redis/sentinellog/sentinel.log"  
#redis主节点密码  
sentinel auth-pass mymaster 123456  
# Generated by CONFIG REWRITE

Slave(192.168.50.100-102)机器配置同上

注意:以上配置中不存在的文件路径需要手动创建。哨兵可配置多个,最好是最少3个节点,配置相同。

4.启动集群

启动192.168.50.100-103各机器Redis节点命令如下:

redis-server /home/redis/redis/redis.conf  

在192.168.50.100启动Redis哨兵节点命令如下:

redis-sentinel /home/redis/redis/sentinel.conf 

4.1 登录Master(192.168.50.100)的redis查看Master的情况:

执行登录命令如下:

edis-cli -h 192.168.50.100 -p 6379 -a 123456 

列出Master的信息:

info Replication 

这里写图片描述
4.2 登录Slave(192.168.50.101)的redis查看Slave的情况:
执行登录命令如下:

redis-cli -h 192.168.50.101 -p 6379 -a 123456 

列出Slave的信息:

info Replication 

这里写图片描述

转载自:
http://blog.csdn.net/shouhuzhezhishen/article/details/69221517

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值