postgresql+keepalived高可用,支持VIP故障切换

一、节点信息

Ip

角色

172.18.10.76

主节点

172.18.10.119

备1节点

172.18.10.120

备2节点

172.18.10.200

VIP

二、主备关系:

主节点 > 备1  > 备2

三、Pgstgresql

1、安装数据库

tar -zxf postgresql-16.3_centos_7.5_x86_64.tar.gz

#配置环境变量与启动服务,运行以下脚本内容,请根据环境修改install_postgresql16.sh内容

APPTRACE_HOME=/opt/apptrace #解压目录

#执行安装脚本

bash install_postgresql16.sh

#设置环境变量

sudo vim /etc/profile

#将一下内容添加到/etc/profile文件中,请注意postgresql的安装位置

export PGHOME=/opt/apptrace/postgresql

export PGDATA=/opt/apptrace/postgresql/data

export PATH=$PATH:$HOME/bin:$PGHOME/bin

#修改环境变量

source /etc/profile

2、修改 postgresql.conf(主)

在 data/postgresql.conf 文件中,设置以下参数#(如果用脚本安装,可能存在多个参数,删除掉多余的):

listen_addresses = '*'

port = 5432

wal_level = logical

archive_mode = on

wal_log_hints = on

max_wal_senders= 10

wal_sender_timeout = 120s

hot_standby = on

3、修改 pg_hba.conf(主)

在 data/pg_hba.conf 文件中,添加其他节点的访问权限:

# 根据去求添加对应ip

host    replication     all             172.18.10.76/0         trust

host    replication     all             172.18.10.119/0        trust

host    replication     all             172.18.10.120/0        trust

host    all             all             172.18.10.76/0         md5

host    all             all             172.18.10.119/0        md5

host    all             all             172.18.10.120/0        md5

host    all             all             172.17.102.123/0       md5

#172.17.102.123为应用的服务地址

修改后重启服务

sudo systemctl restart postgresql.service; #重启服务

在主节点登录pgsql报一下错误,需要在变量环境里指定依赖

编辑/etc/profile和~/.bash_profile 文件,加入以下内容

export LD_LIBRARY_PATH=/data/apptrace/postgresql/lib/libpq.so.5:$LD_LIBRARY_PATH

source ~/.bash_profile

无法确定依赖目录可执行:sudo find / -name libpq.so.5 2 > /dev/null搜索

4、生成用户(主节点执行)

#如手动initdb的话请进入数据库后先执行一下3条命令

CREATE EXTENSION adminpack;

ALTER USER apptrace WITH ENCRYPTED PASSWORD 'apptrace';

GRANT ALL PRIVILEGES ON DATABASE postgres TO apptrace;

#创建复制流所用的数据库

psql -U apptrace -d postgres -c "

CREATE ROLE repl WITH REPLICATION LOGIN;

ALTER USER repl WITH ENCRYPTED PASSWORD 'repl';

"

5、生成备库 (备)

