corosync+pacemaker实现pg流复制自动切换

一、环境
$ cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
node1: 192.168.111.128
node2: 192.168.111.129
vip-master: 192.168.111.228
vip-slave:  192.168.111.229
配置主机名
hostnamectl set-hostname postgres128
hostnamectl set-hostname postgres129

[root@postgres128 ~]# vi /etc/hosts
192.168.111.128 postgres128
192.168.111.129 postgres129

二、配置Linux集群环境
1. 安装Pacemaker和Corosync
在所有节点执行:
[root@postgres128 ~]# yum install -y pacemaker pcs psmisc policycoreutils-python

2. 禁用防火墙
在所有节点执行:
[root@postgres128 ~]# systemctl disable firewalld.service
[root@postgres128 ~]# systemctl stop firewalld.service

 3. 启用pcs

在所有节点执行:
[root@postgres128 ~]# systemctl start pcsd.service
[root@postgres128 ~]# systemctl enable pcsd.service
[root@postgres128 ~]# echo hacluster | sudo passwd hacluster --stdin

 4. 集群认证
在任何一个节点上执行,这里选择node1:
[root@postgres128 ~]# pcs cluster auth -u hacluster -p hacluster 192.168.111.128 192.168.111.129

5. 同步配置 

在node1上执行:
[root@postgres128 ~]# pcs cluster setup --last_man_standing=1 --name pgcluster 192.168.111.128 192.168.111.129
Shutting down pacemaker/corosync services...
Redirecting to /bin/systemctl stop  pacemaker.service
Redirecting to /bin/systemctl stop  corosync.service
Killing any remaining services...
Removing all cluster configuration files...
192.168.111.128: Succeeded
192.168.111.129: Succeeded

6. 启动集群
在node1上执行:
[root@postgres128 ~]# pcs cluster start --all
192.168.111.128: Starting Cluster...
192.168.111.129: Starting Cluster...

7. 检验
1)检验corosync
在node1上执行:
$ sudo pcs status corosync
Membership information
----------------------
    Nodeid      Votes Name
         1          1 192.168.111.128 (local)
         2          1 192.168.111.129

2)检验pacemaker
[root@postgres128 ~]#  pcs status
Cluster name: pgcluster
WARNING: no stonith devices and stonith-enabled is not false
Last updated: Wed Sep  6 02:20:28 2017
Last change:
Current DC: NONE
0 Nodes configured
0 Resources configured

Full list of resources:

PCSD Status:
  192.168.111.128: Online
  192.168.111.129: Online

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

三、安装和配置PostgreSQL
配置参考
查看PG流复制结果。
[postgres@localhost ~]$ psql
psql (9.6.0)
Type "help" for help.

postgres=# \x
Expanded display is on.
postgres=# select * from pg_stat_replication ;
-[ RECORD 1 ]----+------------------------------
pid              | 2111
usesysid         | 16384
usename          | replica
application_name | standby01
client_addr      | 192.168.111.129
client_hostname  |
client_port      | 45608
backend_start    | 2017-09-06 05:13:29.766227-04
backend_xmin     | 1756
state            | streaming
sent_location    | 0/50000D0
write_location   | 0/50000D0
flush_location   | 0/50000D0
replay_location  | 0/5000098
sync_priority    | 1
sync_state       | sync

停止PostgreSQL服务
$ pg_stop
waiting for server to shut down...... done
server stopped

四、配置自动切换
1. 配置
在node1执行:
将配置步骤先写到脚本
# 将cib配置保存到文件
[root@postgres128 postgres]# vi cluster_setup.sh
pcs cluster cib pgsql_cfg
# 在pacemaker级别忽略quorum
pcs -f pgsql_cfg property set no-quorum-policy="ignore"
# 禁用STONITH
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="3"
# 设置master节点虚ip
pcs -f pgsql_cfg resource create vip-master IPaddr2 ip="192.168.111.228" 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"
# 设置slave节点虚ip
pcs -f pgsql_cfg resource create vip-slave IPaddr2 ip="192.168.111.229" 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"
# 设置pgsql集群资源
# pgctl、psql、pgdata和config等配置根据自己的环境修改,node list填写节点的hostname,master_ip填写虚master_ip
pcs -f pgsql_cfg resource create pgsql pgsql pgctl="/opt/pgsql96/bin/pg_ctl" psql="/opt/pgsql96/bin/psql" pgdata="/home/postgres/data" config="/home/postgres/data/postgresql.conf" rep_mode="sync" node_list="postgres128 postgres129" master_ip="192.168.111.228"  repuser="replica" primary_conninfo_opt="password=replica keepalives_idle=60 keepalives_interval=5 keepalives_count=5" restore_command="cp /home/postgres/arch/%f %p" 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"
 # 设置master/slave模式,clone-max=2,两个节点
