![无法使用 Corosync/Pacemaker 启动 PostgreSQL 复制资源](https://linux22.com/image/671922/%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8%20Corosync%2FPacemaker%20%E5%90%AF%E5%8A%A8%20PostgreSQL%20%E5%A4%8D%E5%88%B6%E8%B5%84%E6%BA%90.png)
我正在两台服务器(CentOS 6.5)上设置 PostgreSQL 复制,并使用 Corosync/Pacemaker 实现 HA。
我的软件信息:
postgresql91-9.1.19-1PGDG.rhel6.x86_64
postgresql91-server-9.1.19-1PGDG.rhel6.x86_64
postgresql91-libs-9.1.19-1PGDG.rhel6.x86_64
postgresql91-contrib-9.1.19-1PGDG.rhel6.x86_64
postgresql91-devel-9.1.19-1PGDG.rhel6.x86_64
corosynclib-1.4.7-2.el6.x86_64
corosync-1.4.7-2.el6.x86_64
pacemaker-cli-1.1.12-8.el6_7.2.x86_64
pacemaker-1.1.12-8.el6_7.2.x86_64
pacemaker-cluster-libs-1.1.12-8.el6_7.2.x86_64
pacemaker-libs-1.1.12-8.el6_7.2.x86_64
resource-agents-3.9.5-24.el6_7.1.x86_64
复制正在进行中,从主服务器我可以看到已连接的从服务器:
-bash-4.1$ psql -c "select client_addr,sync_state from pg_stat_replication;" client_addr | sync_state -------------+------------ 172.16.1.10 | async (1 row)
并且我还确认在主服务器上创建的数据已复制到从服务器上。
这是我的crm configure show
:
node master
node slave
primitive PSQL pgsql \
params restart_on_promote=true pgctl="/usr/pgsql-9.1/bin/pg_ctl" psql="/usr/pgsql-9.1/bin/psql" pgdata="/var/lib/pgsql/9.1/data" node_list="master slave" repuser=rep rep_mode=sync restore_command="cp /var/lib/pgsql/pg_archive/%f %p" primary_conninfo_opt="keepalives_idle=60 keepalives_interval=5 keepalives_count=5" master_ip=172.16.1.100 archive_cleanup_command="/usr/pgsql-9.1/bin/pg_archivecleanup /var/lib/pgsql/pg_archive/ %r"
primitive RepIP IPaddr2 \
params ip=172.16.1.100 nic=eth2 cidr_netmask=24 \
op monitor interval=30s
primitive VirtualIP IPaddr2 \
params ip=10.0.0.100 cidr_netmask=24 \
op monitor interval=30s
group psql-ha VirtualIP RepIP \
meta target-role=Started
property cib-bootstrap-options: \
dc-version=1.1.11-97629de \
cluster-infrastructure="classic openais (with plugin)" \
expected-quorum-votes=2 \
stonith-enabled=false \
no-quorum-policy=ignore
但资源PSQL
无法启动。我的crm status
:
Last updated: Sat Nov 28 13:09:47 2015
Last change: Sat Nov 28 12:50:21 2015
Stack: classic openais (with plugin)
Current DC: master - partition with quorum
Version: 1.1.11-97629de
2 Nodes configured, 2 expected votes
3 Resources configured
Online: [ master slave ]
Resource Group: psql-ha
VirtualIP (ocf::heartbeat:IPaddr2): Started master
RepIP (ocf::heartbeat:IPaddr2): Started master
Failed actions:
PSQL_start_0 on slave 'not configured' (6): call=60, status=complete, last-rc-change='Sat Nov 28 12:50:21 2015', queued=0ms, exec=53ms
有一个错误日志/var/log/messages
:
11 月 28 日 12:50:21 从属 pgsql (PSQL) [3387]: 错误: 复制 (rep_mode=async 或 sync) 需要主/从配置。
有人能解释一下我为什么会收到这个错误吗?
谢谢。
更新:
(主机名更改为node1/node2)
@gf_ 的配置问题已解决。
注意:忘记我的旧配置,我在这个部署模型中只使用一个虚拟 IP。
当前状态:
[root@node1 ~]# crm_mon -Af -1
Last updated: Wed Dec 2 05:13:56 2015
Last change: Wed Dec 2 05:10:06 2015
Stack: classic openais (with plugin)
Current DC: node2 - partition with quorum
Version: 1.1.11-97629de
2 Nodes configured, 2 expected votes
3 Resources configured
Online: [ node1 node2 ]
VirtualIP (ocf::heartbeat:IPaddr2): Started node2
Master/Slave Set: msPSQL [PSQL]
Masters: [ node2 ]
Slaves: [ node1 ]
Node Attributes:
* Node node1:
+ PSQL-data-status : STREAMING|SYNC
+ PSQL-status : HS:sync
+ master-PSQL : 100
* Node node2:
+ PSQL-data-status : LATEST
+ PSQL-master-baseline : 000000000E000078
+ PSQL-status : PRI
+ master-PSQL : 1000
Migration summary:
* Node node1:
* Node node2:
工作配置:
node node1 \
attributes PSQL-data-status="STREAMING|SYNC"
node node2 \
attributes PSQL-data-status=LATEST
primitive PSQL pgsql \
params restart_on_promote=false pgctl="/usr/pgsql-9.1/bin/pg_ctl" psql="/usr/pgsql-9.1/bin/psql" pgdata="/var/lib/pgsql/9.1/data" node_list="node1 node2" repuser=replicate rep_mode=sync restore_command="cp /var/lib/pgsql/pg_archive/%f %p" primary_conninfo_opt="keepalives_idle=60 keepalives_interval=5 keepalives_count=5" master_ip=10.0.0.100 archive_cleanup_command="/usr/pgsql-9.1/bin/pg_archivecleanup /var/lib/pgsql/pg_archive/ %r" \
op start timeout=60s interval=0s on-fail=restart \
op monitor timeout=60s interval=4s on-fail=restart \
op monitor timeout=60s interval=3s on-fail=restart role=Master \
op promote timeout=60s interval=0s on-fail=restart \
op demote timeout=60s interval=0s on-fail=stop \
op stop timeout=60s interval=0s on-fail=block \
op notify timeout=60s interval=0s
primitive VirtualIP IPaddr2 \
params ip=10.0.0.100 nic=eth1 cidr_netmask=24 \
op monitor interval=30s
ms msPSQL PSQL \
meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 target-role=Started notify=true
colocation rsc_colocation-1 inf: VirtualIP msPSQL:Master
order rsc_order-1 0: msPSQL:promote VirtualIP:start symmetrical=false
order rsc_order-2 0: msPSQL:promote VirtualIP:stop symmetrical=false
property cib-bootstrap-options: \
dc-version=1.1.11-97629de \
cluster-infrastructure="classic openais (with plugin)" \
expected-quorum-votes=2 \
no-quorum-policy=ignore \
stonith-enabled=false \
last-lrm-refresh=1449033003
rsc_defaults rsc-options: \
resource-stickiness=100
答案1
同时,
PSQL
应该在两个节点上运行,master
并且slave
。(只是一个小提示:不确定这些术语是否适合在您的设置中选择为节点名称。)因此,您必须在配置中反映这一点,您遇到的错误非常清楚,并描述了缺少的内容:您必须将您的配置
PSQL
为克隆(应同时在多个节点上运行)、多状态(应在主从设置中运行)资源。如果您不知道这是什么,现在是查看文档的好时机,尤其是对于克隆——在多个主机上活跃的资源和多状态 - 具有多种模式的资源。因此,您的扩展配置可能如下所示:
ms msPSQL PSQL \ meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
此外,您必须指定您的
VirtualIP
和RepIP
应该运行,并且您必须确保资源已停止/启动正确的顺序:colocation rsc_colocation-1 inf: psql-ha msPSQL:Master order rsc_order-1 0: msPSQL:promote psql-ha:start symmetrical=false order rsc_order-2 0: msPSQL:demote psql-ha:stop symmetrical=false