在 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

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


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

查看所有标签

猜你喜欢:

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

我看电商3:零售的变革

我看电商3:零售的变革

黄若 / 电子工业出版社 / 2018-4 / 49

在《我看电商3:零售的变革》之前,黄若先生的“我看电商”系列图书《我看电商》《再看电商》《我看电商2》,均为行业畅销书。黄若先生的图书有两大特如一是干货满满,二是观点鲜明。 “新零售”是眼下的热门词。在2017年里,数以万计的企业以“新零售”作为标识进入市场。但是社会上对“新零售“存在着各种模糊的定义和不尽相同的解读。 《我看电商3:零售的变革》中明确提出:新零售不应过分关注于渠道形式......一起来看看 《我看电商3:零售的变革》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

html转js在线工具
html转js在线工具

html转js在线工具