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

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

贾桂权 2024-09-03
110

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 tag 下: 

    failover_priority: 2 

    --重启 patroni 集群 

    systemctl restart patroni 

    --查看集群状态 

    patronictl list



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

ps -ef|grep patroni 

kill -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 

    --查看状态 patronictl list


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

    ps -ef |grep etcd 

    kill -STOP xxx


    (3) 恢复进程,发现 Patroni 主备已经切换 

    kill -CONT xxxx 

    patronictl list


    (4) 参数配置 patronictl edit-config 

    failsafe_mode: true 

    patronictl reload halo-cluster 

    --查看状态


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

    ps -ef |grep etcd 

    kill -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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论