Open scarletfrank opened 3 years ago
writer-vip和reader-vip在被客户端访问时,是如何转换到具体的IP上的,以及虚拟IP参数设置上有什么要注意的吗。 vip和实际ip并无本质区别,只是vip不是固定绑在某台机器上,而是要根据集群的状态在集群的不同机器上漂移。使用vip只要保证集群中所有节点在同一网段即可。
你遇到的问题,要看日志才能分析原因,不过好像不是vip的问题。
另外,基于pacemaker的PG HA是很早流行的。现在更推荐基于patroni的方式。搭建步骤参考下面。 etcd要搭成3节点高可用方式,可以和3台数据库搭在一起。
多谢,patroni的我之后也会去实践一下。
我在和PG备份集群对比config.pcs
时就很疑惑了,我们的两个虚拟IP,都放在同一个nic上;而后者,则是第一个vip用于读写(放在eth0),第二个vip用于备份(放在eth2)。是什么造成了二者的差异?
# 我们生成的config.pcs
pcs cluster cib pgsql_cfg
pcs -f pgsql_cfg property set no-quorum-policy="stop"
pcs -f pgsql_cfg property set stonith-enabled="false"
pcs -f pgsql_cfg resource defaults resource-stickiness="1"
pcs -f pgsql_cfg resource defaults migration-threshold="10"
pcs -f pgsql_cfg resource create vip-master IPaddr2 \
ip="192.168.x.100" \
nic="ens160" \
cidr_netmask="24" \
op start timeout="60s" interval="0s" on-fail="restart" \
op monitor timeout="60s" interval="10s" on-fail="restart" \
op stop timeout="60s" interval="0s" on-fail="block"
pcs -f pgsql_cfg resource create vip-slave IPaddr2 \
ip="192.168.x.101" \
nic="ens160" \
cidr_netmask="24" \
op start timeout="60s" interval="0s" on-fail="restart" \
op monitor timeout="60s" interval="10s" on-fail="restart" \
op stop timeout="60s" interval="0s" on-fail="block"
pcs -f pgsql_cfg resource create pgsql expgsql \
pgctl="/usr/pgsql-12/bin/pg_ctl" \
psql="/usr/pgsql-12/bin/psql" \
pgdata="/pgsql/data" \
pgport="5432" \
rep_mode="sync" \
node_list="mdw sdw1 sdw2 " \
restore_command="" \
primary_conninfo_opt="user=replication password=replication keepalives_idle=60 keepalives_interval=5 keepalives_count=5" \
master_ip="192.168.x.100" \
restart_on_promote="false" \
enable_distlock="" \
distlock_lock_cmd="/opt/pha4pgsql/tools/distlock '' lock distlock: @owner 9 12" \
distlock_unlock_cmd="/opt/pha4pgsql/tools/distlock '' unlock distlock: @owner" \
distlock_lockservice_deadcheck_nodelist="mdw sdw1 sdw2 " \
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"
pcs -f pgsql_cfg resource master msPostgresql pgsql \
master-max=1 master-node-max=1 clone-node-max=1 notify=true \
migration-threshold="3" target-role="Master"
pcs -f pgsql_cfg constraint colocation add vip-master with Master msPostgresql INFINITY
pcs -f pgsql_cfg constraint order promote msPostgresql then start vip-master symmetrical=false score=INFINITY
pcs -f pgsql_cfg constraint order demote msPostgresql then stop vip-master symmetrical=false score=0
pcs -f pgsql_cfg constraint colocation add vip-slave with Slave msPostgresql INFINITY
pcs -f pgsql_cfg constraint order promote msPostgresql then start vip-slave symmetrical=false score=INFINITY
pcs -f pgsql_cfg constraint order stop msPostgresql then stop vip-slave symmetrical=false score=0
pcs -f pgsql_cfg constraint location vip-slave rule id="loc-vip-slave-rule" score=1000 master-pgsql eq "HS:sync"
pcs cluster cib-push pgsql_cfg
# clusterlab的config.pcs
pcs cluster cib pgsql_cfg
pcs -f pgsql_cfg property set no-quorum-policy="ignore"
pcs -f pgsql_cfg property set stonith-enabled="false"
pcs -f pgsql_cfg resource defaults resource-stickiness="INFINITY"
pcs -f pgsql_cfg resource defaults migration-threshold="1"
pcs -f pgsql_cfg resource create vip-master IPaddr2 \
ip="192.168.0.3" \
nic="eth0" \
cidr_netmask="24" \
op start timeout="60s" interval="0s" on-fail="restart" \
op monitor timeout="60s" interval="10s" on-fail="restart" \
op stop timeout="60s" interval="0s" on-fail="block"
pcs -f pgsql_cfg resource create vip-rep IPaddr2 \
ip="192.168.2.3" \
nic="eth2" \
cidr_netmask="24" \
meta migration-threshold="0" \
op start timeout="60s" interval="0s" on-fail="stop" \
op monitor timeout="60s" interval="10s" on-fail="restart" \
op stop timeout="60s" interval="0s" on-fail="ignore"
pcs -f pgsql_cfg resource create pgsql pgsql \
pgctl="/usr/bin/pg_ctl" \
psql="/usr/bin/psql" \
pgdata="/var/lib/pgsql/data/" \
rep_mode="sync" \
node_list="node1 node2" \
restore_command="cp /var/lib/pgsql/pg_archive/%f %p" \
primary_conninfo_opt="keepalives_idle=60 keepalives_interval=5 keepalives_count=5" \
master_ip="192.168.2.3" \
restart_on_promote='true' \
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"
pcs -f pgsql_cfg resource master msPostgresql pgsql \
master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
pcs -f pgsql_cfg resource group add master-group vip-master vip-rep
pcs -f pgsql_cfg constraint colocation add master-group with Master msPostgresql INFINITY
pcs -f pgsql_cfg constraint order promote msPostgresql then start master-group symmetrical=false score=INFINITY
pcs -f pgsql_cfg constraint order demote msPostgresql then stop master-group symmetrical=false score=0
pcs cluster push cib pgsql_cfg
"192.168.x.100" ip地址里怎么有一个x ?
我在和PG备份集群对比config.pcs时就很疑惑了,我们的两个虚拟IP,都放在同一个nic上;而后者,则是第一个vip用于读写(放在eth0),第二个vip用于备份(放在eth2)。是什么造成了二者的差异?
PgSQL_Replicated_Cluster里的2个vip都绑在master上,这个环境里机器有个独立的网络,通过2个vip隔离master的网络流量(业务流程 + 备份复制流程)。
pcs -f pgsql_cfg resource group add master-group vip-master vip-rep
pha4pgsql里的2个vip其中一个作为读写vip绑在master上,另一个作为只读vip绑在从上,用于可以利用只读vip做读写分离。如果应用没有读写分离需求,也可以不绑只读vip。
"192.168.x.100" ip地址里怎么有一个x ?
我在和PG备份集群对比config.pcs时就很疑惑了,我们的两个虚拟IP,都放在同一个nic上;而后者,则是第一个vip用于读写(放在eth0),第二个vip用于备份(放在eth2)。是什么造成了二者的差异?
PgSQL_Replicated_Cluster里的2个vip都绑在master上,这个环境里机器有个独立的网络,通过2个vip隔离master的网络流量(业务流程 + 备份复制流程)。
pcs -f pgsql_cfg resource group add master-group vip-master vip-rep
pha4pgsql里的2个vip其中一个作为读写vip绑在master上,另一个作为只读vip绑在从上,用于可以利用只读vip做读写分离。如果应用没有读写分离需求,也可以不绑只读vip。
x 只是某个特定数字,想了想其实也没什么遮掉的必要...都是一致的 我这里定的都是同一个,比如192.168.199.94 - 96 ,然后192.168.199.100 - 101 这个样子
Thanks,我的应用需要做读写分离。
感谢大神的脚本。我打算按三节点配置配置一个PG HA的集群,跟着教程走到这一步出错了
报错如下:
我尝试自己排查原因,但我感觉是我没理解一些参数的含义,所以提一个issue...主要的疑惑在于:
writer-vip和reader-vip在被客户端访问时,是如何转换到具体的IP上的,以及虚拟IP参数设置上有什么要注意的吗。
我这边的情况应该是三台虚拟机(公司里的,应该是一个物理机划分出来的),各有三个ip(192.168.x.94/95/96),从
ifconfig
看都是ens160,这种能做三节点PG HA吗。接下来是我自己的理解和情况补充说明
clusterlab的PG备份集群,里面的说明图,它把虚拟IP1设在eth0上,虚拟IP2设在eth2上。然后我看教程里的node1/2/3和writer/reader_vip 都是
192.168.0.231-237
,所以我在想您的教程里是不是其实访问writer_vip/reader_vip就会指向具体的node1/2/3我之后敲了如下的命令查看状态。
我用的
config.ini
如下