暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PG级联流复制部署步骤

IT那活儿 2022-09-04
1907

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!


  
现在业务生产库使用的是ORCLE—DG架构,目前计划使用postgresql作为去O替代品,由于主库承受的系统压力较大,也会使用一主多从的情况,为了减轻主库压力,需要增加从库个数这时就可以使用级联流复制增加从库,下面介绍具体部署步骤。

原理图:

主库配置

1. 配置postgresql.conf参数

使用命令找到postgre进程:

ps -ef | grep postgres

复制目录,cd进入:

cd /var/lib/pgsql/13/data/

vi postgresql.conf

修改下列参数:

wal_level = hot_standby

max_wal_senders = 5

hot_standby = on

2. 修改pg_hba.conf文件

Pg_hba.conf文件在postggresql.config同一目录下:

vi pg_hba.conf

新增一行,允许复制用户访问主库:

host all             all             0.0.0.0/0               md5

3. 新建replication_user用户

create user replication_user replication password '123456';

Master=>Slave1异步流复制配置

1. 在slave1的主机上执行 pg_basebackup

pg_basebackup -h 192.168.XX.132 -U replication_user -D var/lib/pgsql/13/data2/ -Xs -P -R

2. 执行命令后,主库的一些连接信息会自动写入写入备库postgresql.auto.conf文件,注释掉这些内容.

vi postgresql.auto.conf

#
primary_conninfo = 'user=replication_user password=123456
channel_binding=prefer host=192.168.xx.132 port=5432
sslmode=prefer sslcompression=0
ssl_min_protocol_version=TLSv1.2 gssencmode=prefer
krbsrvname=postgres target_session_attrs=any'

3. 配置postgresql.conf参数

vi postgresql.conf

修改primary_conninfo参数为:

user=replication_user passfile=/var/lib/pgsql/.pgpass 
host=192.168.XX.132 port=5432 application_name=slavedb1

4. 新增.pgpass密码文件

vi ~/.pgpass

#
写入

192.168.XX.132:5432:replication:replication_user:123456

#
修改权限

chmod 0600 ~/.pgpass

5. 开启slavedb1的postgres服务进程

/usr/pgsql-13/bin/pg_ctl -D /var/lib/pgsql/13/data2/ start

查看日志:

Slave1=>Slave2异步流复制配置

1. 在slave1的主机上执行 pg_basebackup基础备份与恢复。

2. 执行命令后,步骤同2.2,注释掉postgresql.auto.conf多出来的内容,配置postgresql.conf参数文件。

3. 配置postgresql.conf参数

修改primary_conninfo参数为:

user=replication_user passfile=/var/lib/pgsql/.pgpass host=192.168.XX.128

port=5433 application_name=slavedb3

4. 新增.pgpass密码文件

vi ~/.pgpass

#
写入

192.168.XX.128:5433:replication:replication_user:123456

#
修改权限

chmod 0600 ~/.pgpass

5. 开启slavedb1的postgres服务进程

/usr/pgsql-13/bin/pg_ctl -D /var/lib/pgsql/13/data2/ start

查看日志:

查看级联复制状态

1. 主库查询

Select 
pid,usename,application_name,client_addr,state,sync_state,sy
nc_priority from pg_stat_replication;

2. Slave1上查询

Select 
pid,usename,application_name,client_addr,state,sync_state,sy
nc_priority from pg_stat_replication;

3. 验证数据

  • 主库操作:

create table t_sr(id int4);

Insert into t_sr values(1);

Select * from t_sr;

  • Slave1上查询:

Select * from t_sr;

  • Slave3上查询:

Select * from t_sr;

总结:

PG级联流复制可以解决主库压力或跨机房的多份数据传输的问题,一般都会和repmgr工具搭配使用,来实现基于NAS共享存储的负载均衡策略。

由于篇幅限制,本次展示的部署步骤没有repmgr的内容,所以步骤跟mysql的级联复制差不多,都是从库套从库。但PostgreSQL 借助repmgr工具管理的级联数据复制有些不同,可以从PG的从库进行数据的CLONE 制作新的从节点,然后在将从节点连接到主库,并且PostgreSQL 中的复制是stream replication 而不是类似MYSQL 的逻辑复制。

关于repmgr工具的内容,以后有机会再行展示。


本文作者:吴航舟(上海新炬王翦团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论