地址信息
172.20.10.6  pg01
172.20.10.7  pg02
172.20.10.8  pg03
172.20.10.9   vip-master
172.20.10.10  vip-slave

hosts文件如下

一、三台机器同步时间

[root@ysl01 ~]# ntpdate ntp1.aliyun.com
12 May 13:31:04 ntpdate[1571]: adjust time server 120.25.115.20 offset -0.003524 sec

二、安装依赖包和集群软件

1.三个节点均安装依赖包和集群软件

yum install -y pacemaker corosync pcs

其中,pacemaker 为Linux环境中使用最为广泛的开源集群资源管理器, Pacemaker利用集群基础架构(Corosync或者 Heartbeat)提供的消息和集群成员管理功能,实现节点和资源级别的故障检测和资源恢复,从而最大程度保证集群服务的高可用。是整个高可用集群的控制中心,用来管理整个集群的资源状态行为。客户端通过 pacemaker来配置、管理、监控整个集群的运行状态。

Corosync集群引擎是一种群组通信系统(Group Communication System),为应用内部额外提供支持高可用性特性。corosync和heartbeat都属于消息网络层,对外提供服务和主机的心跳检测,在监控的主服务被发现当机之后,即时切换到从属的备份节点,保证系统的可用性。一般来说都是选择corosync来进行心跳的检测,搭配pacemaker的资源管理系统来构建高可用的系统。

pcs是Corosync和Pacemaker配置工具。它允许用户轻松查看,修改和创建基于Pacemaker的集群。pcs包含pcsd(一个pc守护程序),它可作为pc的远程服务器并提供Web UI。全部受控的 pacemaker和配置属性的变更管理都可以通过 pcs实现。

2.启动服务

systemctl start pcsd
systemctl enable pcsd
systemctl enable corosync
systemctl enable pacemaker

三、启动集群

1.设置hacluster用户密码(三个节点)

echo hacluster|passwd hacluster --stdin

2.集群认证(在任何一个节点上执行)

pcs cluster auth -u hacluster -p hacluster pg01 pg02 pg03

3.同步配置(在任何一个节点上执行)

pcs cluster setup --last_man_standing=1 --name pgcluster pg01 pg02 pg03

4.启动集群(在任何一个节点上执行)

pcs cluster start --all

四、安装PostgreSQL数据库(三个节点)

1.安装依赖

yum install -y  openssl openssl-devel readline readline-devel zlib-devel gcc flex

2.创建用户

groupadd dba -g 1100
useradd postgres -g 1100 -u 1100

3.安装数据库

1.获取并解压包

su - postgreswget https://www.postgresql.org/ftp/source/v11.10/postgresql-11.10.tar.gz  --no-check-certificatetar -xf postgresql-11.10.tar.gz

2.编译安装(三个节点)

进入目录

cd postgresql-11.10/
./configure --prefix=/home/postgres/soft make world -j24
make install-world -j24

3.初始化数据库数据目录到/home/postgres/data(master节点)

/home/postgres/soft/bin/initdb -D /home/postgres/data

4.配置环境变量

vi .bashrcexport PGUSER=postgres
export PGHOME=/home/postgres/soft
export PGDATA=/home/postgres/data
export PATH=${PGHOME}/bin:${PATH}
LD_LIBRARY_PATH=$PGHOME/lib:/usr/local/lib:/usr/local/lib64:/usr/lib64:$LD_LIBRARY_PATHsource .bashrc

5.修改配置文件和hba

postgresql.conf:

listen_addresses = '*'
wal_level = logical
wal_log_hints = on
max_wal_size = 10GB
min_wal_size = 80MB
checkpoint_completion_target = 0.9
archive_mode = on
archive_command = '/bin/true'
wal_keep_segments = 1000
synchronous_standby_names = ''
hot_standby_feedback = on
logging_collector = on
log_filename = 'postgresql-%a.log'
log_truncate_on_rotation = on
log_rotation_size = 0
log_min_duration_statement = 0
log_checkpoints = on
log_connections = on
log_disconnections = on
log_line_prefix = '%t [%p]: db=%d,user=%u,app=%a,client=%h '
log_lock_waits = on
log_temp_files = 0
log_autovacuum_min_duration = 0
lc_messages = 'en_US.UTF-8'

pg_hba.conf:

host    all             all             172.20.10.0/24            md5
host    replication     repluser             172.20.10.0/24       md5

6.启动master数据库

 pg_ctl start -D /home/postgres/data

7.创建复制用户(master节点)

 create user repluser with replication password 'repluser';

8.创建备机节点(pg02、pg03)

