系列文章目录
第一章 《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


782

被折叠的 条评论
为什么被折叠?



