postgresql 集群_EcoXPostgreSQL高可用集群最佳实践(续)

作者简介:

何敏,目前服务于成都文武信息技术有限公司,有丰富的开发和运维经验。参与开发公司的PostgreSQL高可用系统EcoX、RDS系统,对PostgreSQL高可用系统有非常深入的了解。服务过银行、保险、电力等行业客户。

实践简介

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流复制集群架构:

640?wx_fmt=png

 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.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.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的软件。

后记和总结

至此,EcoX成功接管原来的PostgreSQL流复制集群,能够对原来的集群进行高可用管理。整个切换过程时间非常短(数据库停止、启动的时间),也不会对数据库产生其他影响,我们就可以享用数据库高可用等一系列的功能,保证数据库对外服务的连续性。

EcoX还有很多高级特色功能,例如:可以设置节点角色、节点VIP是否启用、可设置从节点个数、重启数据库、自动优化数据库配置文件等等,这里就不一一体验了,感兴趣的朋友可以到成都文武信息技术有限公司的官网下载EcoX全套资料进行了解和使用,链接:http://w3.ww-it.cn/Fileud/lists/cate_id/30。

请点击文章底部

对于接管其它高可用方案,需要正确停止集群,并且确保原先的集群管理软件不会再次启动,我们推荐的方法是在安全停机后,完整删除原先的集群管理软件。再进行ECOX的安装和配置。

640?wx_fmt=jpeg

PostgreSQL中文社区欢迎广大技术人员投稿

投稿邮箱:press@postgres.cn

640?wx_fmt=png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值