pg_basebackup -h pg01 -U repluser -p 5432 -D /home/postgres/data --wal-method=stream --checkpoint=fast --progress --verbose

9.停止master(pg01)

pg_ctl stop -D /home/postgres/data

五、配置集群

1.配置cluster_setup.sh脚本

vim cluster_setup.sh

pcs cluster cib pgsql_cfgpcs -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-mas IPaddr2 \ip="172.20.10.9" \nic="ens33" \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-sla IPaddr2 \ip="172.20.10.10" \nic="ens33" \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="/home/postgres/soft/bin/pg_ctl" \psql="/home/postgres/soft/bin/psql" \pgdata="/home/postgres/data" \config="/home/postgres/data/postgresql.conf" \rep_mode="async" \node_list="pg01 pg02 pg03" \master_ip="172.20.10.9" \repuser="repluser" \primary_conninfo_opt="password=repluser keepalives_idle=60 keepalives_interval=5 keepalives_count=5" \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=5 clone-node-max=1 notify=truepcs -f pgsql_cfg resource group add master-group vip-mas
pcs -f pgsql_cfg resource group add slave-group vip-slapcs -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=0pcs -f pgsql_cfg constraint colocation add slave-group with slave msPostgresql INFINITY
pcs -f pgsql_cfg constraint order promote msPostgresql then start slave-group symmetrical=false score=INFINITY
pcs -f pgsql_cfg constraint order demote  msPostgresql then stop  slave-group symmetrical=false score=0pcs cluster cib-push pgsql_cfg
sh cluster_setup.sh

2.修改集群配置:

cibadmin --query > tmp.xml
//将当前集群配置信息保存到tmp.xml文件中 cibadmin --query > tmp.xmlvi tmp.xml
//使用编辑器对XML文件进行修改  vim tmp.xmlcibadmin --replace --xml-file tmp.xml
//将修改后的XML文件替换掉当前集群的配置信息 cibadmin --replace --xml-file tmp.xml

cibadmin是用于操作 Heartbeat CIB 的低级管理命令。它可以用来转储、更新或修改所有或部分 CIB,删除整个 CIB 或执行各种 CIB 管理操作。

集群配置信息是Pacemaker集群中CIB信息的关键组成部分,Pacemaker的集群配置信息决定了集群最终应该如何工作以及集群最终的运行状态,因为只有一个正确的集群配置才能驱动集群资源运行在正常的状态。通常情况下,集群的配置信息由集群配置选项(crm_config)、集群节点(nodes)、集群资源(resources)和资源约束(constraints)四个配置段组成,通过cibadmin --query可查。

六、集群状态检查

1.启动集群并设置开机自启动

数据库无需配置自启动,由集群软件自动拉起

pcs cluster start --all

 pcs cluster enable --all

2.查看集群状态

 pcs cluster status

3、查看本机集群状态及资源状态

crm_mon -Afr -1

4.查看主节点流复制状态

select * from pg_stat_replication;

5.查看vip挂载情况

节点1

节点2

节点3

七、数据同步验证

主节点插入数据

postgres=# create table ysl(id int);
CREATE TABLE
postgres=# insert into ysl values(1);
INSERT 0 1
postgres=# select * from ysl;id
----1
(1 row)

备机查看

八、故障模拟

停掉主库,节点2提升为主节点

pg_ctl stop

节点3成为节点2的备机

注意master节点挂掉之后,使用 crm_mon -Arf -1命令看到末尾有"You have to remove /var/lib/pgsql/tmp/PGSQL.lock file to force start."字样,master宕机启动时,需要删除临时锁文件方可进行集群角色转换。即执行rm -rf /var/lib/pgsql/tmp/PGSQL.lock

拉起数据库不需要执行pg_ctl start,只需重启服务,软件会自动把数据库拉起。

systemctl restart corosync pacemaker pcsd

九、集群常用操作

pcs status //查看集群状态
pcs resource show //查看资源
pcs resource create ClusterIP IPaddr2 ip=192.168.0.120 cidr_netmask=32 //创建一个虚拟IP资源
pcs resource cleanup //xx表示虚拟资源名称,当集群有资源处于unmanaged的状态时,可以用这个命令清理掉失败的信息,然后重置资源状态
pcs resource list //查看资源列表
pcs resource restart //重启资源
pcs resource enable //启动资源
pcs resource disable //关闭资源
pcs resource delete //删除资源
crm_mon -Arf -1  //查看同步状态和资源

