暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Halo数据库-测试故障转移优先级和DCS故障保护模式

陈佳琪 2024-07-22
49

Patroni 运用 etcd 集群存储、检测Halo 主从节点的状态与配置信息,当该故障节点是主节点,Patroni 自动进行切换,从而减少对式数据库集群的影响。下文针对故障自动转移优先级以及DCS故障保护模式进行部分场景实践。

原理

    故障转移优先级是Patroni集群中用于控制故障发生时节点晋升为主节点的策略。通过设置`failover_priority`属性,可以指定在主节点出问题时,哪些节点有更高的优先级来接管。当`failover_priority`为正数,节点参与领导者竞赛;为0或负数,则不参与。`synchronous_node_count`用于设置同步复制的节点数量,优先级较高的同步节点将作为主节点。


同步

图片


异步

图片

优先级sync >  failover_priority


    DCS(分布式协调服务)故障保护模式是Patroni在面对DCS服务不可用时的行为策略。`failsafe_mode`参数决定了Patroni在DCS故障时是否维持当前集群状态或尝试执行故障转移。默认为`false`,此时Patroni依赖DCS,DCS故障可能导致服务变为只读或暂停;设为`true`时,Patroni将尽可能保持当前集群配置,即使DCS不可用。

图片


实施步骤

  1. 故障转移优先级

    • 修改`failover_priority`为2,并重启Patroni集群。

    • 模拟主库故障,观察具有高优先级的节点成为新主。

    • 修改`synchronous_node_count`为2,观察主库如何切换至优先级更高的节点。


    具体操作:

    1. 设置failover_priority为 2,重启patroni集群,查看集群状。

      vi patroni_halo.yml #修改 failover_priority: 2#重启patronisystemctl restart patroni#查看集群状态patronictl list
      复制

      图片


    2. 夯住主库,patoni切换,failover_priority级别高的会成为新主库。

      ps -ef|grep patronikill -STOP 1110
      复制

      图片


    3. patronictl edit-config增加参数,查询集群状态,一同步一异步,挂起进程,发现主库切换到Role为sync上,是Sync节点的优先级高于failover_priority节点。

      图片


    4. patronictl edit-config修改参数 synchronous_node_count为 2,形成两同步:两个同步节点的情况下 主库总是会迁移到failover_priority级别高的数据库。

      图片


  2. DCS故障保护模式       

    • `failsafe_mode`默认为`false`,模拟DCS故障,观察Patroni如何处理。

    • 设置`failsafe_mode`为`true`,重复上述故障模拟,查看Patroni如何保持服务。


    具体操作:

    1. 参数配置failsafe_mode默认为 false。

      图片


    2. 夯住三台机器的etcd进程,发现halo数据库,同步降为异步,且不可写。

      ps -ef |grep etcdkill -STOP  xxx
      复制

      图片


    3. 恢复进程,发现Patroni主备已经切换。

      kill -CONT xxxxpatronictl list
      复制

      图片


    4. 参数配置patronictl edit-config:修改failsafe_mode为true。

      图片


    5. 夯住etcd进程,halo数据库,仍然是同步状态,而且可写。

      ps -ef |grep etcdkill -STOP XXXX  select * from pg_stat_replication;select * from pg_replication_slots;create table a(id int);
      复制

      图片


    6. 恢复进程,主备没有产生切换。

    图片


结论

    故障转移优先级确保在主节点故障时,具有最高优先级和最多WAL日志的节点成为新主,提供了一种有序的故障恢复策略。而DCS故障保护模式通过`failsafe_mode`的配置,允许管理员在服务连续性和数据一致性之间做出选择。当`failsafe_mode`设为`false`,服务响应速度快但风险较高;设为`true`,则能在DCS故障时维持服务,但可能导致故障恢复延迟。因此,正确配置这些参数对于Patroni集群的健壮性和服务质量至关重要。    Patroni 运用 etcd 集群存储、检测Halo 主从节点的状态与配置信息,当该故障节点是主节点,Patroni 自动进行切换,从而减少对式数据库集群的影响。下文针对故障自动转移优先级以及DCS故障保护模式进行部分场景实践。

原理

    故障转移优先级是Patroni集群中用于控制故障发生时节点晋升为主节点的策略。通过设置`failover_priority`属性,可以指定在主节点出问题时,哪些节点有更高的优先级来接管。当`failover_priority`为正数,节点参与领导者竞赛;为0或负数,则不参与。`synchronous_node_count`用于设置同步复制的节点数量,优先级较高的同步节点将作为主节点。


同步

图片


异步

图片

优先级sync >  failover_priority


    DCS(分布式协调服务)故障保护模式是Patroni在面对DCS服务不可用时的行为策略。`failsafe_mode`参数决定了Patroni在DCS故障时是否维持当前集群状态或尝试执行故障转移。默认为`false`,此时Patroni依赖DCS,DCS故障可能导致服务变为只读或暂停;设为`true`时,Patroni将尽可能保持当前集群配置,即使DCS不可用。

图片


实施步骤

  1. 故障转移优先级

    • 修改`failover_priority`为2,并重启Patroni集群。

    • 模拟主库故障,观察具有高优先级的节点成为新主。

    • 修改`synchronous_node_count`为2,观察主库如何切换至优先级更高的节点。


    具体操作:

    1. 设置failover_priority为 2,重启patroni集群,查看集群状。

      vi patroni_halo.yml #修改 failover_priority: 2#重启patronisystemctl restart patroni#查看集群状态patronictl list
      复制

      图片


    2. 夯住主库,patoni切换,failover_priority级别高的会成为新主库。

      ps -ef|grep patronikill -STOP 1110
      复制

      图片


    3. patronictl edit-config增加参数,查询集群状态,一同步一异步,挂起进程,发现主库切换到Role为sync上,是Sync节点的优先级高于failover_priority节点。

      图片


    4. patronictl edit-config修改参数 synchronous_node_count为 2,形成两同步:两个同步节点的情况下 主库总是会迁移到failover_priority级别高的数据库。

      图片


  2. DCS故障保护模式       

    • `failsafe_mode`默认为`false`,模拟DCS故障,观察Patroni如何处理。

    • 设置`failsafe_mode`为`true`,重复上述故障模拟,查看Patroni如何保持服务。


    具体操作:

    1. 参数配置failsafe_mode默认为 false。

      图片


    2. 夯住三台机器的etcd进程,发现halo数据库,同步降为异步,且不可写。

      ps -ef |grep etcdkill -STOP  xxx
      复制

      图片


    3. 恢复进程,发现Patroni主备已经切换。

      kill -CONT xxxxpatronictl list
      复制

      图片


    4. 参数配置patronictl edit-config:修改failsafe_mode为true。

      图片


    5. 夯住etcd进程,halo数据库,仍然是同步状态,而且可写。

      ps -ef |grep etcdkill -STOP XXXX  select * from pg_stat_replication;select * from pg_replication_slots;create table a(id int);
      复制

      图片


    6. 恢复进程,主备没有产生切换。

    图片


结论

    故障转移优先级确保在主节点故障时,具有最高优先级和最多WAL日志的节点成为新主,提供了一种有序的故障恢复策略。而DCS故障保护模式通过`failsafe_mode`的配置,允许管理员在服务连续性和数据一致性之间做出选择。当`failsafe_mode`设为`false`,服务响应速度快但风险较高;设为`true`,则能在DCS故障时维持服务,但可能导致故障恢复延迟。因此,正确配置这些参数对于Patroni集群的健壮性和服务质量至关重要。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论