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

[译] Pgpool-II配置参数 - auto_failback

原创 tinge 2022-05-10
2890

原文地址:https://b-peng.blogspot.com/2022/02/auto-failback.html
原文作者:BO PENG(Pgpool-II 贡献者)

Pgpool-II可以监控PostgreSQL的状态,并在检测到故障时自动进行故障转移或退化。

一个健康的备用PostgreSQL服务器可能由于临时的网络问题而从Pgpool-II中分离出来。要重新连接被分离的备用PostgreSQL服务器,您需要确保它是一个健康的备用服务器,然后手动运行pcp_attach_node命令或重新启动Pgpool-II。

从 Pgpool-II 4.1 开始,可以通过启用 auto_failback 来自动重新连接健康的备用 PostgreSQL 服务器。

在这篇文章中,我将介绍如何启用自动故障恢复功能

自动故障恢复

要使用这个自动故障恢复功能,必须启用Pgpool-II的健康检查和流式复制检查。

因为Pgpool-II定期从pg_stat_replication中获取信息,以检查主服务器和备用服务器之间的连接性,所以需要PostgreSQL 9.1或更高版本。

如果满足以下条件,Pgpool-II将连接PostgreSQL服务器。

  • 如果它是一个备用的PostgreSQL服务器
  • 如果PostgreSQL服务器的状态是关闭的(这是由Pgpool-II管理的状态)
  • 如果pg_stat_replication.state是流式的

要启用自动故障恢复,你需要配置以下参数。

auto_failback = on auto_failback_interval health_check_user health_check_password sr_check_user sr_check_password backend_application_name*
复制

配置自动故障恢复

本节显示如何配置自动故障恢复。

本教程假设你已经在两个PostgreSQL服务器之间设置了流式复制,其主机名如下。

  • server1: 主服务器和 Pgpool-II
  • server2:备用的

创建一个PostgreSQL用户
用于流式复制检查的PostgreSQL用户必须是超级用户或具有pg_monitor角色。出于安全考虑,不建议使用超级用户。这里我们创建一个专门的用户 "pgpool "并授予最低权限。

[root@server1 ~]# psql -h server1 -U postgres postgres=# CREATE ROLE pgpool WITH LOGIN IN ROLE pg_monitor;
复制

编辑pg_hba.conf
在本教程中,我们设置信任认证只是为了测试目的。在生产环境中,请按照PostgreSQL和Pgpool-II的文档来配置正确的认证设置。

在 pg_hba.conf 中添加以下条目

host    all         pgpool             samenet                 trust
复制

设置application_name
我们在primary_conninfo设置中把备用服务器的主机名设置为application_name。这个application_name也必须在Pgpool-II的backend_application_name*中指定,它用于识别备用服务器。

primary_conninfo = 'host=server1 port=5432 user=repl application_name=server2'
复制

编辑pgpool.conf
编辑pgpool.conf并添加以下配置

auto_failback = on auto_failback_interval = 1min health_check_period = 10 health_check_user = 'pgpool' sr_check_period = 10 sr_check_user = 'pgpool' backend_hostname0 = 'server1' backend_port0 = 5432 backend_weight0 = 1 backend_data_directory0 = '/var/lib/pgsql/14/data' backend_flag0 = 'ALLOW_TO_FAILOVER' backend_application_name0 = 'server1' backend_hostname1 = 'server2' backend_port1 = 5432 backend_weight1 = 1 backend_data_directory1 = '/var/lib/pgsql/14/data' backend_flag1 = 'ALLOW_TO_FAILOVER' backend_application_name1 = 'server2'
复制

因为PostgreSQL中指定了信任认证,所以不需要设置health_check_password和sr_check_password。如果您希望使用其他认证方法,请按照本教程在Pgpool-II中设置用户密码。

要检查每个备用服务器的pg_stat_replication.state(当前WAL发送器状态),需要backend_application_name*的配置。它必须与primary_conninfo设置中指定的application_name相同。在本教程中,我们使用每个服务器的主机名。

验证自动故障恢复

一旦PostgreSQL和Pgpool-II启动,你可以运行show pool_nodes来检查初始集群状态,主用和备用都已启动,

[root@server1 ~]# psql -h server1 -U postgres -p 9999 -c "show pool_nodes" node_id | hostname | port | status | pg_status | lb_weight | role | pg_role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change ---------+----------+------+--------+-----------+-----------+---------+---------+------------+-------------------+-------------------+-------------------+------------------------+--------------------- 0 | server1 | 5432 | up | up | 0.500000 | primary | primary | 0 | false | 0 | | | 2022-02-28 12:03:18 1 | server2 | 5432 | up | up | 0.500000 | standby | standby | 0 | true | 0 | streaming | async | 2022-02-28 12:04:09
复制

然后,我们停止备用的PostgreSQL服务器。

[root@server2 ~]# su - postgres -c "/usr/pgsql-14/bin/pg_ctl stop -D 14/data"
复制

状态已经向上->向下改变。

[root@server2 ~]# psql -h server1 -U postgres -p 9999 -c "show pool_nodes" node_id | hostname | port | status | pg_status | lb_weight | role | pg_role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change ---------+----------+------+--------+-----------+-----------+---------+---------+------------+-------------------+-------------------+-------------------+------------------------+--------------------- 0 | server1 | 5432 | up | up | 0.500000 | primary | primary | 0 | true | 0 | | | 2022-02-28 12:03:18 1 | server2 | 5432 | down | down | 0.500000 | standby | unknown | 0 | false | 0 | | | 2022-02-28 12:05:30
复制

接下来,重新启动备用的PostgreSQL服务器。

如果你使用复制槽,你可能需要在重新启动备用PostgreSQL服务器之前创建复制槽。

[root@server2 ~]# psql -h server1 -U postgres -c "select * from pg_create_physical_replication_slot('server2')" [root@server2 ~]# su - postgres -c "/usr/pgsql-14/bin/pg_ctl start -D 14/data"
复制

等待大约一分钟,备用服务器重新加入集群,状态变为向上。

[root@server2 ~]# psql -h server1 -U postgres -p 9999 -c "show pool_nodes" node_id | hostname | port | status | pg_status | lb_weight | role | pg_role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_sta tus_change ---------+----------+------+--------+-----------+-----------+---------+---------+------------+-------------------+-------------------+-------------------+------------------------+--------------------- 0 | server1 | 5432 | up | up | 0.500000 | primary | primary | 0 | true | 0 | | | 2022-02-28 12:03:18 1 | server2 | 5432 | up | up | 0.500000 | standby | standby | 0 | false | 0 | streaming | async | 2022-02-28 12:12:12
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

墨天轮编辑部
暂无图片
2年前
评论
暂无图片 0
您好,您已成功参与“墨力翻译计划”(https://www.modb.pro/db/336535),有机会入选“月度最佳译文”🏆 💪加油,辛勤译者、月度翻译官等你角逐!
2年前
暂无图片 点赞
评论