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
版权声明:本文标题:Docker实现Timescale+pgpool-II复制的高可用(六) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1730075363a1221705.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论