采用pacemaker+corosync实现postgresql双机热备、高可用方案
环境说明
参照上章已完成postgresql流复制配置,并关闭postgres服务。
su - postgres
pg_ctl -D /data/postgresql/data/ stop -m fast
配置集群环境
安装pacemaker和corosync
需要在所有节点执行
yum install -y pacemaker pcs psmisc policycoreutils-python postgresql-server
关闭防火墙
需要在所有节点执行
systemctl disable firewalld.service
systemctl stop firewalld.service
启用PCS
需要在所有节点执行
[root@master ~]# systemctl start pcsd.service
[root@master ~]# systemctl enable pcsd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/pcsd.service to /usr/lib/systemd/system/pcsd.service.
[root@master ~]# echo hacluster | passwd hacluster --stdin
更改用户 hacluster 的密码 。
passwd:所有的身份验证令牌已经成功更新。
集群认证
在任意机器执行,选择master执行
[root@master ~]# pcs cluster auth -u hacluster -p hacluster 192.168.174.200 192.168.174.201
192.168.174.200: Authorized
192.168.174.201: Authorized
同步设置
选择master执行
[root@master ~]# pcs cluster setup --last_man_standing=1 --name pgcluster 192.168.174.200 192.168.174.201
Destroying cluster on nodes: 192.168.174.200, 192.168.174.201...
192.168.174.200: Stopping Cluster (pacemaker)...
192.168.174.201: Stopping Cluster (pacemaker)...
192.168.174.200: Successfully destroyed cluster
192.168.174.201: Successfully destroyed cluster
Sending 'pacemaker_remote authkey' to '192.168.174.200', '192.168.174.201'
192.168.174.200: successful distribution of the file 'pacemaker_remote authkey'
192.168.174.201: successful distribution of the file 'pacemaker_remote authkey'
Sending cluster config files to the nodes...
192.168.174.200: Succeeded
192.168.174.201: Succeeded
Synchronizing pcsd certificates on nodes 192.168.174.200, 192.168.174.201...
192.168.174.200: Success
192.168.174.201: Success
Restarting pcsd on the nodes in order to reload the certificates...
192.168.174.200: Success
192.168.174.201: Success
启动集群
选择master执行
[root@master ~]# pcs cluster start --all
192.168.174.200: Starting Cluster...
192.168.174.201: Starting Cluster...
验证
验证corosync,选择在master执行
[root@master ~]# pcs status corosync
Membership information
----------------------
Nodeid Votes Name
1 1 192.168.174.200 (local)
2 1 192.168.174.201
验证pacemaker,选择在master执行
[root@master ~]# pcs status
Cluster name: pgcluster
WARNING: no stonith devices and stonith-enabled is not false
WARNING: corosync and pacemaker node names do not match (IPs used in setup?)
Stack: unknown
Current DC: NONE
Last updated: Fri Apr 13 21:24:51 2018 Last change:
0 nodes configured
0 resources configured
No resources
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled
配置自由切换
注意:在配置自动切换前,一定要先把master、slave1上的PostgreSQL服务停掉
选择在master执行
vim cluster_setup.sh
# 将cib配置保存到文件
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.174.210" 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.174.211" 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="/usr/bin/pg_ctl" psql="/usr/bin/psql" pgdata="/var/lib/pgsql/data/" config="/var/lib/pgsql/data/postgresql.conf" rep_mode="sync" node_list="master slave1" master_ip="192.168.174.210" repuser="replicator" primary_conninfo_opt="password=123456 keepalives_idle=60 keepalives_interval=5 keepalives_count=5" restore_command="cp /var/lib/data/pgsql/xlog_archive/%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
注意:
执行文件
sh cluster_setup.sh
验证
[root@master ~]# pcs status
Cluster name: pgcluster
WARNING: corosync and pacemaker node names do not match (IPs used in setup?)
Stack: corosync
Current DC: slave1 (version 1.1.16-12.el7_4.8-94ff4df) - partition with quorum
Last updated: Fri Apr 13 21:30:29 2018
Last change: Fri Apr 13 21:29:56 2018 by root via crm_attribute on master
2 nodes configured
4 resources configured
Online: [ master slave1 ]
Full list of resources:
Master/Slave Set: pgsql-cluster [pgsql]
Masters: [ master ]
Slaves: [ slave1 ]
Resource Group: master-group
vip-master (ocf::heartbeat:IPaddr2): Started master
Resource Group: slave-group
vip-slave (ocf::heartbeat:IPaddr2): Started slave1
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled
注意:当vip-master和vip-slave都是Started状态时,集群节点配置正确。否则,请检查你的配置是否有误
查看同步状态
在master查询:select * from pg_stat_replication;
#查询结果
6305 16384 replicator slave1 192.168.174.201 60052 2018-04-13 13:29:47.76656+00 streaming 0/5000408 0/5000408 0/5000408 0/5000408 1 sync
测试故障转移
在master执行,模拟故障关闭服务
[root@master ~]# su - postgres
上一次登录:五 4月 13 22:01:13 CST 2018
-bash-4.2$ pg_ctl -D /var/lib/pgsql/data/ stop -m fast
等待服务器进程关闭 ..... 完成
服务器进程已经关闭
现master上数据库访问不通,访问slaver1上数据库可提供数据读写服务。
现向slaver1数据库插入几条数据
insert into mytab(id) values (4);
insert into mytab(id) values (5);
insert into mytab(id) values (6);
恢复服务,在master上执行
-bash-4.2$ pg_ctl -D /var/lib/pgsql/data/ start
正在启动服务器进程
-bash-4.2$ 日志: 数据库上次关闭时间为 2018-04-13 14:01:25 GMT
cp: 无法获取"/var/lib/data/pgsql/xlog_archive/00000002.history" 的文件状态(stat): 没有那个文件或目录
日志: 正在进入备用模式
cp: 无法获取"/var/lib/data/pgsql/xlog_archive/000000010000000000000006" 的文件状态(stat): 没有那个文件或目录
日志: 在0/6000080上已到达一致性恢复状态
日志: 在 0/6000080 位置有零长度的记录
cp: 无法获取"/var/lib/data/pgsql/xlog_archive/000000010000000000000006" 的文件状态(stat): 没有那个文件或目录
日志: 数据库系统准备接受只读请求的连接
cp: 无法获取"/var/lib/data/pgsql/xlog_archive/00000002.history" 的文件状态(stat): 没有那个文件或目录
日志: 流复制成功连接到主服务器
日志: redo 在 0/6000080 开始
在master上查询:select * from mytab;发现已同步为最新数据。
在slaver1上查询:select * from pg_stat_replication;
#查询结果
58621 16384 replicator master 192.168.174.200 52578 2018-04-13 14:02:39.701236+00 streaming 0/6000548 0/6000548 0/6000548 0/6000548 1 sync
对比两次的查询结果
--6305 16384 replicator slave1 192.168.174.201 60052 2018-04-13 13:29:47.76656+00 streaming 0/5000408 0/5000408 0/5000408 0/5000408 1 sync
--58621 16384 replicator master 192.168.174.200 52578 2018-04-13 14:02:39.701236+00 streaming 0/6000548 0/6000548 0/6000548 0/6000548 1 sync
发现master在模拟故障后从主机变为从机。
至此双机热备方案已全部完成!
采用pacemaker+corosync实现postgresql双机热备、高可用方案的更多相关文章
- Mysql+Keepalived双主热备高可用操作记录
我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互为Mast ...
- 使用Keepalived实现Nginx的自动重启及双主热备高可用
1.概述 之前我们使用Keepalived实现了Nginx服务的双机主备高可用,但是有几个问题没有解决,今天一起探讨一下. 1)在双机主备机制中,Keepalived服务如果宕了,会自动启用备机进行服 ...
- postgresql双机热备、高可用方案(采用pacemaker+corosync实现)
http://blog.csdn.net/qguanri/article/details/51151974 需求描述 我们有两台centos7的数据库主机A.B.要对A.B实现双机热备,A作为数据库m ...
- mysql+keepalived 双主热备高可用
理论介绍:我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互 ...
- Redis双机热备方案--转
http://luyx30.blog.51cto.com/1029851/1350832 参考资料: http://patrick-tang.blogspot.com/2012/06/redis-ke ...
- 云数据库Redis版256M双机热备款
云数据库Redis版是兼容Redis协议标准的.提供持久化的缓存式数据库服务,基于高可靠双机热备架构:全新推出的256M小规格款,适用于高QPS.小数据量业务,并支持免费全量迁移,完美服务于个人开发者 ...
- Pacemaker实现双机热备
在互联网高速发展的今天,尤其在电子商务的发展,要求服务器能够提供不间断服务.在电子商务中,如果服务器宕机,造成的损失是不可估量的.要保证服务器不间断服务,就需要对服务器实现冗余.在众多的实现服务器冗余 ...
- Nginx+keepalived双机热备(主从模式)
负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行.关于负载均衡介绍,可以参考:linux负载 ...
- Nginx+keepalived 双机热备(主从模式)
负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行.关于负载均衡介绍,可以参考:linux负载 ...
随机推荐
- 如何使 C++ 的 StringBuilder 提升 4350% 的性能?
介绍 经常出现客户端打电话抱怨说:你们的程序慢如蜗牛.你开始检查可能的疑点:文件IO,数据库访问速度,甚至查看web服务. 但是这些可能的疑点都很正常,一点问题都没有. 你使用最顺手的性能分析工具分析 ...
- Bugku web 计算器
计算器 打开网页,想输入正确的计算结果发现只输进去一位数??? 遇事不决先F12看一眼源码,发现flag
- Mysql数据库表类型
MySQL的数据表类型很多,其中比较重要的是MyISAM,InnoDB这两种. 这两种类型各有优缺点,需要根据实际情况选择适合的,MySQL支持对不同的表设置不同的类型.下面做个对比: MyISA ...
- linux 多进程并发服务__关于子进程回收的方法
以TCPServ 服务程序来说: 1)父进程:负责系统初始化,以及监听(listen),接受连接请求(accept);其中accept 默认阻塞调用. 2)每接受一个连接请求,动态新建(fork)一个 ...
- UVALive 3958 Weird Numbers (负进制数)
Weird Numbers 题目链接: http://acm.hust.edu.cn/vjudge/contest/129733#problem/F Description Binary number ...
- 2018-2019-2 20175214 实验四《Android程序设计》实验报告
实验四<Android程序设计>实验报告 一.前期准备 安装Android Studio 参考http://www.cnblogs.com/rocedu/p/6371315.html#SE ...
- python的filter,reduce,map
1.filter filter(func,iter) 只能处理一个参数(iter),仅仅将满足func方法的数值过滤出来 如: a = [,,,,] list(filter(lambda x:x> ...
- 使用innobackupex基于从库搭建级联从库及一两从
使用innobackupex基于从库搭建mysql主从架构 现有的架构是一主一从,版本为Mysql5.6.37.实施要求是:利用从库,搭建第二个从库,版本为5.7.21 主库:192.168.1.21 ...
- Catalan numbers
w https://en.wikipedia.org/wiki/Catalan_number 路径规划
- Vue实战:音乐播放器(一) 页面效果
先看一下效果图 首页 歌单详情页 歌手列表 歌手详情页 排行页面 榜单的详情页(排序样式) 搜索页面 搜索结果 播放器内核 歌词自动滚动 播放列表 用户中心