目录
说明:
1.准备两个主机
2.分别安装pgsql数据库
3.主库配置:
①.初始化数据:
②.创建用于主从同步的账户:
③.修改pg_hba.conf文件:
④.修改postgresql.conf文件:
⑤.重启主库:
4.从库配置:
①.同步主库目前所有数据:
②.启动从库:
5.验证是否同步:
6.主从切换准备:
①.创建网卡(主从相同操作):
②.重启网络服务(主从相同操作):
③.关闭从库的新建的网络:
7.利用ip飘逸实现主从切换:
①.关闭主库、网卡:
②.开启从库网卡:
③.主库配置recovery.conf文件(host为原从库ip):
④.配置从库为主库:
⑤.启动原主库:
说明:
/var/opt/rh/rh/rh-postgresql10/lib/pgsql/data/ 此地址为数据库安装地址。
/opt/rh/rh-postgresql10/root/usr/bin/ 此地址为数据库命令sh文件地址
1.准备两个主机
250 主库
251 从库
(主从切换后则主从关系调换)
2.分别安装pgsql数据库
安装完成后,分别配置两个数据库可被哪些网段访问(从库需要在4.①步骤完成后执行此操作)
vi /var/opt/rh/rh-postgresql10/lib/pgsql/data/pg_hba.conf
在ipv4下增加
host all all 192.168.254.0/24 md5
以下步骤,除非必要,都在postgres用户下操作,如果使用root用户操作,
需要注意将data目录下所有文件chown给postgres用户
3.主库配置:
①.初始化数据:
/opt/rh/rh-postgresql10/root/usr/bin/postgresql-setup initdb
②.创建用于主从同步的账户:
postgre用户进入psql模式su - postgres
创建用户 create role testrep login replication encrypted password 'pwd@123';
③.修改pg_hba.conf文件:
vi /var/opt/rh/rh-postgresql10/lib/pgsql/data/pg_hba.conf
# 在配置文件中追加从库访问限制,允许从库发起流复制
host replication testrep 192.168.254.251/32 trust
④.修改postgresql.conf文件:
vi /var/opt/rh/rh-postgresql10/lib/pgsql/data/postgresql.conf
listen_address = '*' # 监听所有ip
port = 5432 # 端口
max_connections = 500 # 最大连接时间,必须要小于从库的配置
wal_level = replica # 该级别支持wal归档和复制
max_wal_senders = 5 # 并发的从库数量
wal_keep_segments = 500 # 默认是0,代表主库wal日志文件保存的个数,设置数量多一点可以防止主库生成日志太快而被覆盖的情况发生
wal_sender_timeout = 3min # 流复制超时时间
⑤.重启主库:
systemctl start rh-postgresql10-postgresql
4.从库配置:
①.同步主库目前所有数据:
切换到postgres用户:
pg_basebackup -h 192.168.254.250 -U testrep -F p -X stream -P -R -D /var/opt/rh/rh-postgresql10/lib/pgsql/data/ -l backup0001 -W
输入testrep用户的密码
参数说明:
-h指定连接的数据库的主机名或 IP 地址。
-U指定连接的用户名。
-F指定了输出的格式,支持p(原样输出)或者t(tar格式输出)。
-X表示备份开始后,启动另一个流复制连接从主库接收WAL日志。
-P表示允许在备份过程中实时的打印备份的进度。
-R表示会在备份结束后自动生成recovery.conf文件。
-D指定备份写入的数据目录,需要与数据库配置的数据库目录一致,初次备份之前从库的数据目录需要手动清空。
-l表示指定一个备份的标识。
-W强制密码提示输入
②.启动从库:
systemctl restart rh-postgresql10-postgresql
5.验证是否同步:
主库:
postgres用户进入psql模式,输入sql查询:
SELECT client_addr,sync_state FROM pg_stat_replication
查询结果是否有从库ip进同步状态
在主库创建库表,插入数据。
从库:
postgres用户进入psql模式
查看主库创建的库表及数据是否已经同步到从库
6.主从切换准备:
①.创建网卡(主从相同操作):
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-eth0:1
vi ifcfg-eth0:1
修改DEVICE 与NAME为新网卡名字
修改ip地址为需要飘逸的ip(保持主从两库一致)
②.重启网络服务(主从相同操作):
service network restart
③.关闭从库的新建的网络:
ifdown eth0:1
7.利用ip飘逸实现主从切换:
①.关闭主库、网卡:
systemctl stop rh-postgresql10-postgresql
ifdown eth0:1
②.开启从库网卡:
ifup eth0:1
③.主库配置recovery.conf文件(host为原从库ip):
cd /var/opt/rh/rh/rh-postgresql10/lib/pgsql/data/
vi recovery.conf
recovery_target_timeline = 'latest'
standby_mode = on
primary_conninfo = 'host=192.168.254.251 port=5432 user=testrep password=pwd@123'
④.配置从库为主库:
使用postgre用户执行命令
/opt/rh/rh-postgresql10/root/usr/bin/pg_ctl promote -D /var/opt/rh/rh-postgresql10/lib/pgsql/data/
修改原从库pg_hba.conf文件
vi /var/opt/rh/rh-postgresql10/lib/pgsql/data/pg_hba.conf
将允许流复制的ip改为192.168.254.250(原主库ip)
host replication testrep 192.168.254.250/32 trust
⑤.启动原主库:
使用postgre用户执行命令
/opt/rh/rh-postgresql10/root/usr/bin/pg_ctl start -D /var/opt/rh/rh-postgresql10/lib/pgsql/data/
以上完成pgsql主从热备,并且通过ip飘逸实现主从切换
上述步骤是手工实现,可自行编写脚本配合ip漂移处理关机、开机、等情况的主备切换;目前经过测试,只有在两台都关机然后先启动备机的情况下会造成问题。
大致原因应该是在都都关机的时候,原主机比原备机后关闭,在备机被关闭后,有了变动导致。可自行解决