构建高可用PostgreSQL集群的Pacemaker配置指南
立即解锁
发布时间: 2025-08-21 02:23:08 阅读量: 2 订阅数: 5 


PostgreSQL高可用性架构与优化实践
### 构建高可用PostgreSQL集群的Pacemaker配置指南
#### 1. 资源超时设置与清理
在集群控制中,我们设置的其他选项(op)多为建议性的最小值,这些值反映了在将操作视为失败之前应等待的秒数。启动和停止文件系统的超时时间比LVM设备要长一些,因为文件系统可能有直接用户。文件系统用户包括当前位于挂载目录中的任何终端、将其用作文件目标的自动化任务,或正在运行的进程打开的文件,其中任何一项都可能阻止文件系统卸载。
通常,我们会对`pg_fs`设备进行资源清理,以清除任何无效错误。之后,可以使用`crm`查看清理后的资源状态。
#### 2. 添加PostgreSQL到集群管理
要将PostgreSQL添加到Pacemaker管理的服务列表中,需要完成一系列先决条件。添加此资源后,Pacemaker将能够启动和停止运行PostgreSQL服务器所需的一切。但还需要添加更多元素来控制启动顺序和关联服务等因素。
##### 2.1 操作步骤
在任何Pacemaker节点上以root用户身份执行以下步骤:
1. 使用`crm`向Pacemaker添加PostgreSQL原语:
```bash
crm configure primitive pg_lsb lsb:postgresql-ha \
op monitor interval="30" timeout="60" \
op start interval="0" timeout="60" \
op stop interval="0" timeout="60"
```
2. 使用`crm`清理可能累积的错误:
```bash
crm resource cleanup pg_lsb
```
3. 使用`crm`显示新PostgreSQL资源的状态:
```bash
crm resource status
```
##### 2.2 工作原理
添加到Pacemaker的下一个原语需要调用保存为`/etc/init.d/postgresql-ha`的脚本。此位置的脚本称为Linux标准基础(LSB)脚本,Pacemaker知道在`/etc/init.d`目录中查找LSB项。因此,在使用`crm`配置原语参数时,我们将新原语命名为`pg_lsb`,并使用`lsb:postgresql-ha`资源代理。实际上,`lsb:postgresql-ha`代理只是我们脚本的别名。
此资源代理未完全集成到Pacemaker中,且没有可配置的参数。我们唯一可以更改的是通用选项(op),如监控间隔和启动或停止超时。对于此代理,我们将所有超时设置为1分钟,但可能需要根据PostgreSQL的使用情况进行调整。
将监控间隔设置为30秒,超时设置为60秒的原因是系统过载。如果检查点导致大量写入活动,PostgreSQL可能无法响应,尽管它仍在运行。如果这种情况频繁发生,建议调查并解决问题。
如果监控操作失败,Pacemaker会认为服务已停止,并尝试重新启动它。如果重启失败,它会将所有内容转移到备用节点,这可能会导致看似随机的停机,在高可用性环境中这是不可取的。
清理无效错误并查看Pacemaker集群状态后,在测试系统上可以看到`pg_lsb`已启动。
##### 2.3 另一种资源代理
虽然我们提供了自己的PostgreSQL控制脚本,但与Pacemaker一起安装的`resource-agents`存储库包中包含专门为PostgreSQL设计的资源代理。其使用更为复杂,但可以通过查询来监控PostgreSQL,而不仅仅是使用进程ID测试。如果想使用此代理,以root身份执行以下步骤:
1. 使用以下命令设置`pg_ctl`的路径:
```bash
CTL=$(pg_config --bindir)/pg_ctl
```
2. 使用以下命令将`pgsql`资源代理作为主代理添加:
```bash
crm configure primitive pg_agent ocf:heartbeat:pgsql \
params pgctl="$CTL" \
pgdata="/db/pgdata" \
op monitor interval="30" timeout="60" \
op start interval="0" timeout="60" \
op stop interval="0" timeout="60"
```
要获取此资源代理的完整参数列表,可以使用`crm ra meta ocf:heartbeat:pgsql`命令,或查看手册页`man ocf_heartbeat_pgsql`。
#### 3. 添加虚拟IP隐藏集群
虚拟IP虽然不是传统意义上的服务,但在高可用性配置中提供了必要的功能。如果我们可以控制DNS解析,甚至可以为虚拟IP地址分配一个名称,使应用程序免受未来更改的影响。
##### 3.1 操作步骤
假设`192.1
0
0
复制全文
相关推荐