rm -rf /opt/apptrace/postgresql/data/*;

pg_basebackup -h 172.18.10.76 -U repl -R -Fp -P -D /opt/apptrace/postgresql/data;(节点2)

pg_basebackup -h 172.18.10.119 -U repl -R -Fp -P -D /opt/apptrace/postgresql/data;(节点3)

sudo systemctl restart postgresql.service;

6、检查或测试

(1)检查复制流状态

查看主节点复制流状态

psql -h 172.18.10.76 -p 5432 -U apptrace -d postgres -c "SELECT pid, usename, application_name, client_addr, state, sync_state FROM pg_stat_replication;"

结果:

查看备1节点复制流状态

psql -h 172.18.10.119 -p 5432 -U apptrace -d postgres -c "SELECT pid, usename, application_name, client_addr, state, sync_state FROM pg_stat_replication;"

结果:

(2)测试复制流是否正常

创建表格

psql -h 172.18.10.76 -p 5432 -U apptrace -d postgres -c "CREATE TABLE test_table (id SERIAL PRIMARY KEY,name VARCHAR(100))";

添加数据

psql -h 172.18.10.76 -p 5432 -U apptrace -d postgres -c "INSERT INTO test_table (name) VALUES ('Alice'), ('Bob'), ('Charlie');"  #可以多执行几次

查看数据是否添加成功

psql -h 172.18.10.76 -p 5432 -U apptrace -d postgres -c "SELECT * FROM test_table;"

查看备1和备2节点是否成功同步数据

psql -h 172.18.10.119 -p 5432 -U apptrace -d postgres -c "SELECT * FROM test_table;"

psql -h 172.18.10.120 -p 5432 -U apptrace -d postgres -c "SELECT * FROM test_table;"

四、Keepalived(所有节点执行)

1、安装keepalived

tar -zxf keepalived-2.3.1-centos7.9.tar.gz

cd keepalived-2.3.1

#如未编译  ./configure --prefix=/usr/local/keepalived

sudo make install

sudo cp /usr/local/keepalived/sbin/keepalived /etc/init.d/

sudo cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

sudo cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

2、添加keepalived信息

tar -zxf keepalived-conf.tar.gz

sudo cp -r keepalived /etc/

3、修改keepalived信息

sudo vim /etc/keepalived/keepalived.conf  #修改一下配置

interface ens33            #网卡名称

unicast_src_ip 172.18.10.76  #本机ip

unicast_peer {             # 填写集群其他节点IP

    172.18.10.119

    172.18.10.120

}

virtual_ipaddress {

    172.18.10.200         # 虚拟VIP地址

}

priority 200               # 优先级,数字越大优先级越高,建议主节点200,备1节点199,备2节点198(给故障转移修复给出充足空间)

4、修改switch_pg.sh脚本信息

sudo vim /etc/keepalived/scripts/switch_pg.sh #修改标红的数据库安装目录信息

#!/bin/bash

export LANG="en_US.UTF-8"

if [[ -f /opt/apptrace/postgresql/data/standby.signal ]];then

    su - apptrace -c "/opt/apptrace/postgresql/bin/pg_ctl promote -D /opt/apptrace/postgresql/data"

else

    echo 'The file /opt/apptrace/postgresql/data/standby.signal does not exist'

fi

5、启动keepalived

sudo systemctl start keepalived   #主节点先执行,在依次在备1和备2节点执行

执行完成后,在主节点使用ip a查看是否已有VIP地址

五、故障测试

1、停止主节点postgresql服务

sudo systemctl stop postgresql

2、查看是否正常切换

停止主节点的postgresql后,vip会切换到备2节点机器上

使用ip a命令查看VIP是否已转移到备1节点

原主节点:

原备1节点:

原主节点keepalived服务会停止

3、查看复制流是否正常

psql -h 172.18.10.200 -p 5432 -U apptrace -d postgres -c "SELECT pid, usename, application_name, client_addr, state, sync_state FROM pg_stat_replication;"

查看是否已切换成主节点

psql -h 172.18.10.200 -p 5432 -U apptrace -d postgres -c "SELECT pg_is_in_recovery()"

#  f为主节点,t为备节点

添加数据

psql -h 172.18.10.200 -p 5432 -U apptrace -d postgres -c "INSERT INTO test_table (name) VALUES ('Alice'), ('Bob'), ('Charlie');"  #可以多执行几次

查看备2节点是否成功同步数据

psql -h 172.18.10.120 -p 5432 -U apptrace -d postgres -c "SELECT * FROM test_table;"

六、故障修复(原主节点执行)

1、修改keepalived信息

sudo vim /etc/keepalived/keepalived.conf

#将priority 参数调整到比备2节点要低

priority 197

2、添加复制流,同步原备2节点

rm -rf /opt/apptrace/postgresql/data

pg_basebackup -h 172.18.10.120 -U repl -R -Fp -P -D /opt/apptrace/postgresql/data;

sudo systemctl restart postgresql.service;

3、查看复制流是否已添加

psql -h 172.18.10.120 -p 5432 -U apptrace -d postgres -c "SELECT pid, usename, application_name, client_addr, state, sync_state FROM pg_stat_replication;"

添加数据

psql -h 172.18.10.200 -p 5432 -U apptrace -d postgres -c "INSERT INTO test_table (name) VALUES ('Alice'), ('Bob'), ('Charlie');"  #可以多执行几次

查看备2节点是否成功同步数据

psql -h 172.18.10.76 -p 5432 -U apptrace -d postgres -c "SELECT * FROM test_table;"

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值