ThingWorx 高可用性 > PostgreSQL 高可用性 > 安装和配置 PostgreSQL HA
安装和配置 PostgreSQL HA
以下提供的指南旨在支持上图的实施。它们适用于实施 PostgreSQL HA 部署的 PostgreSQL 管理员和用户。
作为参考, 使用 Pgpool-II 部署 PostgreSQL HA 的示例包含用于实施此解决方案的下载、命令行序列和脚本的示例演练。
参考文档
安装 PostgreSQL 之前,请阅读并了解所有安装和配置文档,包括所需必备软件的文档。重点是了解和应用正确的设置,其中包括安全建议。
以下链接将为使用流式复制和 Pgpool-II 进行节点管理的 PostgreSQL HA 的安装和配置提供有用信息。
安装 PostgreSQL 并在 PostgreSQL 中创建新用户角色
《安装 ThingWorx》指南中提供了有关安装和配置 PostgreSQL 的说明。有关要部署的 ThingWorx 特定版本的信息,请参阅安装指南。必须在所有三个 PostgreSQL 节点上执行相同的安装和配置任务。
配置和执行 PostgreSQL 数据库脚本
《安装 ThingWorx》指南中提供了有关在 PostgreSQL 中构建数据库的说明。有关要部署的 ThingWorx 特定版本的信息,请参阅安装指南。应在所有三个 PostgreSQL 节点上执行相同的安装和配置任务。
配置并执行模型/数据提供程序架构脚本
《安装 ThingWorx》指南中提供了在 PostgreSQL 中构建 ThingWorx 架构的说明。有关要部署的 ThingWorx 特定版本的信息,请参阅安装指南。应在所有三个 PostgreSQL 节点上执行相同的配置任务。
在所有 PostgreSQL 节点上创建复制用户
在所有节点上创建 PostgreSQL 用户,以管理复制任务。必须使用相同的用户名和密码。
将复制参数添加到所有 PostgreSQL 节点
下表包含控制其复制服务的 PostgreSQL 参数。
* 
配置列中的值反映了参考体系结构中的示例部署,但可以根据您的环境进行修改。针对下表中的许多设置提供了链接,以便帮助确定适合您的环境的配置值。
设置
配置
说明
listen_addresses
‘*’
监听所有网络接口。在某些情况下,如果存在多个网络接口,则最好将其限制为特定的网络接口。
端口
5432
这是默认端口号。
max_connections
150
PostgreSQL 中的默认值为 100。ThingWorx 中的默认设置也是 100 (maxpoolsize)。根据数据库中预期的并发连接总数增加此数目。此值应始终高于 ThingWorx platform-settings.json 文件中的 maxpoolsize 设置。
shared_buffers
1024MB
可选性能调节。设置数据库服务器用于共享内存缓冲区的内存量。建议将此值设置为计算机可用内存的四分之一。请参阅 资源消耗 > 内存
work_mem
32MB
可选性能调节。指定写入临时磁盘文件之前,用于内部排序操作和哈希表的内存量。请参阅 资源消耗 > 内存。向下滚动至 work_mem。
maintenance_work_mem
512MB
可选性能调节。指定用于维修操作的最大内存量。请参阅 资源消耗 _ 内存。此选项刚好在 work_mem 后显示。
wal_level
枚举
可选性能调节。指定用于维修操作的最大内存量。请参阅 预写日志 > 设置
synchronous_commit
on
转至 预写日志 > 设置,然后向下滚动至 synchronous_commit (枚举)。
archive_mode
on
archive_command
‘cd .’
转至 预写日志 > 存档,然后向下滚动至 archive_command (字符串)。
max_wal_size
10
转至 预写日志,然后单击存档链接。向上滚动至 max_wal_size (整数)。有关 WAL 配置的详细信息,请参阅 PostgreSQL 10 文档中的 WAL 配置
synchronous_standby_names
node1、node2 或 node2、node0 或 node0、node1
以逗号分隔列表的形式添加在其 recovery.conf 文件中指定的其他节点的 "application_name"。请参阅 预写日志的设置部分中的 synchronous_commit。
hot_standby
true/false
有关此模式的信息,请参阅 热备用
fsync
on
转至 预写日志 > 设置,然后向下滚动至 fsync。
检查点设置
有关检查点设置的信息,请参阅 检查点
建立 start_replication 和 retargetMaster 脚本
在每个节点上,建立一个脚本以激活复制服务,并确保 PostgreSQL 节点与系统同步。
此外,在每个节点上,建立一个可创建和实现 recovery.conf 文件的脚本。recovery.conf 文件应包含所需的更改,从而根据所发生的故障调整哪个节点用作主节点、哪个节点用作备用节点。
调整所有 PostgreSQL 节点的外部连接参数
修改每个 pg_hba.conf 文件中的参数,以允许用户和数据库存储要通过 IP 访问的 ThingWorx 数据。此 IP 将连接到数据库。
* 
如果从 Pgpool-II 进行连接,请验证身份验证访问权限是否符合 此处所存档的 Pgpool-II 文档 (md5 或 trust)。
有关 pg_hba 文件的其他信息,请参阅 PostgreSQL 10 文档中的 pg_hba 文件
重新启动 PostgreSQL 服务以启动复制
重新启动一个序列中的所有 PostgreSQL 节点,从而控制哪个节点是主节点 (首先启动)、哪个是主要备用节点 (第二个启动)、哪个是第三个节点 (最后一个启动)。
对于主节点,启动 PostgreSQL 服务。
对于主要备用节点,首先执行 start_replication 脚本以使其与主节点同步。然后启动 PostgreSQL 服务。
对于第二个备用节点,首先执行 start_replication 脚本以使其与主要备用节点同步。然后启动 PostgreSQL 服务。
安装 Pgpool-II 节点
安装 Pgpool 之前,请阅读并料所有安装文档,包括任何所需必备软件的文档。重点是了解和应用正确的设置,其中包括安全建议。
Pgpool-II 的下载信息可在此处找到:
有关安装 Pgpool-II 的说明,请参阅操作系统文档。应在运行 Pgpool-II 服务的所有节点上安装相同版本的 Pgpool。
配置 Pgpool-II 节点
下表包含要针对 Pgpool-II 安装进行修改的参数。所有 Pgpool-II 参数均保留在 pgpool.conf 文件中。这些属性和值应添加到所有 Pgpool-II 节点。
设置
说明
listen_addresses
‘*’
选取允许 ThingWorx 应用程序的模型提供程序连接到 Pgpool-II 的值,无论其位于相同的服务器还是不同的服务器上。
port
5432
用于监听客户端连接的 TCP 端口
pcp_listen_address
*
用于端口控制协议 (PCP) 连接的 IP/主机筛选器 (*允许全部)
pcp_port
9898
用于监听 PCP 连接的 TCP 端口
backend_hostname
backend_port
backend_weight
backend_data_directory
backend_flag
<ip of backend#>
<port of backend#>
1
/var/lib/postgresql/10.x/main
ALLOW_TO_FAILOVER
为所有三个节点 (主节点和两个备用节点) 设置这些后端配置值。例如,backend_hostname0 是主节点,backend_hostname1 是备用节点,依此类推。有关详细信息,请参阅 PostgreSQL 在线文档
enable_pool_hba
on
启用 pool_hba.conf
master_slave_mode
on
这将通知 Postgres 您正在使用主/备用复制。
load_balance_mode
off
* 
PTC 不建议使用 ThingWorx 负载平衡。
master_slave_sub_mode
stream
这将通知 Pgpool-II 使用出厂 PostgreSQL 流式复制。
replication_mode
off
请不要使用 Pgpool-II 的复制,而是使用出厂 PostgreSQL 流式复制。
sr_check_period
10
流式复制延迟 (单位:秒)
sr_check_user
replicator
流式复制用户
sr_check_password
replicator
流式复制密码
sr_check_database
postgres
流式复制数据库
health_check_user
postgres
故障转移健康检查用户
health_check_password
postgres
故障转移健康检查密码
health_check_database
postgres
故障转移健康检查数据库
failover_command
/etc/pgpool2/failover.sh %d %h %D %m %H %R %M %P
有关此设置的详细信息,请参阅下面的 failover_command 部分。
另请参阅附录 C 中的以下示例脚本:
failover.sh
retargetMaster_001.sh
retargetMaster_002.sh
retargetMaster_003.sh
num_init_children
max_pool
max_child_connections
superuser_reserved_connections
性能调节参数。这些设置与 Pgpool-II 的连接池功能相关。请确保在启动时提供足够的连接,以满足特定最大批量流量吞吐量需要,并且不会超过 PostgreSQL DB 节点的最大连接设置。如需相关建议以及用于计算值的公式,请参阅手册的“池”部分 (请参阅上方的链接)
* 
确保 num_init_children 大于 modelproviderconfig.json 中的 maxpoolsizepostgresql.conf 中的 max_connections 大于 num_init_children 设置。
配置 PostgreSQL 故障转移脚本
在每个 Pgpool-II 节点内建立故障转移脚本,Pgpool-II 服务将在检测到故障时调用该脚本。此脚本应包含要针对任何 PostgreSQL 节点故障执行的逻辑和任务。
更新 PCP 配置
更新 pool_hba.conf 文件将识别所有 ThingWorx 服务器。
对于 PostgreSQL 的 ThingWorx 请求,Pgpool-II 将使用 ThingWorx 凭据连接到 PostgreSQL 节点,以保持已建立的访问权限和限制。pool_hba.conf 文件与 pg_hba.conf 使用相同的格式、身份验证方法和身份验证选项 (md5、trust 等)。
有关配置 pool_hba.conf 的详细信息,请访问此处。
更新客户端身份验证
更新 pool_hba.conf 文件将识别所有 ThingWorx 服务器。
对于 PostgreSQL 的 ThingWorx 请求,Pgpool-II 将使用 ThingWorx 凭据连接到 PostgreSQL 节点,以保持已建立的访问权限和限制。pool_hba.conf 文件与 pg_hba.conf 使用相同的格式、身份验证方法和身份验证选项 (md5、trust 等)。
有关配置 pool_hba.conf 的详细信息,请访问此处。
为 Pgpool-II 配置故障转移
在高可用性配置中,Pgpool-II 在主动/被动操作中运行,通常具有一个活动的 Pgpool-II 节点和一个备用节点。Pgpool-II 提供监控节点健康状况的监视程序,并在主要节点发生故障时激活备用节点。
有关配置监视程序详细信息,请参阅 Pgpool 文档 ( http://www.pgpool.net/docs/latest/en/html/example-watchdog.html)。
下表包含在 Pgpool-II 中配置监视程序时要考虑的设置和值。这些设置和值应添加到每个 Pgpool-II 节点的 pgpool.conf 文件中。
设置
说明
use_watchdog
on
在 Pgpool-II 中打开监视程序
wd_hostname
'{IP address of this Pgpool-II node}'
此监视程序的主机名或 IP 地址
wd_port
9000
此监视程序的端口号
delegate_IP
'{Virtual IP address to access PostgreSQL}'
客户端用于访问 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 条目,单击 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
'{IP address of the other Pgpool-II node}'
针对其执行检测信号检查的 IP 地址;other_pgpool_hostname0 设置的值
heartbeat_destination_port0
9694
使用默认值。
heartbeat_device
'eth0'
用于检测信号通信 IP 地址的 NIC 设备
other_pgpool_hostname0
'{IP address of the other Pgpool-II node}'
其他 Pgpool-II 服务器实例的 IP 地址
other_pgpool_port0
5432
其他 Pgpool-II 节点所监听的端口
other_wd_port0
9000
其他 Pgpool-II 监视程序功能所监听的端口