Linux/Python学习论坛-京峰教育

 找回密码
 立即注册

一键登录:

搜索
热搜: 活动 交友 discuz
查看: 1285|回复: 1

redis主从+sentinel故障转移

[复制链接]

238

主题

288

帖子

1925

积分

超级版主

Rank: 8Rank: 8

积分
1925
QQ
发表于 2015-3-18 14:57:13 | 显示全部楼层 |阅读模式
一、sentinel介绍:


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


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


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


  监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
  自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
注:推荐使用 Redis 2.8.0 或以上的版本。


二、配置sentinel:


1、部署redis环境:


参考文章:http://123.57.11.203/thread-176-1-1.html


注:配置sentinel至少需要两个redis服务实例,切为一主一从,或者一主多从。


192.168.1.223              6379           主


192.168.1.223              6380           备


2、配置redis主从:


修改redis.conf配置文件,


注:只需要确保以下内容,其它可不修改:


6379的配置:


masterauth rot@minunix


slave-read-only  yes


6380的配置:


slaveof  192.168.1.223  6379


masterauth  rot@minunix


slave-read-only  yes


两个redis实例只需要确保以上内容,其它内容可参考Redis基础及部署。


3、配置sentinel:


在下载redis包,并解压后,会发现一个sentinel.conf 的文件,编辑此文件:


# cat sentinel.conf


port 26379


dir "/data/newredis/var"


sentinel monitor minunix  192.168.1.223 6379 1


sentinel down-after-milliseconds minunix 5000


sentinel failover-timeout minunix 18000


sentinel auth-pass minunix rot@minunix


sentinel config-epoch minunix 7


sentinel notification-script minunix /data/scripts/send_mail.sh


sentinel leader-epoch minunnix 7


# sentinel known-slave minunix 192.168.1.223 6380


sentinel current-epoch 7


注:注意修改以上几个部分:


(1)、sentinel monitor minunix  192.168.1.223 6379 1


定义sentinel 监控的主机及端口;


其中:minunix为master-name ,可以随意定义;


192.168.1.223  6379: 为主服务的IP及Port;


1:最后的”1”为当至少有1个从赞同sentinel的监控结果,判为主失效。


(2)、sentinel auth-pass minunix rot@minunix


当redis访问都需要密码的时候,即在redis.conf有配置requirepass项的时候,需要定义此项:


其中sentinel auth-pass 为固定格式;


minunix: 为master-name ,可以随意定义,但在此文件中必须统一一致;


rot@minunix:为redis.conf中定义的requirepass密码;


(3)、sentinel notification-script minunix /data/scripts/send_mail.sh


当sentinel触发时,切换主从状态时,需要执行的脚本。当主down的时候可以通知当事人;


sentinel notification-script: 为固定格式


minunix: 为master-name ,可以随意定义,但在此文件中必须统一一致;


/data/scripts/send_mail.sh:脚本路径。


三、启动测试:


1、启动:


# ./redis-server ./6379/redis.conf


# ./redis-server ./6380/redis.conf


# ./redis-sentinel  ./sentinel.conf &> ./sentinel.log &





2、测试:


# ./bin/redis-cli -p 6379 -h 192.168.1.223


192.168.1.223:6379> auth rot@minunix


OK


192.168.1.223:6379> info replication


# Replication


role:master


connected_slaves:1


slave0:ip=192.168.1.223,port=6380,state=online,offset=2409,lag=0


master_repl_offset:2409


repl_backlog_active:1


repl_backlog_size:1048576


repl_backlog_first_byte_offset:2


repl_backlog_histlen:2408


192.168.1.223:6379> set minunix minunix.com


OK


192.168.1.223:6379> get minunix


"minunix.com"


192.168.1.223:6379>





# ./redis-cli  -p 6380 -h 192.168.1.223


192.168.1.223:6380> auth rot@minunix


OK


192.168.1.223:6380>


192.168.1.223:6380> info replication


# Replication


role:slave


master_host:192.168.1.223


master_port:6379


master_link_status:up


master_last_io_seconds_ago:7


master_sync_in_progress:0


slave_repl_offset:2686


slave_priority:100


slave_read_only:1


connected_slaves:0


master_repl_offset:0


repl_backlog_active:0


repl_backlog_size:1048576


repl_backlog_first_byte_offset:0


repl_backlog_histlen:0


192.168.1.223:6380>





可以看到6380是6379 的从,现在将6379 kill 掉,停半分钟再将6379启来;查看结果得到:


192.168.1.223:6380> info replication


# Replication


role:master


connected_slaves:1


slave0:ip=192.168.1.223,port=6379,state=online,offset=4684,lag=1


master_repl_offset:4684


repl_backlog_active:1


repl_backlog_size:1048576


repl_backlog_first_byte_offset:2


repl_backlog_histlen:4683


192.168.1.223:6380> set plusmei plusmei.com


OK


192.168.1.223:6380> get plusmei


"plusmei.com"


192.168.1.223:6380>








192.168.1.223:6379> info replication


# Replication


role:slave


master_host:192.168.1.223


master_port:6380


master_link_status:up


master_last_io_seconds_ago:0


master_sync_in_progress:0


slave_repl_offset:4984


slave_priority:100


slave_read_only:1


connected_slaves:0


master_repl_offset:0


repl_backlog_active:0


repl_backlog_size:1048576


repl_backlog_first_byte_offset:0


repl_backlog_histlen:0


192.168.1.223:6379> get plusmei


"plusmei.com"


192.168.1.223:6379>


由上图看出已经成功切换,也可以通过查看sentinel.log 来查看详细的切换过程:



感谢原著作者大力分享http://www.minunix.com/2014/08/redis-sentinel/


回复

使用道具 举报

5

主题

65

帖子

2496

积分

金牌会员

Rank: 6Rank: 6

积分
2496
发表于 2015-6-16 16:12:53 | 显示全部楼层
这个贴子很赞,帮我决解了问题   
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|京峰教育,只为有梦想的人 ( 京ICP备15013173号 )

GMT+8, 2019-6-16 09:28 , Processed in 0.048758 second(s), 11 queries , Apc On.

快速回复 返回顶部 返回列表