在 Docker 上搭建 pg_pool 实现 PG 主从自动切换

栏目: 编程工具 · 发布时间: 7年前

内容简介:在 Docker 上搭建 pg_pool 实现 PG 主从自动切换

接上篇文章《在 Docker 上搭建PostGreSQL流复制》,我们接着对pg_pool进行容器化,实现PG的主从自动切换。

熟悉pg_pool的同学都知道,在pg_pool探测到PG主库失败,需要提升主库时,会执行一个failover_command命令,简单地做法是可以touch一个trigger file,此trigger file对应到PG从库的recovery.conf里面的trigger_file,从而实现从库在主库失败后自动被promte为主库。在不使用容器的时候,这个目的是很容易实现的,pg_pool与从库能够同时访问一个共享路径即可,但是在容器化之后,这个目的怎么实现呢?我们是通过docker的shared-storage volume来实现的。

整体架构如下:

Host1 192.168.17.61

Host2 : 192.168.17.62

在 Docker 上搭建 pg_pool 实现 PG 主从自动切换

一、编辑pg_pool2的Dockerfile

FROM ubuntu

ENV PGP2_VER 3.6.2

RUN apt-get update && \

apt-get install -y curl    build-essential libpq-dev vim postgresql-client ssh

#

# Build pg pool2

#

RUN curl -L -o    pgpool-II-${PGP2_VER}.tar.gz    http://www.pgpool.net/download.php?f=pgpool-II-${PGP2_VER}.tar.gz    && \

tar zxvf    pgpool-II-${PGP2_VER}.tar.gz && \

cd /pgpool-II-${PGP2_VER} &&    \

./configure && \

make && \

make install && \

ldconfig && \

rm -rf /pgpool-II-${PGP2_VER}    && \

rm /pgpool-II-${PGP2_VER}.tar.gz

#

# Configure pg pool2

#

ENV PCP_USER docker

ENV PCP_PASS docker

RUN mkdir /var/log/pgpool

RUN mkdir /var/run/pgpool && \

cp /usr/local/etc/pgpool.conf.sample    /usr/local/etc/pgpool.conf && \

cp /usr/local/etc/pcp.conf.sample    /usr/local/etc/pcp.conf && \

cp    /usr/local/etc/pool_hba.conf.sample /usr/local/etc/pool_hba.conf &&    \

echo ${PCP_USER}:`pg_md5    ${PCP_PASS}` >> /usr/local/etc/pcp.conf && \

cd /usr/local/etc && \

pg_md5 -m -u $PCP_USER $PCP_PASS

EXPOSE 9999 9898

CMD [ "pgpool" , "-n" , "-d" , "-D" ]

二、创建pgpool2的docker镜像

docker build -t pgpool2 .

三、创建一个容器卷(container3)

docker create -v /dbdata --name dbstore  ubuntu /bin/true

四、编辑从库的recovery.conf

standby_mode =    'on'

primary_conninfo    = 'host=192.168.17.61 port=5436 user=repuser password=repuser    keepalives_idle=60'

trigger_file = '/dbdata/primary_down'

五、重启从库

docker run

--name pg_slv \

--volumes-from dbstore \

-v  /storage/docker/postgresql:/var/lib/postgresql \

-v /backup/postgresql:/backup \

-p 5436:5432 \

-d eg_postgresql

六、动pgpool2(container4)

docker run -it --volumes-from dbstore --name pgpool2 -p 9999:9999  -d pgpool2

注:通过将dbstore这个容器的volume都mount到从库和pgpool2的容器里面,实现了在两个容器里面共享/dbdata此路径的目的。

七、进入pgpool2的容器,修改相关参数

docker exec -it pgpool2 /bin/bash

vi /usr/local/etc/pgpool.conf

shared-storage volumenum_init_children 300

master_slave_mode = on

master_slave_sub_mode = 'stream'

failover_command = 'touch /dbdata/primary_down'

enable_pool_hba = on

pool_passwd = 'pool_passwd'

sr_check_user = 'repuser'

sr_check_password = 'repuser'

listen_addresses = '*'

backend_hostname0 = 'localhost'

backend_port0 = 5432

backend_weight0 = 1

backend_data_directory0 = '/var/lib/pgsql/data'

backend_flag0 = 'ALLOW_TO_FAILOVER'

backend_hostname1 = 'host2'

backend_port1 = 5433

backend_weight1 = 1

backend_data_directory1 = '/data1'

backend_flag1 = 'ALLOW_TO_FAILOVER'

。。。。。。any parameter you want to modify。。。。。。

vi pool_hba.conf

。。。。。。

生成 pool_password

pg_md5 --md5auth --username=postgres  --prompt

mkdir /var/log/pgpool/

八、重启pgpool2

docker restart pgpool2

九、连接pgpool

psql -h 192.168.17.62 -p 9999  -U postgres

show pool_nodes;

十、 测试主从自动切换

1 ,关闭主库

docker stop pg_pri

2, 查看从库日志,已经自动被提升为主库,并且可读写

3 ,查看pgpool的视图

show pool_nodes;

提示server失败

4 ,重连

psql -h 192.168.17.62 -p 9999  -U postgres

这个时候是连接到已打开读写模式的新主库(老从库)。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

GitHub入门与实践

GitHub入门与实践

[日] 大塚弘记 / 支鹏浩、刘斌 / 人民邮电出版社 / 2015-7 / 39.00元

本书从Git的基本知识和操作方法入手,详细介绍了GitHub的各种功能,GitHub与其他工具或服务的协作,使用GitHub的开发流程以及如何将GitHub引入到企业中。在讲解GitHub的代表功能Pull Request时,本书专门搭建了供各位读者实践的仓库,邀请各位读者进行Pull Request并共同维护。一起来看看 《GitHub入门与实践》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器