pcs -f pgsql_cfg resource master pgsql-cluster pgsql master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
# 配置master ip组
pcs -f pgsql_cfg resource group add master-group vip-master
# 配置slave ip组
pcs -f pgsql_cfg resource group add slave-group vip-slave
# 配置master ip组绑定master节点
pcs -f pgsql_cfg constraint colocation add master-group with master pgsql-cluster INFINITY
# 配置启动master节点
pcs -f pgsql_cfg constraint order promote pgsql-cluster then start master-group symmetrical=false score=INFINITY
# 配置停止master节点
pcs -f pgsql_cfg constraint order demote  pgsql-cluster then stop  master-group symmetrical=false score=0
# 配置slave ip组绑定slave节点
pcs -f pgsql_cfg constraint colocation add slave-group with slave pgsql-cluster INFINITY
# 配置启动slave节点
pcs -f pgsql_cfg constraint order promote pgsql-cluster then start slave-group symmetrical=false score=INFINITY
# 配置停止slave节点
pcs -f pgsql_cfg constraint order demote  pgsql-cluster then stop  slave-group symmetrical=false score=0
# 把配置文件push到cib
pcs cluster cib-push pgsql_cfg

2. 执行加载命令
[root@postgres128 postgres]# chmod +x cluster_setup.sh
[root@postgres128 postgres]# ./cluster_setup.sh
Adding pgsql-cluster master-group (score: INFINITY) (Options: symmetrical=false score=INFINITY first-action=promote then-action=start)
Adding pgsql-cluster master-group (score: 0) (Options: symmetrical=false score=0 first-action=demote then-action=stop)
Adding pgsql-cluster slave-group (score: INFINITY) (Options: symmetrical=false score=INFINITY first-action=promote then-action=start)
Adding pgsql-cluster slave-group (score: 0) (Options: symmetrical=false score=0 first-action=demote then-action=stop)
CIB updated

3. 启动数据库

3查看pcs status
[root@postgres129 ~]# pcs status
Cluster name: pgcluster
Last updated: Wed Sep  6 22:13:39 2017
Last change: Wed Sep  6 06:00:26 2017 via cibadmin on postgres128
Stack: corosync
Current DC: postgres128 (1) - partition with quorum
Version: 1.1.10-29.el7-368c726
2 Nodes configured
4 Resources configured

Online: [ postgres128 postgres129 ]

Full list of resources:

 Master/Slave Set: pgsql-cluster [pgsql]
     Stopped: [ postgres128 postgres129 ]
 Resource Group: master-group
     vip-master (ocf::heartbeat:IPaddr2):       Started postgres128
 Resource Group: slave-group
     vip-slave  (ocf::heartbeat:IPaddr2):       Started postgres129 

PCSD Status:
  192.168.111.128: Unable to authenticate
  192.168.111.129: Unable to authenticate

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

参考文献:

搭建+维护

https://my.oschina.net/aven92/blog/518928
https://my.oschina.net/aven92/blog/519458

时间: 2024-12-25 06:12:06

corosync+pacemaker实现pg流复制自动切换的相关文章

PGPool-II+PG流复制实现HA主备切换

基于PGPool的双机集群如下图所示:pg主节点和备节点实现流复制热备,pgpool1,pgpool2作为中间件,将主备pg节点加入集群,实现读写分离,负载均衡和HA故障自动切换.两pgpool节点可以委托一个虚拟ip节点作为应用程序访问的地址,两节点之间通过watchdog进行监控,当pgpool1宕机时,pgpool2会自动接管虚拟ip继续对外提供不间断服务. 1. 主机规划 192.168.20.201 redis01 192.168.20.202 redis02 192.168.20.2

pg流复制部署实践

