ThingWorx 高可用性 > 使用 Pgpool-II 部署 PostgreSQL HA 的示例 > 9. 为 Pgpool-II 主节点和备用节点配置监视程序服务
9. 为 Pgpool-II 主节点和备用节点配置监视程序服务
步骤 1
将每个 Pgpool-II 节点的 pgpool.conf 编辑为包含相关的监视程序设置和值。
设置
说明
use_watchdog
on
在 Pgpool-II 中打开监视程序
wd_hostname
'10.91.9.101'
或者
'10.91.9.102'
此监视程序的主机名或 IP 地址
wd_port
9000
此监视程序的端口号
delegate_IP
'10.91.9.100'
客户端用于访问 PostgreSQL (通过 Pgpool-II) 的虚拟 IP 地址
ifconfig_path
'/etc/pgpool2'
其中包含 if_up_cmd 和 if_down_cmd 命令或脚本的目录的绝对路径
if_up_cmd
'ifup.sh $_IP_$ <eni id of Pgpool node>'
Pgpool-II 尝试显示地址为 delegate_IP 的虚拟 IP 接口时所发出的命令。可通过登录 EC2 管理控制台并转至 Pgpool-II 实例来检索 Pgpool-II 节点的 eni ID。在此控制台的相应说明中,找到 Network interfaces entry,单击 eth0,然后找到接口 ID。将此 ID 用于 $<eni id of Pgpool node>
if_down_cmd
ifdown.sh $_IP_$ <eni id of Pgpool node>
Pgpool-II 尝试关闭地址为 delegate_IP 的虚拟 IP 接口时所发出的命令。请参阅 if_up_cmd 以获取 Pgpool-II 节点的 eni ID。
arping_path
'/usr/bin'
iputils-arping 包的安装路径
arping_cmd
'arping -U $_IP_$ -w 1'
用于验证 IP 的 arping 命令。
heartbeat_destination0
'10.91.9.102'
或者
'10.91.9.101'
针对其执行检测信号检查的 IP 地址;other_pgpool_hostname0 设置的值
heartbeat_destination_port0
9694
使用默认值。
heartbeat_device
'eth0'
用于检测信号通信 IP 地址的 NIC 设备
other_pgpool_hostname0
'10.91.9.102'
或者
'10.91.9.101'
其他 Pgpool-II 服务器实例的 IP 地址
other_pgpool_port0
5432
其他 Pgpool-II 节点所监听的端口
other_wd_port0
9000
其他 Pgpool-II 监视程序功能所监听的端口
步骤 2
创建要在 pgpool.conf 文件的 if_up_cmd 设置中使用的 ifup.sh 脚本。
1. 将此脚本放置在 /etc/pgpool2 目录中。
2. 确保其归 PostgreSQL 所有且属于 postgres 用户。
3. 确保其权限设置为 755。
4. 此文件应包含以下内容:
#!/bin/bash -x
/sbin/ifconfig eth0:0 inet $1 netmask 255.255.255.0
步骤 3
创建要在 pgpool.conf 文件的 if_down_cmd 设置中使用的 ifdown.sh 脚本。
1. 将此文件放置在 /etc/pgpool2 目录中。
2. 确保其归 PostgreSQL 所有且属于 postgres 用户。
3. 确保其权限设置为 755。
4. 此文件应包含以下内容:
#!bin/bash -x
/sbin/ifconfig eth0:0 down
步骤 4
/root/.ssh 目录中的每个 PostgreSQL 数据库服务器上,设置与 PostgreSQL 用户的 .ssh/authorized_keys 条目相对应的 ssh 公钥。root 用户会运行 HA (以及监视程序) Pgpool-II 进程,并在 PostgreSQL 数据库服务器的故障转移时负责执行 /etc/pgpool2/failover.sh 脚本。
* 
与密钥相关的 Permission Denied 消息将在故障转移期间出现。
步骤 5
在使用监视程序首次启动 Pgpool-II 节点之前,PTC 建议清理或放弃 /var/log/postgresql 目录中的 pgpool_status 文件。这将导致 Pgpool-II 在启动时使用 pgpool.conf 文件中 node0 所配置的 PostgreSQL 数据库。如果发生故障转移,并且主节点与 pgpool.conf 文件中的 node0 条目不匹配,请保留 pgpool_status 文件,因为它会在 Pgpool-II 进程开始到停止的这段期间跟踪当前主数据。
步骤 6
在第一个 Pgpool-II 实例上以 root 用户启动 pgpool 进程。请勿将其作为服务启动。运行下列命令:
sudo su
/usr/sbin/pgpool -n -f /etc/pgpool2/pgpool.conf > ~postgres/pgpool.log
2>&1 &
步骤 7
查看 syslog 中的 Pgpool-II 条目,以验证是否已对监视程序功能进行正确初始化。
more /var/log/syslog | grep pgpool
输出应表明监视程序和 Pgpool-II 已完成初始化并已成功启动。
步骤 8
要在运行 Pgpool-II 的新进程之前清除此日志,PTC 建议首先备份现有 syslog 作为历史参考,然后调用以下命令:
> /var/log/syslog
验证 ~postgres/pgpool.log 文件中是否存在错误条目。验证 Pgpool-II 进程是否已启动。
步骤 9
通过 PostgreSQL HA 部分中指定的默认配置将 pgpool.conf 文件中 num_init_children 设置的值设为 125。这表明,应存在 125 个状态为“等待连接请求”的进程,其中包括一个前缀为 "PCP:" 的进程。在此,还有多个由 Pgpool-II 和监视程序创建的其他进程。
步骤 10
检查接口配置 (ifconfig) 以确保已创建虚拟 IP。验证是否已使用分配给 pgpool.conf 文件中 delegate_IP 设置的 IP 地址创建了新的网络接口。应将其称为 "eth0:0"。
步骤 11
在第二个 Pgpool-II 服务器实例上以 root 用户启动 Pgpool-II 进程。请勿将其作为服务启动。现在,日志应显示已将一个实例已升级为主实例,而另一个实例已成功启动。主实例应报告它已接受来自非主 Pgpool-II 实例的注册请求 (通过其 IP 地址)。
步骤 12
要停止 Pgpool-II 进程,请以 root 身份执行以下命令:
sudo su
/usr/sbin/pgpool --mode=immediate stop