PG高可用之主从流复制+keepalived 的高可用

0    1168    3

Tags:

👉 本文共约4059个字,系统预计阅读时间或需16分钟。

简介

常见的高可用架构:

通过keepalived 来实现 PostgreSQL 数据库的主从自动切换,以达到高可用。当主节点宕机时,从节点可自动切换为主节点,继续对外提供服务。

在这一方案中Keepalived程序主要用来探测PostgreSQL主库是否存活,如果Keepalived主节点或主库故障,Keepalived备节点将接管VIP 并日激活流复制备库.从而实现高可用。

Keepalived的介绍:

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

PG高可用之主从流复制+keepalived 的高可用

环境架构

IP地址操作系统主机名角色端口说明
172.72.6.6CentOS 7.6lhrpg66主库5433安装postgesql 13.3 + keepalived v1.3.5
172.72.6.7CentOS 7.6lhrpg67从库5433安装postgesql 13.3 + keepalived v1.3.5
172.72.6.8VIP在pg66和pg67之间进行漂移

PG高可用之主从流复制+keepalived 的高可用

配置主从流复制

参考:PG12高可用之1主2从流复制环境搭建及切换测试

主机环境准备

注意:该容器已安装PostgreSQL 13.3,故只需要配置主从即可,安装用户为pg13。

需要关闭其它版本的pg:

systemctl stop pg11
systemctl stop pg12
systemctl stop pg94
systemctl stop pg96
systemctl stop postgresql-13.service

systemctl disable pg11
systemctl disable pg12
systemctl disable pg94
systemctl disable pg96
systemctl disable postgresql-13.service

主库放开防火墙

👉 注意添加replication

主库创建复制用户

👉 创建用户需要加上replication选项。

在从库对主库进行备份

执行完成后,会产生文件standby.signal,如下:

👉 在PG12之前,-R备份结束之后会自动生成recovery.conf文件,用来做流复制判断主从同步的信息。但是从PG12开始,这个文件已经不需要了。只需要在参数文件postgresql.conf中配置primary_conninfo参数即可。

还原从库

修改从库primary_conninfo参数

启动从库

主库进程:

从库进程:

查询复制状态

主库查询复制状态:

pg_stat_replication是一个视图,主要用于监控PG流复制情况。在这个系统视图中每个记录只代表一个slave。因此,可以看到谁处于连接状态,在做什么任务。pg_stat_replication也是检查slave是否处于连接状态的一个好方法。

每个字段代码的含义:

• pid: 这代表负责流连接的wal_sender进程的进程ID。例如“postgres: walsender replhr 172.72.6.3(40056) streaming 0/7000148”。

• usesysid: 每个内部用户都有一个独一无二的编号。该系统的工作原理很像UNIX。 usesysid 是 (PostgreSQL) 用户连接到系统的唯一标识符。

• usename: (不是用户名, 注意少了 r),它存储与用户相关的 usesysid 的名字。这是客户端放入到连接字符串中的东西。

• application_name:这是同步复制的通常设置。它可以通过连接字符串传递到master。

• client_addr: 它会告诉您流连接从何而来。它拥有客户端的IP地址。

• client_hostname: 除了客户端的IP,您还可以这样做,通过它的主机名来标识客户端。您可以通过master上的postgresql.conf中的log_hostname启用DNS反向查找。

• client_port: 这是客户端用来和WALsender进行通信使用的TPC端口号。 如果不本地UNIX套接字被使用了将显示-1。

• backend_start: 它告诉我们slave什么时间创建了流连接。

• state: 此列告诉我们数据的连接状态。如果事情按计划进行,它应该包含流信息。

• sent_lsn:这代表发送到连接的最后的事务日志的位置。已经通过网络发送了多少WAL?

• write_lsn: 这是写到standby系统磁盘上最后的事务日志位置。已向操作系统发送了多少WAL?( 尚未 flushing)

• flush_lsn: 这是被刷新到standby系统的最后位置。(这里注意写和刷新之间的区别。写并不意味着刷新 。)已经有多少WAL已 flush 到磁盘?

• replay_lsn: 这是slave上重放的最后的事务日志位置。已重放了多少WAL,因此对查询可见?

• sync_priority: 这个字段是唯一和同步复制相关的。每次同步复制将会选择一个优先权 —sync_priority—会告诉您选择了那个优先权。

• sync_state: 最后您会看到slave在哪个状态。这个状态可以是async, sync, or potential。当有一个带有较高优先权的同步slave时,PostgreSQL会把slave 标记为 potential。

人们经常说 pg_stat_replication 视图是primary 端的,这是不对的。该视图的作用是揭示有关wal sender 进程的信息。换句话说:如果你正在运行级联复制,该视图意味着在 secondary 复制到其他slaves 的时候, secondary 端的 pg_stat_replication 上的也会显示entries ( 条目 )

从库查询wal日志接收状态:

PostgreSQL数据库配置

在主库创建表sr_delay,后续Keepalived每探测一次会刷新这张表的last_alive字段为当前探测时间,这张表用来判断主备延迟,数据库故障切换时会用到这张表。

直接在主库执行,备库会自动同步:

配置keepalived

安装

配置keepalived

以下所有脚本在主备库都创建:

keepalived.conf

以上是Keepalived主节点的配置,Keepalived备节点的priority参数改成90,其余参数配置一样。

check_pg.sh

对主从PG 状态进行监控,监控脚本 check_pg.sh:

此脚本每隔10秒执行一次,执行频率由keepalived.conf配置文件中interval参数设置,脚本主要作用为:
① 检测主库是否存活。
② 更新sr_delay表last_alive字段为当前探测时间。

③ 若主库不可用,则应该关闭主库的keepalived服务。

failover.sh

主库挂掉后,keepalived调用执行切换脚本 failover.sh进行主备切换,Keepalived备节点激活成主节点后触发notify_master参数定义的/etc/keepalived/scripts/failover.sh脚本。

当异步流复制主库故障时,流复制的备库延迟时间在指定范围内才进行主备切换,如果备库延迟时间超出指定范围则不进行主备切换。

赋权

启动keepalived

查看状态:

验证高可用

停止主库的数据库服务

查看日志:

在主库关闭后,检测3次,即30秒之后,发生切换,此时备库切换为主库,VIP也在此时漂移到备库:

此时,可以修复源主库:

启动后,可以看到源主库作为新备库存在,新主备架构同步正常。

关闭主库的OS

过程和“停止主库的数据库服务”基本一样,主库又回到了lhrpg66。

关闭主库的keepalived

若关闭主库的keepalived进程,那么,备库会立马进行切换为主库:

关闭备库的数据库或keepalived服务或OS

经过测试,无论是关闭备库的pg数据库,还是关闭备库的keepalived,亦或关闭备库的OS,然后重启相关服务,对这个架构没有影响。

总结

1、挂掉的主库若重启作为主库的话,在启动之前需要配置standby.signal文件,若启动之前没有配置standby.signal文件,而是以主库的角色启动,那么需要重新关闭,然后按照如下步骤修复,否则启动过程会报错“requested timeline 2 is not a child of this server's history”:

2、总体感受,keepalived可维护性不强,并不建议生产环境使用。

3、keepalived只是解决了高可用中的单点故障问题(故障可以自动切换),并不提供负载均衡、读写分离等特性。

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

19 − 19 =

 

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部