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

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

内容简介:在 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

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


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

查看所有标签

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

Stylin' with CSS

Stylin' with CSS

Wyke-Smith, Charles / 2012-10 / $ 50.84

In this completely revised edition of his bestselling Stylin' with CSS, veteran designer and programmer Charles Wyke-Smith guides you through a comprehensive overview of designing Web pages with CSS, ......一起来看看 《Stylin' with CSS》 这本书的介绍吧!

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具