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不可用。
实施步骤
故障转移优先级
修改`failover_priority`为2,并重启Patroni集群。
模拟主库故障,观察具有高优先级的节点成为新主。
修改`synchronous_node_count`为2,观察主库如何切换至优先级更高的节点。
设置failover_priority为 2,重启patroni集群,查看集群状。
vi patroni_halo.yml #修改 failover_priority: 2
#重启patroni
systemctl restart patroni
#查看集群状态
patronictl list
复制夯住主库,patoni切换,failover_priority级别高的会成为新主库。
ps -ef|grep patroni
kill -STOP 1110
复制patronictl edit-config增加参数,查询集群状态,一同步一异步,挂起进程,发现主库切换到Role为sync上,是Sync节点的优先级高于failover_priority节点。
patronictl edit-config修改参数 synchronous_node_count为 2,形成两同步:两个同步节点的情况下 主库总是会迁移到failover_priority级别高的数据库。
DCS故障保护模式
具体操作:
`failsafe_mode`默认为`false`,模拟DCS故障,观察Patroni如何处理。
设置`failsafe_mode`为`true`,重复上述故障模拟,查看Patroni如何保持服务。
具体操作:
参数配置failsafe_mode默认为 false。
夯住三台机器的etcd进程,发现halo数据库,同步降为异步,且不可写。
ps -ef |grep etcd
kill -STOP xxx
复制恢复进程,发现Patroni主备已经切换。
kill -CONT xxxx
patronictl list
复制参数配置patronictl edit-config:修改failsafe_mode为true。
夯住etcd进程,halo数据库,仍然是同步状态,而且可写。
ps -ef |grep etcd
kill -STOP XXXX
select * from pg_stat_replication;
select * from pg_replication_slots;
create table a(id int);
复制恢复进程,主备没有产生切换。
结论
故障转移优先级确保在主节点故障时,具有最高优先级和最多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不可用。
实施步骤
故障转移优先级
修改`failover_priority`为2,并重启Patroni集群。
模拟主库故障,观察具有高优先级的节点成为新主。
修改`synchronous_node_count`为2,观察主库如何切换至优先级更高的节点。
设置failover_priority为 2,重启patroni集群,查看集群状。
vi patroni_halo.yml #修改 failover_priority: 2
#重启patroni
systemctl restart patroni
#查看集群状态
patronictl list
复制夯住主库,patoni切换,failover_priority级别高的会成为新主库。
ps -ef|grep patroni
kill -STOP 1110
复制patronictl edit-config增加参数,查询集群状态,一同步一异步,挂起进程,发现主库切换到Role为sync上,是Sync节点的优先级高于failover_priority节点。
patronictl edit-config修改参数 synchronous_node_count为 2,形成两同步:两个同步节点的情况下 主库总是会迁移到failover_priority级别高的数据库。
DCS故障保护模式
具体操作:
`failsafe_mode`默认为`false`,模拟DCS故障,观察Patroni如何处理。
设置`failsafe_mode`为`true`,重复上述故障模拟,查看Patroni如何保持服务。
具体操作:
参数配置failsafe_mode默认为 false。
夯住三台机器的etcd进程,发现halo数据库,同步降为异步,且不可写。
ps -ef |grep etcd
kill -STOP xxx
复制恢复进程,发现Patroni主备已经切换。
kill -CONT xxxx
patronictl list
复制参数配置patronictl edit-config:修改failsafe_mode为true。
夯住etcd进程,halo数据库,仍然是同步状态,而且可写。
ps -ef |grep etcd
kill -STOP XXXX
select * from pg_stat_replication;
select * from pg_replication_slots;
create table a(id int);
复制恢复进程,主备没有产生切换。
结论
故障转移优先级确保在主节点故障时,具有最高优先级和最多WAL日志的节点成为新主,提供了一种有序的故障恢复策略。而DCS故障保护模式通过`failsafe_mode`的配置,允许管理员在服务连续性和数据一致性之间做出选择。当`failsafe_mode`设为`false`,服务响应速度快但风险较高;设为`true`,则能在DCS故障时维持服务,但可能导致故障恢复延迟。因此,正确配置这些参数对于Patroni集群的健壮性和服务质量至关重要。