PG数据库异步流复制

PG数据库异步流复制


背景说明

  • 最近想进行一个数据库高可用课题的研究.
  • 因为之前某种原因,这次选择的是PG数据库.
  • 为了简单起见, 暂时采用PG异步流复制的场景.
  • 这次仅是为了测试, 不考虑高可用绿色切换的场景.

设置过程

  • 本次学习自如下网站:
http://blog.itpub.net/26442936/viewspace-2771065/
  • 原作者对数据非常有研究, 这里仅是进行一次简单学习与整理.

设置过程

  • 安装PG数据库.
yum localinstall *.rpm 
  • 需要主要主从库都能够准确安装上数据库.
  • 第一个数据库需要执行创建操作
# 本次是 PG13为例进行说明
systemct status postgresql-13
# 查看数据库的信息
#一般启动脚本为 /usr/pgsql-13/bin/ 数据目录为: /var/lib/pgsql/13/data
su - postgres
# 切换用户后进行数据库初始化的操作
cd /usr/pgsql-13/bin
./initdb -D /var/lib/pgsql/13/data

设置过程

  • 数据库安装完成之后需要进行流复制的初始化设置.
  • 设置的事项应该不需要太多.
#修改 postgresql.conf的设置
#主要有两处
listen_addresses ='*'
wal_level = replica
#修改pg_hba.conf的配置文件
host replication repl the_Slave_server_ip/32 md5
host replication repl the_master_server_ip/32 md5
# 注意 repl 是需要创建一个数据库的用户
# 需要使用pgsql 命令执行下来.
create role repl login replication encrypted password 'yourpassword';

设置过程

  • 需要设置.pgpass 的默认配置
vim /postgres/can/rw/.pgpass
#添加内容为:
The_ip_of_master:5432:replication:repl:$yourpassword
# 注意这个文件需要让备份库可以读写.
  • 设置完成后需要执行一下重启操作
# 注意是在主库
systemctl restart postgresql-13

设置过程

  • 主库备份
pg_basebackup -h The_ip_of_master -U repl -D /var/lib/pgsql/13/databackup -Xs -P -R
# 注意需要使用非127.0.0.1的ip不然容易出问题.
# 这里会复制一下别人的专门说法.
  • 参数说明
# /var/lib/pgsql/13/databackup是从库创建一个新目录,用来恢复主库的cluster databases
# -h 主库ip地址
# -U 指定连接主库的用户
# -D 从库复制数据的目录
# -Xs 主库备份时,以流式传输WAL日志内容
# -P 进度报告
# -R 创建一个standby.signal空文件,用于在集群中激活standby server,有这个standby.signal文件即为备库;
另外也可以把主库一些连接信息primary_conninfo写入备库postgresql.auto.conf

设置过程

  • 从库的处理
注意需要将上一步 -D 产生的目录 复制到从数据库的特定目录上面
scp -r /var/lib/pgsql/13/databackup postgres@10.110.82.185:/var/lib/pgsql/13
注意文件目录的权限和属主必须保持准确.
注意需要修改启动脚本. 修改 systemd 的service 文件里面的 数据目录
处理步骤与前面相同
systemctl status postgresql-13
vi /usr/lib/systemd/system/postgresql-13.service
修改文件.
添加核心配置文件.

设置过程

  • 注意 pg_basebackup 会产生一个文件: standby.signal
注意包含这个文件的数据目录 在PG数据库启动之后
会提示没有写入权限
如果需要改为主库, 需要移除这个文件
注意这个文件一般是空的, 需要从 postgresql.auto.conf 
复制配置文件到此目录才可以实现.
注意需要注意文件的权限,避免文件丢失权限导致无法启动.

设置过程

  • 启动从库
systemctl restart postgresql-13
  • 验证流复制是否准确
# 主库查询
select * from pg_stat_replication;
# 从库查询
select * from pg_stat_wal_receiver;

简单验证

  • 主库插入从库验证
#主库设置:
create table zhaobsh (master varchar(200))
insert into zhaobsh values ('主库自主插入')
#从库查询:
select * from zhaobsh
# 验证能够查询出结果来
原文地址:https://www.cnblogs.com/jinanxiaolaohu/p/15805648.html