【PostgreSQL基于Pacemaker+Corosync+pcs的高可用】相关推荐

  1. 高可用集群下的负载均衡(8):pacemaker + corosync + haproxy 实现高可用

    实验环境 server1 和 server2 是调度器,server3 和 server4 是服务器 [1]调度器server1 server2 关闭 keepalived 和 httpd,并打开pc ...

  2. rhel7 pcs pacemaker corosync配置主从高可用

    1.准备环境 1.1.配置yum源配置文件 mount -t auto /dev/cdrom /mntrm -rf /etc/yum.repos.d/ mkdir -p /etc/yum.repos. ...

  3. mfs分布式文件系统,分布式存储,高可用(pacemaker+corosync+pcs),磁盘共享(iscsi),fence解决脑裂问题

    一.MFS概述 MooseFS是一个分布式存储的框架,其具有如下特性: (1)通用文件系统,不需要修改上层应用就可以使用(那些需要专门api的dfs很麻烦!). (2)可以在线扩容,体系架构可伸缩性极 ...

  4. Redhat7.5上使用Pacemaker和Corosync搭建Nginx高可用系统

    前言 最近在搭建RDQM的集群时用到了Pacemaker,出于对此的兴趣,自己来验证一下Pacemaker下Nginx的高可用. 提示:以下是本篇文章正文内容,下面案例可供参考 一.概述 本文记录了通 ...

  5. mysql pacemaker_集群:corosync+pacemaker实现MySQL服务高可用

    高可用集群是指以减少服务中断时间为目的的服务器集群技术.它通过保护用户的业务程序对外不间断提供的服务,把因软件/硬件/人为造成的故障对业务的影响降低到最小程度.高可用集群的应用系统有多样化发展趋势,用 ...

  6. corosync+pacemaker+nfs提供mysql高可用

    corosync/openais+pacemaker+nfs提供mariadb高可用 节点一, one, 172.16.249.122/16, 172.16.0.1, CentOS6.6, maria ...

  7. 亚马逊AWS在线系列讲座——基于AWS云平台的高可用应用设计

    设计高可用的应用是架构师的一个重要目标,可是基于云计算平台设计高可用应用与基于传统平台的设计有很多不同.云计算在给架构师带来了很多新的设计挑战的时候,也给带来了很多新的设计理念和可用的服务.怎样在设计 ...

  8. 基于rhcs套件实现的高可用集群

    1.基于rhcs套件实现nginx平台的高可用集群 实验环境: 1> server1 server5 集群节点为了节省节点我们还用了server1作为管理节点安装了luci图形管理: 2> ...

  9. 基于故障转移群集的高可用虚拟机解决方案

    基于故障转移群集的高可用虚拟机解决方案 推荐 某医药公司现有1台服务器,安装Windows Server 2008 R2,运行专用管理软件,计算机上有USB加密狗.网络中有100个左右的工作站,安装专 ...

最新文章

  1. web标准,我们去向何方?一些想法...
  2. java简体(繁体)转换器
  3. SmartArt使用
  4. MySQL存储结构的使用
  5. 3-6-汉诺塔(Hanoi Tower)问题-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版...
  6. 建模分析师与算法工程师的主要区别
  7. iOS 禁止手势滑动翻页
  8. c++矩阵运算库Eigen简介
  9. php v9验证码错误,phpcms后台显示验证码错误怎么办
  10. 一个屌丝程序猿的人生(三)
  11. 易思ESPCMS企业建站管理系统 P8.21120101 稳定版
  12. 会议oa之排座和送审
  13. 某程序员在网吧敲代码,出类拔萃,网友:为何我被打的却是我
  14. MMA8451Q传感器读值
  15. 论文中绘制神经网络工具汇总
  16. 解决Windows Server 2008 R2安装声卡驱动后还是提示无音频设备的问题
  17. 小米刷 android o,一代神机!五年前的小米2刷入Android 8.0原生系统
  18. 新人福利——Cheat Engine功能之基础篇
  19. 香港国际珠宝展及香港国际钻石、宝石及珍珠展揭幕
  20. indesign输出流式epub时1em的问题

热门文章

  1. 一文带你深入理解【Java基础】· Java基本语法:程序流程控制
  2. 【PM学习笔记】酸梅干超人 - 零基础学B端UI设计 学习笔记
  3. 学什么编程语言以后不会过时?
  4. 【面经】找实习两个月(面试题以及答案)
  5. 红外遥控器操作海康威视摄像头云台
  6. html显示圆圈头像,css实现多说头像圆形旋转特效
  7. 自然数幂和 伯努利数
  8. Unity 接入百度AI - 车型识别
  9. label-studio批量上传本地数据
  10. 华为nova3游戏帧数测试软件,华为nova3最全游戏体验报告:手游玩家一定不能错过...