设为首页 收藏本站
查看: 797|回复: 0

[经验分享] redis应用之使用sentinel实现主从复制高可用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-11-3 08:37:12 | 显示全部楼层 |阅读模式
                      

一、redis的高可用管理工具sentinel介绍

sentinel是一个管理redis实例的工具,它可以实现对redis的监控、通知、自动故障转移。sentinel不断的检测redis实例是否可以正常工作,通过API向其他程序报告redis的状态,

如果redis master不能工作,则会自动启动故障转移进程,将其中的一个slave提升(通过选举)为master,其他的slave重新设置新的master服务器。而故障的master再次启动后

会被sentinel自动降级为slave服务器加入到集群中。

redis主从的特点:

1、redis使用异步复制,从服务器会以每秒一次的频率向主服务器报告复制流的处理进度

2、一个主服务器可以有多个从服务器,从服务器也可以有自己的从服务器(级联复制)

3、复制功能不会阻塞主服务器,即使一个或多个从服务器正在进行初次同步,主服务器也可以继续处理命令请求

4、复制功能可以用于数据冗余,也可以通过让多个从服务器处理只读命令请求来提升扩展性

5、Redis从节点默认为只读,无须手动配置

redis的主从集群可以实现分担压力的效果,但是无法做到高可用,如果master宕掉,服务就不可用了,所以使用redis的sentinel可以实现HA的功能:

sentinel作用如下:

1、监控:sentinel会不断的检查你的主服务器和从服务器是否运行正常

2、当被监控的某个redis服务器出现问题时,sentinel可以通过API向管理员或者其他应用程序发送通知

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

redis sentinel在监控redis实例时有两种redis宕机状态S_DOWN和O_DOWN:

S_DOWN:当sentinel在指定的超时时间内没有收到一个正确的ping回复值,则认为是S_DOWN

O_DOWN:O_DOWN的条件是有足够多的sentinel认为该redis实例是S_DOWN。

注意:O_DOWN只能是发生在主服务器,sentinel和其他从服务器不会发生O_DOWN

二、开始安装配置主从高可用

1、环境架构:rhel6 or centos 6  ip:10.48.194.252 (若在不同机器上部署的话,都需要在机器上安装sentinel)

master_port:6379

slave_port:6380

slave_port:6381

sentinel_port:26379

sentinel_port:26479

本人是在一台机器上开多个实例,在不同机器中也可以。原理一样,这里不在复述

架构说明:

a、如果主节点修复后再上线,就会变成从节点。

b、客户端程序连接时,应该连接sentinel节点

2、在三台redis上配置sentinel

先介绍一下sentinel.conf配置文件中常用的参数,如下:

port 26379          #sentinel的端口
dir /tmp          #工作目录
sentinel monitor mymaster 127.0.0.1 6379 2
#mymaster是自定义的名称,ip地址是master的ip,6379为master的redis-server端口
#2是quorum,表示sentinel确认一个Master为O_DOWN状态至少需要多少个哨兵同意(此值要小于等于集群中slave的个数)
英文翻译过来是:告诉Sentinel监视这个master,并且只有在至少<quorum> sentinels同意的情况下才考虑它是O_DOWN(客观宕掉)状态。
sentinel down-after-milliseconds mymaster 30000  #mymaster多久不响应认为SDOWN,单位是毫秒
sentinel parallel-syncs mymaster 1         #指定最大同时同步新maser配置的slave数量,官方提示用较低的数字,一般为1
数字越小,故障转移过程完成所需的时间就越多,如果全部从服务器一起对新的主服务器进行同步,那么就可能会造成所有从服务器在短时间内全部不可用的情况出现。
sentinel failover-timeout mymaster 180000     #2次failover切换时间,如果第一次没有failover成功,过多长时间再次failover
注意:无论你设置要多少个Sentinel同意才能判断一个服务器失效,一个Sentinel都需要获得系统中多数(majority)Sentinel的支持,才能发起一次自动故障迁移,
并预留一个给定的配置纪元(configuration Epoch,一个配置纪元就是一个新主服务器配置的版本号)。换句话说,在只有少数(minority)Sentinel 进程正常运作的情况下,
Sentinel 是不能执行自动故障迁移的!
sentinel :port 26379 配置文件如下:
cat sentinel_26379.conf
port 26379
daemonize yes
logfile "/var/log/redis/sentinel_26379.log"
protected-mode no   (这是redis-3.2版本的新特性,改为no即可)
#master-1
sentinel monitor master-1 10.48.194.252 6379 2  (指向master服务器或端口)
sentinel auth-pass master-1 passwd
sentinel parallel-syncs master-1 1
sentinel down-after-milliseconds master-1 5000
sentinel failover-timeout master-1 18000
sentinel :port 26479 配置文件如下:
cat sentinel_26479.conf
port 26479
daemonize yes
logfile "/var/log/redis/sentinel_26479.log"
protected-mode no
#master-1
sentinel monitor master-1 10.48.194.252 6379 2
sentinel auth-pass master-1 passwd
sentinel down-after-milliseconds master-1 5000
sentinel failover-timeout master-1 18000
sentinel parallel-syncs master-1 1

redis_master_6379.conf 配置主要参数如下:
bind 10.48.194.252 127.0.0.1
protected-mode no
port 6379
requirepass passwd
masterauth passwd
redis_slave_6380.conf 配置主要参数如下:
protected-mode no
port 6380
daemonize yes
requirepass "passwd"
masterauth "passwd"
slaveof 10.48.194.252 6379

redis_slave_6381.conf 配置主要参数如下:
protected-mode no
port 6381
daemonize yes
requirepass "passwd"
masterauth "passwd"
slaveof 10.48.194.252 6379

按如下顺序依次启动服务:
redis-server  redis_master_6379.conf
redis-server  redis_slave_6380.conf
redis-server  redis_slave_6381.conf
redis-sentinel sentinel_26379.conf
redis-sentinel sentinel_26479.conf

查看进程是否都已经启动:
ps aux | grep redis | grep -v grep
root       5485  0.0  0.4 135480  9712 ?        Ssl  Nov01   0:51 redis-server *:6380               
root       5491  0.0  0.3 133432  7644 ?        Ssl  Nov01   0:52 redis-server *:6381               
root       6084  0.0  0.3 133432  7668 ?        Ssl  01:25   0:08 redis-sentinel *:26379 [sentinel]
root       6088  0.0  0.3 133432  7664 ?        Ssl  01:25   0:08 redis-sentinel *:26479 [sentinel]
root       6376  0.3  0.3 133432  7648 ?        Ssl  04:44   0:00 redis-server 10.48.194.252:6379
查看master的状态:
redis-cli -h 127.0.0.1 -p 6379 -a passwd
wKioL1gZ6j3gK_HtAAAn6pcnTHw853.jpg
查看slave的状态:
redis-cli -h 127.0.0.1 -p 6380 -a passwd
wKiom1gZ6qvQYqFPAAASJ1CLNXQ457.png-wh_500x0-wm_3-wmp_4-s_1939512808.jpg

查看sentinel状态:
redis-cli -h 127.0.0.1 -p 26379 -a passwd
wKiom1gZ6zTTD6j8AAAXic9fyFY479.jpg
验证redis sentinel 主从切换
1、首先关闭 master 服务(6379)
wKioL1gZ7BODXB6JAAB4J67J2Ws514.jpg 查看哨兵,发现端口号为6380的从服务变成了主服务,sentinel自动完成了故障切换。
wKiom1gZ7NGQUc9zAAAescQPnFE901.jpg
再次启动redis-server redis_master_6379.conf
启动刚才被shutdown的6379服务并查看,发现它变成了从服务
QQ截图20161103083655.png
80又变成了主
wKioL1gZ7ZTiqvWmAAAu4VUv6BU148.jpg
若想手动把从边成主,需要在6379里的配置文件中把slaveof 指向 6380的删除
                   


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-294892-1-1.html 上篇帖子: redis安装 下篇帖子: Redis 发布订阅模型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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