zoukankan      html  css  js  c++  java
  • 02.Redis主从集群的Sentinel配置

     

    1.集群环境

    1.Linux服务器列表
    使用4台CentOS Linux服务器搭建环境,其IP地址如下:
    1. 192.168.110.100
    2. 192.168.110.101
    3. 192.168.110.102
    4. 192.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配置文件修改如下:
    1. # Master-Slave replication. Use slaveof to make a Redis instance a copy of
    2. # another Redis server. A few things to understand ASAP about Redis replication.
    3. #
    4. # 1) Redis replication is asynchronous, but you can configure a master to
    5. # stop accepting writes if it appears to be not connected with at least
    6. # a given number of slaves.
    7. # 2) Redis slaves are able to perform a partial resynchronization with the
    8. # master if the replication link is lost for a relatively small amount of
    9. # time. You may want to configure the replication backlog size (see the next
    10. # sections of this file) with a sensible value depending on your needs.
    11. # 3) Replication is automatic and does not need user intervention. After a
    12. # network partition slaves automatically try to reconnect to masters
    13. # and resynchronize with them.
    14. #
    15. # 主从同步。通过 slaveof 配置来实现Redis实例的备份。
    16. # 注意,这里是本地从远端复制数据。也就是说,本地可以有不同的数据库文件、绑定不同的IP、监听不同的端口。
    17. #
    18. # slaveof <masterip> <masterport>
    19. slaveof 192.168.110.1016379
    注意:两台从节点都要改。
    2.启动Redis主从集群
    先启动192.168.110.101主节点,使用默认配置,脚本:
    1. [wch@localhost bin]./redis-server
    再启动192.168.110.102和192.168.110.103从节点,使用刚才的配置,脚本:
    1. ./redis-server redis.conf
    3.查看集群
    192.168.110.101主节点Replication信息
    1. [wch@localhost bin]./redis-cli -192.168.110.101 info Replication
    2. # Replication
    3. role:master
    4. connected_slaves:2
    5. slave0:ip=192.168.110.102,port=6379,state=online,offset=659,lag=1
    6. slave1:ip=192.168.110.103,port=6379,state=online,offset=659,lag=0
    7. master_repl_offset:659
    8. repl_backlog_active:1
    9. repl_backlog_size:1048576
    10. repl_backlog_first_byte_offset:2
    11. repl_backlog_histlen:658
    192.168.110.102从节点Replication信息
    1. [wch@localhost bin]./redis-cli -192.168.110.102 info Replication
    2. # Replication
    3. role:slave
    4. master_host:192.168.110.101
    5. master_port:6379
    6. master_link_status:up
    7. master_last_io_seconds_ago:3
    8. master_sync_in_progress:0
    9. slave_repl_offset:701
    10. slave_priority:100
    11. slave_read_only:1
    12. connected_slaves:0
    13. master_repl_offset:0
    14. repl_backlog_active:0
    15. repl_backlog_size:1048576
    16. repl_backlog_first_byte_offset:0
    17. repl_backlog_histlen:0
    192.168.110.103从节点Replication信息
    1. [wch@localhost bin]./redis-cli -192.168.110.103 info Replication
    2. # Replication
    3. role:slave
    4. master_host:192.168.110.101
    5. master_port:6379
    6. master_link_status:up
    7. master_last_io_seconds_ago:9
    8. master_sync_in_progress:0
    9. slave_repl_offset:715
    10. slave_priority:100
    11. slave_read_only:1
    12. connected_slaves:0
    13. master_repl_offset:0
    14. repl_backlog_active:0
    15. repl_backlog_size:1048576
    16. repl_backlog_first_byte_offset:0
    17. repl_backlog_histlen:0
    此时,存储到192.168.110.101主节点的数据,在从节点中都可以查询到。从节点会备份主节点的数据。

    3.配置sentinel集群并启动

    1.创建sentinel.conf配置文件
    1. port 26379
    2. # sentinel announce-ip <ip>
    3. # sentinel announce-port <port>
    4. dir /tmp
    5. ################################# master001 #################################
    6. sentinel monitor master001 192.168.110.10163792
    7. # sentinel auth-pass <master-name> <password>
    8. sentinel down-after-milliseconds master001 30000
    9. sentinel parallel-syncs master001 1
    10. sentinel failover-timeout master001 180000
    11. # sentinel notification-script <master-name> <script-path>
    12. # sentinel client-reconfig-script <master-name> <script-path>
    13. # 可以配置多个master节点
    14. ################################# master002 #################################
    配置文件说明:
    1. port :当前Sentinel服务运行的端口
     
    2. dir : Sentinel服务运行时使用的临时文件夹
     
    3.sentinel monitor master001 192.168.110.10163792: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 <master-name> <script-path>:指定sentinel检测到该监控的redis实例指向的实例异常时,调用的报警脚本。该配置项可选,但是很常用
    2.启动sentinel集群
    创建3个sentinel.conf配置文件:sentinel001.conf、sentinel002.conf、sentinel003.conf并修改端口号分别为:26379、36379、46379,并启动服务:
    1. ./redis-sentinel sentinel001.conf
    2. ./redis-sentinel sentinel002.conf
    3. ./redis-sentinel sentinel003.conf
    启动三个sentinel服务后会在其控制台看到如下信息:
    ./redis-sentinel sentinel001.conf,端口:26379
    1. [7743]01Oct06:20:38.162# Sentinel runid is ba6c42e1accc31290e11d5876275e1562564295d
    2. [7743]01Oct06:20:38.162# +monitor master master001 192.168.110.101 6379 quorum 2
    3. [7743]01Oct06:20:39.110*+slave slave 192.168.110.102:6379192.168.110.1026379@ master001 192.168.110.1016379
    4. [7743]01Oct06:20:39.111*+slave slave 192.168.110.103:6379192.168.110.1036379@ master001 192.168.110.1016379
    5. [7743]01Oct06:25:07.595*+sentinel sentinel 192.168.110.100:36379192.168.110.10036379@ master001 192.168.110.1016379
    6. [7743]01Oct06:26:11.170*+sentinel sentinel 192.168.110.100:46379192.168.110.10046379@ master001 192.168.110.1016379
    ./redis-sentinel sentinel002.conf,端口:36379
    1. [7795]01Oct06:25:05.538# Sentinel runid is 52c14768b15837fb601b26328acf150c6bd30682
    2. [7795]01Oct06:25:05.538# +monitor master master001 192.168.110.101 6379 quorum 2
    3. [7795]01Oct06:25:06.505*+slave slave 192.168.110.102:6379192.168.110.1026379@ master001 192.168.110.1016379
    4. [7795]01Oct06:25:06.515*+slave slave 192.168.110.103:6379192.168.110.1036379@ master001 192.168.110.1016379
    5. [7795]01Oct06:25:07.557*+sentinel sentinel 192.168.110.100:26379192.168.110.10026379@ master001 192.168.110.1016379
    6. [7795]01Oct06:26:11.168*+sentinel sentinel 192.168.110.100:46379192.168.110.10046379@ master001 192.168.110.1016379
    ./redis-sentinel sentinel003.conf,端口:46379
    1. [7828]01Oct06:26:09.076# Sentinel runid is c8509594be4a36660b2122b3b81f4f74060c9b04
    2. [7828]01Oct06:26:09.076# +monitor master master001 192.168.110.101 6379 quorum 2
    3. [7828]01Oct06:26:10.063*+slave slave 192.168.110.102:6379192.168.110.1026379@ master001 192.168.110.1016379
    4. [7828]01Oct06:26:10.071*+slave slave 192.168.110.103:6379192.168.110.1036379@ master001 192.168.110.1016379
    5. [7828]01Oct06:26:11.516*+sentinel sentinel 192.168.110.100:26379192.168.110.10026379@ master001 192.168.110.1016379
    6. [7828]01Oct06:26:11.674*+sentinel sentinel 192.168.110.100:36379192.168.110.10036379@ master001 192.168.110.1016379
    每个sentinel服务能知道其他所有的服务!

    4.测试sentinel集群

    1.停止192.168.110.101主节点
    停止192.168.110.101Redis主节点后,在查看Replication信息如下:
    1. [wch@localhost bin]./redis-cli -192.168.110.101 info Replication
    2. Could not connect to Redis at 192.168.110.101:6379:Connection refused
    3. [wch@localhost bin]./redis-cli -192.168.110.102 info Replication
    4. # Replication
    5. role:slave
    6. master_host:192.168.110.103
    7. master_port:6379
    8. master_link_status:up
    9. master_last_io_seconds_ago:1
    10. master_sync_in_progress:0
    11. slave_repl_offset:29128
    12. slave_priority:100
    13. slave_read_only:1
    14. connected_slaves:0
    15. master_repl_offset:0
    16. repl_backlog_active:0
    17. repl_backlog_size:1048576
    18. repl_backlog_first_byte_offset:0
    19. repl_backlog_histlen:0
    20. [wch@localhost bin]./redis-cli -192.168.110.103 info Replication
    21. # Replication
    22. role:master
    23. connected_slaves:1
    24. slave0:ip=192.168.110.102,port=6379,state=online,offset=30456,lag=1
    25. master_repl_offset:30456
    26. repl_backlog_active:1
    27. repl_backlog_size:1048576
    28. repl_backlog_first_byte_offset:2
    29. repl_backlog_histlen:30455
    30. [wch@localhost bin]$
    发现192.168.110.101Redis主节点已经不能连接,192.168.110.103成了主节点!
    2.再启动192.168.110.101主节点
    再启动192.168.110.101Redis主节点后,在查看Replication信息如下:
    1. ### 启动脚本,仍然使用默认配置
    2. [wch@localhost bin]./redis-server
    3. [wch@localhost bin]./redis-cli -192.168.110.101 info Replication
    4. # Replication
    5. role:slave
    6. master_host:192.168.110.103
    7. master_port:6379
    8. master_link_status:up
    9. master_last_io_seconds_ago:1
    10. master_sync_in_progress:0
    11. slave_repl_offset:57657
    12. slave_priority:100
    13. slave_read_only:1
    14. connected_slaves:0
    15. master_repl_offset:0
    16. repl_backlog_active:0
    17. repl_backlog_size:1048576
    18. repl_backlog_first_byte_offset:0
    19. repl_backlog_histlen:0
    20.  
    21. [wch@localhost bin]./redis-cli -192.168.110.102 info Replication
    22. # Replication
    23. role:slave
    24. master_host:192.168.110.103
    25. master_port:6379
    26. master_link_status:up
    27. master_last_io_seconds_ago:0
    28. master_sync_in_progress:0
    29. slave_repl_offset:60751
    30. slave_priority:100
    31. slave_read_only:1
    32. connected_slaves:0
    33. master_repl_offset:0
    34. repl_backlog_active:0
    35. repl_backlog_size:1048576
    36. repl_backlog_first_byte_offset:0
    37. repl_backlog_histlen:0
    38.  
    39. [wch@localhost bin]./redis-cli -192.168.110.103 info Replication
    40. # Replication
    41. role:master
    42. connected_slaves:2
    43. slave0:ip=192.168.110.102,port=6379,state=online,offset=63247,lag=1
    44. slave1:ip=192.168.110.101,port=6379,state=online,offset=63247,lag=1
    45. master_repl_offset:63393
    46. repl_backlog_active:1
    47. repl_backlog_size:1048576
    48. repl_backlog_first_byte_offset:2
    49. repl_backlog_histlen:63392
    50. [wch@localhost bin]$
    发现192.168.110.101节点启动后还再集群中,只不过成了从节点,192.168.110.103仍然是主节点,但是现在又有两个从节点了!
    3.只留下一个sentinel服务,再停止192.168.110.103主节点,查看Redis集群是否出现新的主节点
    停止sentinel服务,只留下一个sentinel服务,再停止Redis主节点,查看Replication信息如下:
    1. [wch@localhost bin]./redis-cli -192.168.110.101 info Replication
    2. # Replication
    3. role:slave
    4. master_host:192.168.110.103
    5. master_port:6379
    6. master_link_status:down
    7. master_last_io_seconds_ago:-1
    8. master_sync_in_progress:0
    9. slave_repl_offset:184231
    10. master_link_down_since_seconds:43
    11. slave_priority:100
    12. slave_read_only:1
    13. connected_slaves:0
    14. master_repl_offset:0
    15. repl_backlog_active:0
    16. repl_backlog_size:1048576
    17. repl_backlog_first_byte_offset:0
    18. repl_backlog_histlen:0
    19. [wch@localhost bin]./redis-cli -192.168.110.102 info Replication
    20. # Replication
    21. role:slave
    22. master_host:192.168.110.103
    23. master_port:6379
    24. master_link_status:down
    25. master_last_io_seconds_ago:-1
    26. master_sync_in_progress:0
    27. slave_repl_offset:184231
    28. master_link_down_since_seconds:52
    29. slave_priority:100
    30. slave_read_only:1
    31. connected_slaves:0
    32. master_repl_offset:0
    33. repl_backlog_active:0
    34. repl_backlog_size:1048576
    35. repl_backlog_first_byte_offset:0
    36. repl_backlog_histlen:0
    37. [wch@localhost bin]./redis-cli -192.168.110.103 info Replication
    38. 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.10163792最后一个参数是2导致,若是但节点此配置的最后一个参数要使用是1。(此原因我已证实)
    注意:在生产环境下建议sentinel节点的数量能在3个以上,并且最好不要在同一台机器上(使用同一网卡)。
    -------------------------------------------------------------------------------------------------------------------------------



  • 相关阅读:
    【Nginx】Nginx性能优化及配置文件
    【算法】常见算法分类和思想
    【PHP】php位运算及其高级应用
    【数据结构】数据结构-图的基本概念
    【Redis】Redis缓存穿透解决方案之布隆过滤器
    【Linux】Linux系统5种IO模型
    【linux】/dev/null作用和/dev/random
    【Linux】Linux查找功能
    【算法】算法复杂度
    Docker Hub公共镜像仓库的使用
  • 原文地址:https://www.cnblogs.com/zxtceq/p/7344061.html
Copyright © 2011-2022 走看看