5、pgpool-II高可用性(一)数据库的高可用性
1|0一、实现原理
使用 pgpool-II 软件;我们常用来实现流复制的高可用性;备库只读的,不可写;就是当主库出现问题时;需要把备库自动激活为主库;来接管服务。
这在其他高可用软件也有这功能,而 pgpool-II 在配置文件 pgpool.conf 中提供配置项 failover_command 。让用户配置一个脚本,当发生故障切换时,执行该脚本。
2|0二、示例演练
本示例采用 PostgreSQL12 + pgpool-II4。
演练目的:
- 搭建 pgpool 集群
- 测试数据库的高可用性
- 修复 primary 节点重新加入集群
2|12.1、环境规划
1、PostgreSQL库的IP/Port规划
|主机名|角色|ip|端口|数据目录|
|:----😐:----|:----😐:----|:----😐:----|:----😐:----|:----😐:----|
|node3|pgpool|192.168.1.221|9999| |
|node3|primary|192.168.1.221|6000|/data1/postgres/data|
|node4|standby|192.168.1.202|6000|/data1/postgres/data|
2、数据库用户规划
|用户|密码|用途详情|
|:----😐:----|:----😐:----|:----😐:----|
|postgres|123456|用于在线恢复|
|replica|replica|流复制用户|
|pgpool|123456|Pgpool-II health check (health_check_user) replication delay check (sr_check_user)|
2|22.2、数据库环境准备
1、安装 PostgreSQL 软件
N/A
2、安装 pgpool-II 软件
查看 《 pgpool-II安装 》
本示例涉及到在线恢复;需要安装 pgpool_recovery
3、配置 PostgreSQL 数据库
primary 节点操作
创建数据库用户
配置归档
搭建流复制是不需要配置归档;但是在线恢复需要归档日志。
4、搭建流复制
5、配置 ssh 互信
在上面讲到的 实现原理,使用Pgpool-II的自动故障转移和在线恢复;需要 pgpool 服务免密码在各个机器上执行;以及后续在在线恢复功能;这里我们使用 postgres 操作用户。
6、配置 pgpool
可以查考 《 pgpool 配置 》;这里我们是用 postgres 操作用户进行安装
配置环境变量
1、设置 pcp 的管理用户/密码文件 pcp.conf
“pcpadm/pgpool123”
2、配置 pool_hba.conf
用于认证用户登录方式,如客户端IP限制等,类似于postgresql的pg_hba.conf文件
3、生成 pool_passwd
pgpool 密钥文件;通过 pgpool 访问需要用户验证;
这里暂用数据库用户 pgpool
4、配置.pgpass
使用pgpool-II进行故障库自动切换(failover)、或在线恢复(online recovery)(在线恢复:主库故障后切换,原主库恢复后变更为备库。注意是 Online recovery,而不是自动恢复,需要手工执行命令恢复),需要能够无密码 SSH 访问其他 PostgreSQL 服务器。为了满足此条件,我们需要在每个 PostgreSQL 服务器上,在 postgres 用户的 home file下创建了.pgpass 文件,并修改器文件权限为600
若设置 pg_hba.conf 的该网段免密码验证 trust;可以忽略该步骤
5、配置 pcp 的 .pcppass
需要 follow_master_command 脚本情况下,由于此脚本必须在不输入密码的情况下执行pcp命令,所以我们在 postgres 用户的home directory下创建.pcppass
6、配置pgpool.conf
7、配置 failover_command 脚本
2|32.3、启动 pgpool
2|42.4、测试高可用性
1、备份自动激活为主库
我们先把主库停掉,看看备库是否可以激活为主库;
测试结果: 备库成功激活为新主库
从上面的查询结果可以看到 “node_id=1”的 role 变成了 “primary”
2、原主库重加回集群
现在我们把原主库加回集群,变成备库。后面再演示 online recovery。先手动执行
1、同步时间线
202 备库提升为新主库;其时间线 +1;与 221 不同步;这是需要使用pg_rewind同步数据
2、配置 postgresql.conf
3、启动 postgresql
后续讲解online recovery。未完待续...
__EOF__

本文链接:https://www.cnblogs.com/lottu/p/14069484.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架