admin管理员组

文章数量:1666586

Docker实现Timescale+pgpool-II复制的高可用

    • 一、pgpool-II简介
    • 二、参考文件
    • 三、注意
    • 四、具体步骤
      • 1.运行普通容器
      • 2.将容器内的两个文件夹拷贝出来
      • 3.修改初始化脚本
        • (1)修改pgpool_setup.sh脚本文件
        • (2)修改entrypoint.sh脚本文件
      • 4.修改配置文件
        • (1)修改pool_passwd
        • (2)配置pgpool.conf文件
        • (3)配置pool_hba.conf文件
        • (4)配置pcp.conf文件
        • (5)创建failover.sh脚本文件,修改权限777
        • (6)创建a.sh脚本文件,修改权限777
      • 5.run一个新的容器,将文件挂载进去
      • 6.设置 ssh免密登录
        • (1)在pgpool容器中下载openssh
        • (2)在pgpool容器内部生成密钥对
        • (3)将容器内部的文件拷贝至容器外部
        • (4)使用免密登录
      • 7.测试:
        • (1)初始正常节点
        • (2)故障迁移--宕掉主机,备机提升为primary
        • (3)故障恢复--将宕掉的主机重新以stanbdy的身份加入到pgpool
            • a.我对该添加节点命令的疑惑与理解
      • 8.错误:
          • (1)连接错误
          • (2)pgpool容器重启不了
          • (3)故障恢复——>无`/tmp/.s.PGSQL.9898`文件错误。

一、pgpool-II简介

pgpool-II的作用,可以以redis的sentinel作参考,都是为了完成主从复制的高可用,实现故障迁移。对于Timescale,或者PostgreSQL数据库来说,基于流复制的故障迁移,有pgpool,pacemaker+corosync等解决方案。这里选择了pgpool,而pgpool-I已经被弃用,所以自然而然的选择了pgpool-II中间件技术。

pgpool-II可以看作一个,介于服务器和客户端之间的中间件,对应数据库服务器来说,它就相当于客户端;对于客户端来说,它就相当于服务器。

二、参考文件

配置流程及配置文件参考:
Postgresql流复制+pgpool实现高可用
PGPool-II+PG流复制实现HA主备切换
完整配置文件参考:pgpool-II 手册
入门教程参考:pgpool-II 入门教程
官方网站:pgpool Wiki

三、注意

该文章,是基于上篇文件的基础上进行配置,已经配置好了Timescale数据库的主从异步流复制,是在此基础上完成进一步的故障迁移的。

上篇文章参考:Docker实现TimescaleDB 基于异步流的主从复制(四)

四、具体步骤

1.运行普通容器

docker run postdock/pgpool:latest

2.将容器内的两个文件夹拷贝出来

docker cp 容器id:/usr/local/etc /data/pgpool
docker cp 容器id:/usr/local/bin/pgpool  /data/pgsh

解释:将对应容器id内部的冒号后的文件内容,拷贝到容器外部,即第二个文件中。比如上例,将容器id内部的/usr/local/bin/pgpool文件夹内容,拷贝到容器外部/data/pgsh文件夹中。所以,容器内部的地址不能随意改变,容器外部的文件地址可根据需求自定义。

注意docker cp 容器外部地址 容器id:容器内部地址,即将两个地址反过来,是将容器外部的文件拷贝到容器内部。

3.修改初始化脚本

(1)修改pgpool_setup.sh脚本文件

A.pgpool_setup.sh文件的cp -f /var/pgpool_configs/pgpool.conf $CONFIG_FILE前用#注释,一般情况下,位于配置文件的第三行,即:

# cp -f /var/pgpool_configs/pgpool.conf $CONFIG_FILE

原因:该版本docker容器重启时,会初始化配置文件,该行的作用就是初始化配置文件,将该行注释,即重启docker容器时,不会改变配置文件。
B. 再将该文件以下这行注释,位于pgpool_setup.sh文件的第五行

# echo "host all all 0.0.0.0/0 md5" > $HBA_FILE

原因:该行的作用,是每次重启docker容器时,默认将host all all 0.0.0.0/0 md5语句输入到pool_hba.conf文件中,导致无法修改该文件(即每次修改该文件后,重启docker容器,该文件又会回复到默认状态)。

(2)修改entrypoint.sh脚本文件

entrypoint.sh 文件的最后一句后面添加:

gosu postgres /usr/local/bin/pgpool/pgpool_start.sh >> /usr/local/etc/pgpool.log

原因:将配置文件输出到/usr/local/etc/pgpool.log文件中,但目前不知什么原因,文件可以被创建出来,但内里无日志。

4.修改配置文件

(1)修改pool_passwd

打开配置文件,其中应该会有之前在PostgreSQL中,配置的postgres账号,以及其密码123456的md5格式,即:

postgres:md5a3556571e93b0d20722ba62be61e8c2d

所以不用修改该文件。如果没有,可去对应数据库用select usename,passwd from pg_shadow;语句查询。
同时,该配置文件会自动添加一行数据:

replication_user:md587cb5f1bfe7a883399a0b24a741e252c

这也是我们在上一篇中,配置该用户的原因。如果不在上篇文章中配置,在此时配置应该也是可以的(未测试)。
上篇文章参考:Docker实现TimescaleDB 基于异步流的主从复制(四),其中主机配置的第6小节:配置pgpool用户。

(2)配置pgpool.conf文件
listen_addresses = '*'

port = 9999

pcp_socket_dir = '/tmp'

# 配置主节点
backend_hostname0 = '192.168.50.34' #主机ip
backend_port0 = 5432
backend_weight0 = 1 #loadbalance不开启,无效
backend_data_directory0 = '/var/lib/postgresql/9.5/main'
backend_flag0 = 'ALLOW_TO_FAILOVER'

# 配置从节点
backend

本文标签: TimescaleDockerIIpgpool