您的位置:首页 > 数据库

PostgreSQL 之 异步流复制的实现

2018-02-05 13:18 417 查看
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();

 

By 波罗
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: