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

[经验分享] 02.Redis主从集群的Sentinel配置

[复制链接]

尚未签到

发表于 2018-11-5 08:03:10 | 显示全部楼层 |阅读模式
  阅读目录

  •   开始
  •   1.集群环境
  •   2.配置并启动Redis主从集群
  •   3.配置sentinel集群并启动
  •   4.测试sentinel集群
  回到顶部
1.集群环境
  1.Linux服务器列表
  使用4台CentOS Linux服务器搭建环境,其IP地址如下:
192.168.110.100192.168.110.101192.168.110.102192.168.110.103  2.Redis服务部署环境
  192.168.110.100
      启动多个Redis sentinel服务,构成Redis sentinel集群
  192.168.110.101
      启动Redis服务,设置成主节点
  192.168.110.102
      启动Redis服务,设置成192.168.110.101的从节点
  192.168.110.103
      启动Redis服务,设置成192.168.110.101的从节点

  回到顶部
2.配置并启动Redis主从集群
  1.修改redis.conf配置文件
  主节点的redis配置文件使用默认的配置文件就可以了,从节点的redis配置文件修改如下:
# MasterSlave replication.  
Use slaveof to make a Redis instance a copy of# another Redis server. A few things to understand ASAP about Redis replication.## 1) Redis replication is asynchronous, but you can configure a master to#    stop accepting writes if it appears to be not connected with at least#    a given number of slaves.# 2) Redis slaves are able to perform a partial resynchronization with the#    master if the replication link is lost for a relatively small amount of#    time. You may want to configure the replication backlog size (see the next#    sections of this file) with a sensible value depending on your needs.# 3) Replication is automatic and does not need user intervention. After a#    network partition slaves automatically try to reconnect to masters#    and resynchronize with them.## 主从同步。通过 slaveof 配置来实现Redis实例的备份。# 注意,这里是本地从远端复制数据。也就是说,本地可以有不同的数据库文件、绑定不同的IP、监听不同的端口。## slaveof  slaveof 192.168.110.101 6379
  注意:两台从节点都要改。
  2.启动Redis主从集群
  先启动192.168.110.101主节点,使用默认配置,脚本:
[lizhiwei@localhost bin]$ ./redis-server  再启动192.168.110.102和192.168.110.103从节点,使用刚才的配置,脚本:
./redis-server redis.conf  3.查看集群
  192.168.110.101主节点Replication信息
[lizhiwei@localhost bin]$ ./redis-cli -h 192.168.110.101 info Replication# Replicationrole:masterconnected_slaves:2slave0:ip=192.168.110.102,port=6379,state=online,offset=659,lag=1slave1:ip=192.168.110.103,port=6379,state=online,offset=659,lag=0master_repl_offset:659repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:2repl_backlog_histlen:658  192.168.110.102从节点Replication信息
[lizhiwei@localhost bin]$ ./redis-cli -h 192.168.110.102 info Replication # Replicationrole:slavemaster_host:192.168.110.101master_port:6379master_link_status:upmaster_last_io_seconds_ago:3master_sync_in_progress:0slave_repl_offset:701slave_priority:100slave_read_only:1connected_slaves:0master_repl_offset:0repl_backlog_active:0repl_backlog_size:1048576repl_backlog_first_byte_offset:0repl_backlog_histlen:0  192.168.110.103从节点Replication信息
[lizhiwei@localhost bin]$ ./redis-cli -h 192.168.110.103 info Replication # Replicationrole:slavemaster_host:192.168.110.101master_port:6379master_link_status:upmaster_last_io_seconds_ago:9master_sync_in_progress:0slave_repl_offset:715slave_priority:100slave_read_only:1connected_slaves:0master_repl_offset:0repl_backlog_active:0repl_backlog_size:1048576repl_backlog_first_byte_offset:0repl_backlog_histlen:0  此时,存储到192.168.110.101主节点的数据,在从节点中都可以查询到。从节点会备份主节点的数据。
  回到顶部
3.配置sentinel集群并启动
  1.创建sentinel.conf配置文件
port 26379# sentinel announce-ip # sentinel announce-port dir /tmp################################# master001 #################################sentinel monitor master001 192.168.110.101 6379 2# sentinel auth-pass  sentinel down-after-milliseconds master001 30000sentinel parallel-syncs master001 1sentinel failover-timeout master001 180000# sentinel notification-script  # sentinel client-reconfig-script  # 可以配置多个master节点################################# master002 #################################  配置文件说明:
  1. port :当前Sentinel服务运行的端口
  2. dir : Sentinel服务运行时使用的临时文件夹
  3.sentinel monitor master001 192.168.110.101 6379 2:Sentinel去监视一个名为master001的主redis实例,这个主实例的IP地址为本机地址192.168.110.101,端口号为6379,而将这个主实例判断为失效至少需要2个 Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行
  4.sentinel down-after-milliseconds master001 30000:指定了Sentinel认为Redis实例已经失效所需的毫秒数。当实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线,这时自动故障迁移才会执行
  5.sentinel parallel-syncs master001 1:指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长
  6.sentinel failover-timeout master001 180000:如果在该时间(ms)内未能完成failover操作,则认为该failover失败
  7.sentinel notification-script  :指定sentinel检测到该监控的redis实例指向的实例异常时,调用的报警脚本。该配置项可选,但是很常用
  2.启动sentinel集群
  创建3个sentinel.conf配置文件:sentinel001.conf、sentinel002.conf、sentinel003.conf并修改端口号分别为:26379、36379、46379,并启动服务:
./redis-sentinel sentinel001.conf./redis-sentinel sentinel002.conf./redis-sentinel sentinel003.conf  启动三个sentinel服务后会在其控制台看到如下信息:
  ./redis-sentinel sentinel001.conf,端口:26379
[7743] 01 Oct 06:20:38.162 # Sentinel runid is ba6c42e1accc31290e11d5876275e1562564295d[7743] 01 Oct 06:20:38.162 # +monitor master master001 192.168.110.101 6379 quorum 2[7743] 01 Oct 06:20:39.110 * +slave slave 192.168.110.102:6379 192.168.110.102 6379 @ master001 192.168.110.101 6379[7743] 01 Oct 06:20:39.111 * +slave slave 192.168.110.103:6379 192.168.110.103 6379 @ master001 192.168.110.101 6379[7743] 01 Oct 06:25:07.595 * +sentinel sentinel 192.168.110.100:36379 192.168.110.100 36379 @ master001 192.168.110.101 6379[7743] 01 Oct 06:26:11.170 * +sentinel sentinel 192.168.110.100:46379 192.168.110.100 46379 @ master001 192.168.110.101 6379  ./redis-sentinel sentinel002.conf,端口:36379
[7795] 01 Oct 06:25:05.538 # Sentinel runid is 52c14768b15837fb601b26328acf150c6bd30682[7795] 01 Oct 06:25:05.538 # +monitor master master001 192.168.110.101 6379 quorum 2[7795] 01 Oct 06:25:06.505 * +slave slave 192.168.110.102:6379 192.168.110.102 6379 @ master001 192.168.110.101 6379[7795] 01 Oct 06:25:06.515 * +slave slave 192.168.110.103:6379 192.168.110.103 6379 @ master001 192.168.110.101 6379[7795] 01 Oct 06:25:07.557 * +sentinel sentinel 192.168.110.100:26379 192.168.110.100 26379 @ master001 192.168.110.101 6379[7795] 01 Oct 06:26:11.168 * +sentinel sentinel 192.168.110.100:46379 192.168.110.100 46379 @ master001 192.168.110.101 6379  ./redis-sentinel sentinel003.conf,端口:46379
[7828] 01 Oct 06:26:09.076 # Sentinel runid is c8509594be4a36660b2122b3b81f4f74060c9b04[7828] 01 Oct 06:26:09.076 # +monitor master master001 192.168.110.101 6379 quorum 2[7828] 01 Oct 06:26:10.063 * +slave slave 192.168.110.102:6379 192.168.110.102 6379 @ master001 192.168.110.101 6379[7828] 01 Oct 06:26:10.071 * +slave slave 192.168.110.103:6379 192.168.110.103 6379 @ master001 192.168.110.101 6379[7828] 01 Oct 06:26:11.516 * +sentinel sentinel 192.168.110.100:26379 192.168.110.100 26379 @ master001 192.168.110.101 6379[7828] 01 Oct 06:26:11.674 * +sentinel sentinel 192.168.110.100:36379 192.168.110.100 36379 @ master001 192.168.110.101 6379  每个sentinel服务能知道其他所有的服务!
  回到顶部
4.测试sentinel集群
  1.停止192.168.110.101主节点
  停止192.168.110.101Redis主节点后,在查看Replication信息如下:
[lizhiwei@localhost bin]$ ./redis-cli -h 192.168.110.101 info Replication          Could not connect to Redis at 192.168.110.101:6379: Connection refused[lizhiwei@localhost bin]$ ./redis-cli -h 192.168.110.102 info Replication # Replicationrole:slavemaster_host:192.168.110.103master_port:6379master_link_status:upmaster_last_io_seconds_ago:1master_sync_in_progress:0slave_repl_offset:29128slave_priority:100slave_read_only:1connected_slaves:0master_repl_offset:0repl_backlog_active:0repl_backlog_size:1048576repl_backlog_first_byte_offset:0repl_backlog_histlen:0[lizhiwei@localhost bin]$ ./redis-cli -h 192.168.110.103 info Replication # Replicationrole:masterconnected_slaves:1slave0:ip=192.168.110.102,port=6379,state=online,offset=30456,lag=1master_repl_offset:30456repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:2repl_backlog_histlen:30455[lizhiwei@localhost bin]$  发现192.168.110.101Redis主节点已经不能连接,192.168.110.103成了主节点!
  2.再启动192.168.110.101主节点
  再启动192.168.110.101Redis主节点后,在查看Replication信息如下:

  •   ### 启动脚本,仍然使用默认配置
  •   [lizhiwei@localhost bin]$ ./redis-server
  •   
  •   [lizhiwei@localhost bin]$ ./redis-cli -h 192.168.110.101 info Replication
  •   # Replication
  •   role:slave
  •   master_host:192.168.110.103
  •   master_port:6379
  •   master_link_status:up
  •   master_last_io_seconds_ago:1
  •   master_sync_in_progress:0
  •   slave_repl_offset:57657
  •   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
  •   
  •   [lizhiwei@localhost bin]$ ./redis-cli -h 192.168.110.102 info Replication
  •   # Replication
  •   role:slave
  •   master_host:192.168.110.103
  •   master_port:6379
  •   master_link_status:up
  •   master_last_io_seconds_ago:0
  •   master_sync_in_progress:0
  •   slave_repl_offset:60751
  •   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
  •   
  •   [lizhiwei@localhost bin]$ ./redis-cli -h 192.168.110.103 info Replication
  •   # Replication
  •   role:master
  •   connected_slaves:2
  •   slave0:ip=192.168.110.102,port=6379,state=online,offset=63247,lag=1
  •   slave1:ip=192.168.110.101,port=6379,state=online,offset=63247,lag=1
  •   master_repl_offset:63393
  •   repl_backlog_active:1
  •   repl_backlog_size:1048576
  •   repl_backlog_first_byte_offset:2
  •   repl_backlog_histlen:63392
  •   [lizhiwei@localhost bin]$
  发现192.168.110.101节点启动后还再集群中,只不过成了从节点,192.168.110.103仍然是主节点,但是现在又有两个从节点了!
  3.只留下一个sentinel服务,再停止192.168.110.103主节点,查看Redis集群是否出现新的主节点
  停止sentinel服务,只留下一个sentinel服务,再停止Redis主节点,查看Replication信息如下:
[lizhiwei@localhost bin]$ ./redis-cli -h 192.168.110.101 info Replication # Replicationrole:slavemaster_host:192.168.110.103master_port:6379master_link_status:downmaster_last_io_seconds_ago:-1master_sync_in_progress:0slave_repl_offset:184231master_link_down_since_seconds:43slave_priority:100slave_read_only:1connected_slaves:0master_repl_offset:0repl_backlog_active:0repl_backlog_size:1048576repl_backlog_first_byte_offset:0repl_backlog_histlen:0[lizhiwei@localhost bin]$ ./redis-cli -h 192.168.110.102 info Replication # Replicationrole:slavemaster_host:192.168.110.103master_port:6379master_link_status:downmaster_last_io_seconds_ago:-1master_sync_in_progress:0slave_repl_offset:184231master_link_down_since_seconds:52slave_priority:100slave_read_only:1connected_slaves:0master_repl_offset:0repl_backlog_active:0repl_backlog_size:1048576repl_backlog_first_byte_offset:0repl_backlog_histlen:0[lizhiwei@localhost bin]$ ./redis-cli -h 192.168.110.103 info Replication Could not connect to Redis at 192.168.110.103:6379: Connection refused  发现192.168.110.103主节点已经不能连接了,也不存在Redis主节点,集群中无主节点了!!!分析原因是:sentinel.conf配置的sentinel monitor master001 192.168.110.101 6379 2最后一个参数是2导致,若是但节点此配置的最后一个参数要使用是1。(此原因我已证实)
  注意:在生产环境下建议sentinel节点的数量能在3个以上,并且最好不要在同一台机器上(使用同一网卡)。
  -------------------------------------------------------------------------------------------------------------------------------



运维网声明 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-630857-1-1.html 上篇帖子: Redis Sentinel 机制与用法(二) 下篇帖子: CentOS 7安装配置Redis数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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