PostgreSQL高可用之故障转移

系列文章目录
第一章 《PostgreSQL高可用之主备复制》
第二章 《PostgreSQL高可用之主备切换》
第三章 《PostgreSQL高可用之故障转移》

1.前言

通过前两章的实践我们已经可以在主库与备库之间实现数据同步,也实践了正常情形与"数据分叉"场景下的主备切换方法。在这一章我们通过Keepalived这一网络服务软件实时监测PostgreSQL的可用状态,在发现主库不可用的情况下,通过从主节点所在服务器向备节点所在服务器转移VIP(Virtual IP Address),并提升备库为主库的方式进行了PostgreSQL故障转移,实现了PostgreSQL高可用的目标。

2.环境准备

2.1.PostgreSQL主备库

按第一章 《PostgreSQL高可用之主备复制》准备主备复制基础测试环境。

2.2.Keepalived安装

  • 主节点所在服务器IP:192.168.241.129
  • 备节点所在服务器IP:192.168.241.136

主备节点按如下方式进行安装:

# 下载源码包
$ wget https://www.keepalived.org/software/keepalived-2.3.1.tar.gz
# 解压并进入源码目录
$ tar -zxvf keepalived-2.3.1.tar.gz && cd keepalived-2.3.1

# 安装依赖
# 可根据配置、编译及安装时报错信息进行依赖安装
# 以下是测试环境使用CentOS7时需安装的依赖
$ yum install -y gcc-c++
$ yum install -y openssl-devel libnl3-devel

# 配置安装路径
$ ./configure --prefix=/home/shfirm/keepalived-2.3.1

# 编译并安装
$ make && make install

# 安装完成后部分文件目录如下
# 配置示例文件:/home/shfirm/keepalived-2.3.1/etc/keepalived/keepalived.conf.sample
# 服务控制文件:/usr/lib/systemd/system/keepalived.service

# 启动所需的keepalived.conf文件不会在安装完成后默认生成,我们先创建空的keepalived.conf
# 此时不要尝试启动,因为我们需要针对高可用目标对keepalived.conf文件进行个性化配置(不配置好的情况下也起不来)。
$ touch /home/shfirm/keepalived-2.3.1/etc/keepalived/keepalived.conf
# 创建用于存储脚本的目录
$ mkdir /home/shfirm/keepalived-2.3.1/etc/keepalived/scripts
# 创建用于存储日志的目录
$ mkdir /home/shfirm/keepalived-2.3.1/etc/keepalived/logs

3.高可用配置

3.1.名词概念

  • VRRP:虚拟路由冗余协议(Virtual Router Redundancy Protocol)是一种用于提高网络可靠性的容错协议。通过VRRP,可以在主机的下一跳设备出现故障时,及时将业务切换到备份设备,从而保障网络通信的连续性和可靠性。
  • LVS:LVS是Linux Virtual Server的缩写,即Linux虚拟服务器,是一个开源的软件项目。目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案。

3.2.配置PostgreSQL备库提升脚本

主备节点相同

# 创建PostgreSQL备库提升脚本
# PostgreSQL备库升级主库相关命令解释可参考第二章主备切换中的内容
$ touch /home/shfirm/keepalived-2.3.1/etc/keepalived/scripts/pg_standby_promote.sh
$ chmod +x /home/shfirm/keepalived-2.3.1/etc/keepalived/scripts/pg_standby_promote.sh

脚本内容:

#!/bin/bash

# 判断standby.signal文件存在且为普通文件
if [[ -f /home/shfirm/postgresql/data/standby.signal ]];then
    echo "$(date '+%F %T') 判断作为备库标识的standby.signal文件存在,开始进行备库提升为主库操作"
    docker exec -i postgres14 /bin/bash -c 'su - postgres -c "/usr/lib/postgresql/14/bin/pg_ctl promote -D /var/lib/postgresql/data"'
else
    echo "$(date '+%F %T') 作为备库标识的stand
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值