作者简介:
何敏,目前服务于成都文武信息技术有限公司,有丰富的开发和运维经验。参与开发公司的PostgreSQL高可用系统EcoX、RDS系统,对PostgreSQL高可用系统有非常深入的了解。服务过银行、保险、电力等行业客户。
1 实践简介
EcoX数据库高可用集群管理系统软件,该软件包含数据库高可用、读写分离、负载均衡、连接池等功能,能够保证业务7*24小时连续运行,保证数据零丢失。
在上期我们已经介绍过如何全新搭建一个EcoX-PostgreSQL高可用系统,期间有很多用户咨询对于已有集群,用ECOX如何接管,所以这期我们介绍如何用ECOX集群管理系统对一个已有的PostgreSQL流复制集群进行高可用改造。
对于已有的环境如下,PostgreSQL流复制集群已经工作,其环境如下:
软件版本:
操作系统 | CentOS release 6.9 (Final) |
PostgreSQL | PostgreSQL 10.1 on x86_64-pc-linux |
EcoX | EcoX-5.11.6-1.el6.x86_64.rpm |
现有PostgreSQL流复制集群架构:
2 安装过程
2.1 安装仲裁集群(略)
仲裁集群安装过程比较简单,需要注意myid的配置。如果启动失败,查看是否不是防火墙的问题。
仲裁集群最好是独立于数据库集群安装,推荐5节点集群,最低要求3个节点。
2.2 安装EcoX高可用管理系统
在所有的数据库节点都需要安装EcoX高可用关系软件,本示例中采用三台服务器作为PostgreSQL数据库节点,分别是:10.9.5.21,10.9.5.22,10.9.5.24,因此在这几个服务器上需要安装EcoX。
2.2.1 通过rpm包安装
从成都文武信息技术有限公司官网下载EcoX安装包:http://w3.ww-it.cn/Fileud/lists/cate_id/30
将安装包拷贝到每台数据库服务器,使用rpm执行安装,默认安装到/usr/EcoX:
rpm -ivh EcoX-5.12.2-1.el6.x86_64.rpm
2.2.2 环境设置
设置环境变量:
export PATH=/usr/EcoX/bin:$PATH
export LD_LIBRARY_PATH=/usr/EcoX/lib:$LD_LIBRARY_PATH
添加postgres到sudoer中:
[root@pg21 ~]# sudo echo " postgres ALL=(ALL) NOPASSWD: ALL " >> /etc/sudoers
2.2.3 修改配置文件
修改每台数据库服务器上的EcoX配置文件:/usr/EcoX/etc/EcoX.conf,配置文件的内容如下:
[root@pg21 etc]# cat ecox.conf
cluster=cluster_name
#init_role=comaster
pgcomaster_num=2
#auto_promote_slave=false
auto_promote_slave=true
#async_replication=yes
zkhost=10.9.5.20:4119,10.9.5.21:4119,10.9.5.22:4119,10.9.5.24:4119,10.9.5.35:4119,10.9.5.36:4119
zktimeout=20000
pghost=10.9.5.21
pgbin=/usr/pgsql-10/bin
pgport=5433
pgdata=/var/lib/pgsql/10/data
pgclient_net=10.9.0.0/16
pgcluster_net=10.9.0.0/16
#do_not_use_vip=true
eth_port=eth0
virtual_ip=10.9.5.200
netmask=255.255.255.0
do_not_use_comaster_vip=true
comaster_eth_port=eth0
comaster_virtual_ip=10.9.5.201
comaster_netmask=255.255.255.0
3 管理已有集群
3.1 备份数据库
有条件的情况下,最好是对数据库进行一次备份。当然对于流复制集群,其他节点的数据如果是追平的,不做备份也是可以接受的。
因为,EcoX在管理集群时不会对数据目录(data目录)做修改,不会影响数据库中历史数据。做备份,更多是一种保护手段。
3.2 添加用户
在已有集群主节点上执行添加用户的SQL命令:
postgres=# create user user_for_rewind with password 'PostgreSQL@ww-it.cn'; |
3.3 修改配置文件
3.3.1 修改postgresql.conf文件
每个数据库节点的配置文件都需要修改,可以将这些参数放到最后面,方便区分,PostgreSQL会以最后的为准:
wal_log_hints=on shared_buffers #根据物理机配置进行调整 work_mem #根据负载进行调整 temp_buffers #根据负载进行调整 maintainance_work_mem #按物理机配置进行调整 effective_cache_size #按物理机配置进行调整 wal_buffers #推荐32MB full_page_write=on #安全性高 synchronous_commit=on #安全性高 checkpoint_compeletion_target #推荐0.7~0.9,具体需要根据IO表现来分配 |
3.3.2 修改pg_hba.conf文件
每个数据库节点的配置文件都需要修改,IP段为几个流复制节点所在的网段:
hostpostgres user_for_rewind 10.9.5.0/24 trust |
3.4 依次停止数据库
先停止从节点,再停止主节点上的PostgreSQL数据库,使用pg_ctl命令停止数据库时,要加上-m fast参数,这样数据库会在停止前做一次Checkpoint,保证脏数据都刷回到磁盘:
pg_ctl -D /var/lib/pgsql/10/data -m fast stop |
3.5 依次启动EcoX
先启动主节点,再启动从节点上的EcoX软件,EcoX启动时会启动本节点的PostgreSQL数据库,并自动维护流复制关系:
ecox start |
3.6 查看节点状态
使用ecox show node查看本节点EcoX状态:
1)查看主节点10.9.5.21 EcoX状态,节点角色为master:
-bash-4.1$ ecox show node EcoX status: running Node name : node0000000000 Node role : master |
2)查看从节点10.9.5.22 EcoX状态,节点角色为comaster:
-bash-4.1$ ecox show node EcoX status: running Node name : node0000000001 Node role : comaster |
3)查看节点10.9.5.24 EcoX状态,节点角色也为comaster:
-bash-4.1$ ecox show node EcoX status: running Node name : node0000000002 Node role : comaster |
如果在ecox.conf中配置从节点个数为1,那么这个节点的角色将是slave,具体可以参考使用说明文档。
3.7 查看集群状态
在任意节点上使用ecox show cluster查看集群状态:
-bash-4.1$ ecox show cluster init cluster instance success PostgreSQL 10.1 is compatible node name : ip address | port | online --------------------------------------------------------- node0000000000: 10.9.5.21 | 5410 | TRUE node0000000001: 10.9.5.22 | 5410 | TRUE node0000000002: 10.9.5.24 | 5410 | TRUE master : node0000000000 comaster 1: node0000000001 comaster 2: node0000000002 last master: node0000000000 sync replication :node0000000001 |
4 如何替换已有的高可用集群软件
需要先停止已有高可用集群软件,再进行上面第三节的操作步骤。
4.1 pacemaker+corosync
pacemaker、corosync、pcsd等软件是和PostgreSQL数据库安装在一个节点上的,也即是说,每个PostgreSQL数据库节点上都有这些软件。下面是停止命令:
(1) 首先停止pacemaker、corosync和pcsd的服务
[root@sljc_test1 ~]# service corosync stop
[root@sljc_test1 ~]# service pacemaker stop
[root@sljc_test1 ~]# service pcsd stop
(2) 确保pacemaker、corosync和pcsd服务已经停止
[root@sljc_test1 ~]# ps -aux | grep corosync
[root@sljc_test1 ~]# ps -aux | grep pacemaker
[root@sljc_test1 ~]# ps -aux | grep pcsd
(3) 确保pacemaker、corosync和pcsd的服务不会开机启动
[root@sljc_test1 ~]# chkconfig --list | grep corosync
[root@sljc_test1 ~]# chkconfig --list | grep pacemaker
[root@sljc_test1 ~]# chkconfig --list | grep pcsd
(4) 卸载pacemaker、corosync和pcsd (这一步骤是放在安装EcoX前还是在安装并正常启动EcoX后,为了安全考虑,最好是卸载掉,避免误启动)
[root@sljc_test1 ~]# yum erase corosync
[root@sljc_test1 ~]# yum erase pacemaker
[root@sljc_test1 ~]# yum erase pcs
4.2 pgpool
pgpool是以代理的方式管理PostgreSQL集群,一般是单独部署在数据库节点之外的,采用主、备双节点的方式保证自身高可用。
因此需要先停止备用pgpool节点,再停止主用pgpool节点,分别在对应节点执行:
[root@sljc_test1 ~]# pgpool -m fast stop |
同样需要在每个节点删除PGPool的软件。
5 后记和总结
至此,EcoX成功接管原来的PostgreSQL流复制集群,能够对原来的集群进行高可用管理。整个切换过程时间非常短(数据库停止、启动的时间),也不会对数据库产生其他影响,我们就可以享用数据库高可用等一系列的功能,保证数据库对外服务的连续性。
EcoX还有很多高级特色功能,例如:可以设置节点角色、节点VIP是否启用、可设置从节点个数、重启数据库、自动优化数据库配置文件等等,这里就不一一体验了,感兴趣的朋友可以到成都文武信息技术有限公司的官网下载EcoX全套资料进行了解和使用,链接:http://w3.ww-it.cn/Fileud/lists/cate_id/30。
请点击文章底部
对于接管其它高可用方案,需要正确停止集群,并且确保原先的集群管理软件不会再次启动,我们推荐的方法是在安全停机后,完整删除原先的集群管理软件。再进行ECOX的安装和配置。
PostgreSQL中文社区欢迎广大技术人员投稿
投稿邮箱:press@postgres.cn