1 介绍 流复制是pg数据库9.0后面版本新增的功能,基本原理是从服务器连接到主服务器,主服务器在WAL记录产生时就将它们以流式传送到从服务器中,而不必等到WAL日志文件被填充. 默认情况下,流复制是异步的,在这种情况下,主服务器提交一个事务与该变化在从服务器上变得可见之间存在短暂的延迟,不过这种延迟比基于文件的日志传送方式中要小得多,在从服务器硬件等负载条件允许的情况下,延迟通常低于一秒. 2 部署 2.1 服务器配置 服务器 IP 说明 master(centos6.5) 192.168.0

pg流复制

同步流复制应用场景:金融级的应用场景,2个副本通常是不够的,用户可能会需要多个副本,例如,一主4从,要求除了主以外,还需要2个同步的副本,其他可以为异步的副本.另一方面,我们在使用数据库时,为了扩展读的能力,读写分离是比较常见的用法. 还有一种场景,在主备切换时,要求备库快速激活成和主库一样的状态,也需要remote_apply级别的复制. 9.6以前的版本,同步复制是确保XLOG已经复制到备库,而不是已经在备库apply,虽然APPLY通常都很快,可能也在毫秒级别完成,但是以前没有apply级

Pg 流复制方式HA 版本升级步骤

一.HA Description: Master:192.168.1.10 Slave:192.168.1.20 VIP: eth0:pgvip(master and slave) 192.168.1.30 PGDATA: /pgdata95 pg_version: 9.5.2 二.upgrade steps: (一)升级Slave数据库软件版本 1.postgres(192.168.1.20) pg_ctl -D /pgdata95 stop -m fast 2.postgres(192.16

DRBD+Pacemaker实现DRBD主从角色的自动切换

DRBD+Pacemaker实现DRBD主从角色的自动切换 前提: drbd设备名,以及drbd设备的挂载点都要与对端节点保持一致: 因为我们 定义资源,使用到设备名及挂载点,所以两端的drbd设备名和设备的挂载点都必须保持一致: 如何定义主从资源? 主从资源是一类特殊的克隆资源: 要成为克隆资源,首先必须定义成主资源; 因此,要想定义成主从资源,首先必须定义成主资源.为保证成为主资源的同时,drdb设备可以同时挂载,还需定义Filesystem clone-max: 在集群中最多能运行多少份克

Postgresql流复制切换的时候遇到的一个小问题

Pg10搭建了流复制主备切换 配置主库10.10.10.13 pghost4备库10.10.10.14 pghost5 测试主库出现问题,停止后,备库自动切换成为新主库.老主库现在应该是备库了,启动它验证状态.发现备库启动不起来.通过以下方法,备库启动了. 新备库通过pg_ctl start启动,出现告警日志. [[email protected] ~]# su - pg10[email protected]>pg_ctl startwaiting for server to start....

TimesTen 数据库复制学习:16. 一个缓存组,复制,客户端自动切换的串烧实验

简介 这时一个集只读,AWT缓存组,Active Standby 复制,client auto failover为一体的集成实验. 整个过程来至于Doc ID 1359840.1, 本文基于此文档按照自己的环境重做了一遍,并更正了其中的小错误,增加了自己的理解. 本文省略了在Oracle端设置缓存组的过程,可以参见前面的文章. 搭建的环境为虚拟机 timesten-hol 上安装了两个TimesTen实例, 实例名分别为tt1122和ttnew, 分别驻留在端口53392(缺省)和55555 t

drbd+mariadb+corosync+pacemaker构建高可用,实现负载均衡

DRBD DRBD是由内核模块和相关脚本而构成,用以构建高可用性的集群 drbd 工作原理:DRBD是一种块设备,可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能. 当你将数据写入本地 文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个 文件系统中. 本地(主节点)与远程主机(备节点)的数据可以保证实时同步.当本地系统出现故障时,远 程主机上还会保留有一份相同的数据,可以继续使用.在高可用(HA)中使用DRBD功能,可以代替使用一 个共享盘阵.因为数据同时存在

corosync+pacemaker+mysql+drbd 实现mysql的高可用

corosync corosync的由来是源于一个Openais的项目,是Openais的一个子 项目,可以实现HA心跳信息传输的功能,是众多实现HA集群软件中之一,heartbeat与corosync是流行的Messaging Layer (集群信息层)工具.而corosync是一个新兴的软件,相比Heartbeat这款很老很成熟的软件,corosync与Heartbeat各有优势,博主就不在这里比较之间的优势了,corosync相对于Heartbeat只能说现在比较流行. pacemaker