PostgreSQL 之 异步流复制的实现

作者:瀚高PG实验室 (Highgo PG Lab)-波罗·

Postgresql测试版本 V9.5.7

VMware® Workstation 12 Pro

OS版本:redhat 7.4

主库:db1(192.168.80.220)

备库:db2(192.168.80.221)

PostgreSQL异步流复制的具体实现:

主库db1(192.168.80.220)配置

vi $PGDATA/postgresql.conf

================

listen_address = ‘*’

wal_level = hot_standby

max_wal_senders=2

wal_keep_segments=16

================

注解:

wal_level表示启动搭建hot Standby

max_wal_senders 设置为一个大于0的数,表示主库最多可以有多少个并发的standby

wal_keep_segments 设置为一个尽量大的值,以防止主库生成WAL日志太快,日志还没有来得及传送到standby就被覆盖,但是需要考虑磁盘空间允许,一个WAL日志文件的大小是16M。

主库创建一个超级用户来专门负责让standby连接去拖WAL日志

------

create user repl superuser password '111111';

vi  $PGDATA/pg_hba.conf,添加以下内容:

------

host    replication     repl            192.168.137.0/24         md5

允许用户repl从192.168.137.0/24网络上发起到主库的流复制,简言之即允许从库服务器连接主库去拖WAL日志数据。

主库配置很简单,到此就算结束了。

启动主库并继续配置从库。

备库db2配置

从此处开始配置备库(192.168.80.221),首先通过pg_basebackup命令行工具在从库上生成基础备份,命令如下:

rm -fr  $PGDATA/*     #做基础备份之前从库的数据目录需要手动清空

pg_basebackup -h 192.168.137.220 -U repl -F p -x -P -R -D /pgdata/data -l replbackup20180112   #生成基础备份

vi $PGDATA/postgresql.conf文件

hot_standby=on  #将hot_standby改为启用状态,如果不打开,从库不允许访问

到此为止就算配置结束了,我们现在可以启动从库,如果启动成功就说明配置成功,在从库运行

pg_ctl start -l  ./log/pg_server.log

启动后看一下日志,如果有报错可以进一步分析解决。 

备库recovery.conf 文件配置

recovery.conf 是一个配置文件,用于主库,备库切换时的参数配置

可以从 $PGHOME/share 目录下复制一份 recovery.conf.sample 到备库 $PGDATA 目录,

也可以通过pg_basebackup制定-R参数生成。

cat $PGDATA/recovery.conf

recovery_target_timeline='latest'

standby_mode = 'on'

primary_conninfo = 'user=repl password=111111 host=192.168.137.220 port=1921 sslmode=disable sslcompression=1'

里面有众多参数,关键参数注释:   

standby_mode = ''       --标记PG为STANDBY SERVER

primary_conninfo = ''   --标识主库信息

trigger_file = ''       --标识触发器文件 

主库创建表并插入数据验证异步流复制

主库下建一张表并添加几条数据: 

create table repl_t(id int);

insert into repl_t select generate_series(1,10);

查看从库同步效果:

select * from  repl_t;

验证从库是否能pg_controldata 执行删除、更新操作:

delete  from repl_t ;

update repl_t set id=2 where id=1;

流复制状态查看命令参考(一)

 可以分别看到主备库的发送接收日志的进程

ps -ef|grep -i postgres    #可以区分主备库进程

命令行工具:  

pg_controldata|grep -i state    #控制文件相关信息,也可以区分主备库

 查看主备库状态:  

select pg_is_in_recovery();   --主库为f,备库为t

流复制状态查看命令参考(二)

 主库查询流复制类型及备节点信息:  

select pid,state,client_addr,sync_priority,sync_state from pg_stat_replication;

将主库上WAL位置转换为WAL文件名和偏移量:  

select write_location from pg_stat_replication;     #获取当前在线日志

select * from pg_xlogfile_name_offset('0/F0255D0');    #标红是上条语句获取的值

 查看备库落后主库多少字节的WAL日志:  

select pg_xlog_location_diff(pg_current_xlog_location(),replay_location) from pg_stat_replication;   

查看备库接收WAL日志和应用WAL日志的状态:  

select * from pg_last_xlog_receive_location();

select * from pg_last_xlog_replay_location();  

select * from pg_last_xact_replay_timestamp();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值