美文网首页
Redis哨兵

Redis哨兵

作者: 饱饱想要灵感 | 来源:发表于2023-11-08 20:37 被阅读0次

    一、概念

    Redis哨兵(Sentinel)是Redis官方推荐的高可用解决方案。当运行多个Sentinel时,它们会互相协作,达到一个分布式的系统。哨兵有两个主要的任务:

    1. 监控(Monitoring):哨兵会定期检查主服务器和从服务器是否按照预期正常工作。
    2. 通知(Notification):如果某个Redis节点出现问题,哨兵可以通过API发送通知给系统管理员。
    3. 自动故障迁移(Automatic failover):如果主服务器无法正常工作,那么哨兵可以开始一个故障迁移过程,将其中一个从服务器升级为主服务器,并让其余的从服务器改为复制新的主服务器;当客户端试图连接不可用的主服务器时,哨兵会返回新主服务器的地址,以便客户端重新连接。

    要启动一个哨兵,你需要一个哨兵配置文件,你可以从Redis distribution获取一个样本配置文件,或者创建一个新的。

    在配置文件中,你需要指定主服务器(和从服务器,如果有的话)的地址,以及其他一些哨兵行为的配置选项。

    然后,你可以通过 redis-sentinel /path/to/sentinel.conf 命令启动哨兵。注意,哨兵会在启动后修改配置文件,将状态和其他信息写入文件,所以用户必须确保哨兵进程有写入配置文件的权限。

    二、配置哨兵

    要配置Redis Sentinel模式,您需要遵循以下步骤:

    1. 启动主Redis服务器:首先,我们需要运行主Redis服务器。这可以通过在命令行中键入以下内容来实现:

      redis-server
      

      这将在默认端口6379上启动Redis主服务器。

    2. 启动从Redis服务器:要创建从服务器,我们需要在不同的端口上启动另一个redis-server实例,并通过配置文件或命令行告诉它主服务器的位置。例如,以下命令将在端口6380上启动一个从服务器,主服务器的地址为127.0.0.1端口6379:

      redis-server --port 6380 --slaveof 127.0.0.1 6379
      
    3. 配置Sentinel服务器:Sentinel服务器的配置存储在一个名为sentinel.conf的配置文件中。在最简单的情况下,这个文件可以只包含一行,告诉Sentinel主服务器的位置。例如:

      sentinel monitor mymaster 127.0.0.1 6379 2
      

      这告诉Sentinel监控一个名为"mymaster"的主服务器,该服务器在127.0.0.1的6379端口上运行,并且要求至少有2个Sentinel服务器同意主服务器已经无法访问,才能执行故障转移。

    4. 启动Sentinel服务器:然后,我们可以启动Sentinel服务器。这可以通过在命令行中运行以下命令来实现:

      redis-sentinel /path/to/sentinel.conf
      

      这将启动Sentinel服务器,并使用我们在sentinel.conf中指定的配置。

    5. 添加更多的Sentinel服务器:在生产环境中,通常会运行多个Sentinel服务器,以便在一个Sentinel出现问题时,其他Sentinel可以继续运行。您可以通过更改sentinel.conf文件和端口号,然后运行上面的redis-sentinel命令来启动更多的Sentinel服务器。

    注意:在生产环境中,一般建议至少运行3个Sentinel服务器,以防止“脑裂”现象发生。

    三、sentinel.conf文件

    sentinel.conf文件是用于配置Redis Sentinel的参数和行为的,以下是一些可以在该文件中配置的主要选项:

    1. sentinel monitor <master-name> <ip> <port> <quorum>

      这是监控Redis主服务器的最重要的指令。<master-name>是主服务器的名称,<ip><port>是主服务器的IP地址和端口号,<quorum>是开始故障转移所需的最小Sentinel数量。

    2. sentinel down-after-milliseconds <master-name> <milliseconds>

      这是指定Sentinel认为Redis主服务器已经断开连接所需的毫秒数。

    3. sentinel failover-timeout <master-name> <timeout>

      这是指定开始故障转移之前Sentinel等待的时间。

    4. sentinel parallel-syncs <master-name> <numslaves>

      这是在故障转移期间,可以同时与新主服务器进行同步的从服务器的最大数量。

    5. sentinel auth-pass <master-name> <password>

      如果主服务器需要密码进行连接,则可以使用此参数来设置密码。

    6. sentinel notification-script <master-name> <script-path>

      这是当主服务器状态发生改变时,Sentinel会执行的脚本的路径。

    7. sentinel client-reconfig-script <master-name> <script-path>

      这是当故障转移结束时,Sentinel会执行的脚本的路径。

    这些只是一些基本的配置选项,更多的配置选项可以在Redis官方文档中找到。在配置这些选项时,需要根据您自己的应用和环境来调整合适的值。
    配置举例:

    # 监控名为mymaster的Redis主服务器
    sentinel monitor mymaster 127.0.0.1 6379 2
    
    # 当主服务器无法按照指定的时间间隔发送回复,那么判断主服务器为失效
    sentinel down-after-milliseconds mymaster 30000
    
    # 当主服务器失效后,启动failover
    sentinel failover-timeout mymaster 180000
    
    # 指定密码
    sentinel auth-pass mymaster MySuperSecretPassword
    

    四、哨兵工作原理

    Redis哨兵的工作原理如下:

    1. 服务监控:哨兵通过定期发送ping命令来监控master和slave服务的运行状态。
    2. 主服务失效判断:当哨兵连续一段时间(比如10次,时间间隔约1秒)收不到master实例的pong响应,哨兵就会判断master实例为主观下线。当超过半数的哨兵节点都判断master实例为主观下线时,哨兵集群就会判断master实例为客观下线。
    3. 服务选举:如果master实例为客观下线,哨兵会从slave实例中选举出一个最优的slave实例进行升级,选举规则包括:优先选择复制偏移量最大的slave,如果偏移量相同,则选择run id最小的slave,选举出的slave实例会升级为新的master实例。
    4. 配置更新:当发生主从切换时,哨兵会通知其他的slave实例和哨兵实例,让它们更新自己的配置,将升级后的master实例地址替换为新的master实例。
    5. 客户端通知:客户端订阅哨兵的消息,当发生主从切换时,哨兵会通知客户端。

    哨兵的工作原理保证了Redis集群的高可用性,当master实例失败时,能够自动进行故障转移,将影响降到最低。

    相关文章

      网友评论

          本文标题:Redis哨兵

          本文链接:https://www.haomeiwen.com/subject/tegqwdtx.html