配置

master  192.168.2.21    5432
slave 192.168.2.22 5432
目录 /var/lib/pgsql/10/data/

配置主库

配置用户

psql
create role rep login replication encrypted password '1qaz2wsx';

配置访问权限 pg_hba.conf

在/var/lib/pgsql/10/data/pg_hba.conf增加

host    replication rep     192.168.2.22/32     md5

配置同步文件

cd /var/lib/pgsql/10/data/

vi recovery.done

recovery_target_timeline = 'latest'
standby_mode = on
primary_conninfo = 'host=192.168.2.21 port=5432 user=rep password=1qaz2wsx'
# recovery_min_apply_delay = 0 #延迟多少分钟应用,用户可以配置延迟的备库,例如给一点误操作的缓冲时间。在备库不会这么早被应用。

启动主机

配置从库

创建目录

安装从机之后,不要初始化和启动数据库

mkdir /var/lib/pgsql/10/data/
chown postgres:postgres /var/lib/pgsql/10/data/
chmod 700 /var/lib/pgsql/10/data/

同步主库数据

su - postgres
pg_basebackup -D /var/lib/pgsql/10/data/ -F p -X stream -h 192.168.2.21 -p 5432 -U rep

修改配置文件

根据从机配置适当修改/var/lib/pgsql/10/data/postgresql.conf

配置recovery.conf

cd /var/lib/pgsql/10/data/
mv recovery.done recovery.conf

启动从库

service postgresql-10 restart

流复制节点的状态监控

主库

su - postgres
psql
postgres=# \x
Expanded display is on. postgres=# select pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), sent_lsn)) as sent_delay,
pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), write_lsn)) as write_delay,
pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), flush_lsn)) as flush_delay,
pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn)) as replay_delay,
*
from pg_stat_replication; -[ RECORD 1 ]----+------------------------------
sent_delay | 0 bytes
write_delay | 0 bytes
flush_delay | 0 bytes
replay_delay | 0 bytes
pid | 25628
usesysid | 16399
usename | rep
application_name | walreceiver
client_addr | 192.168.2.22
client_hostname |
client_port | 59674
backend_start | 2018-01-03 17:57:00.690789+08
backend_xmin |
state | streaming
sent_lsn | 0/F787EA30
write_lsn | 0/F787EA30
flush_lsn | 0/F787EA30
replay_lsn | 0/F787EA30
write_lag | 00:00:00.000259
flush_lag | 00:00:00.013562
replay_lag | 00:00:00.013563
sync_priority | 0
sync_state | async

从库

进入数据库

su - postgres
psql

查看当前WAL应用是否暂停

postgres=# select pg_is_wal_replay_paused();
-[ RECORD 1 ]-----------+--
pg_is_wal_replay_paused | f f表示没有暂停,t表示暂停

查看WAL接收LSN点

postgres=# select pg_last_wal_receive_lsn();
-[ RECORD 1 ]-----------+-----------
pg_last_wal_receive_lsn | 0/FFA88FB8

查看WAL应用LSN点

postgres=# select pg_last_wal_replay_lsn();
-[ RECORD 1 ]----------+---------
pg_last_wal_replay_lsn | 1/1EC488

查看wal receiver的统计信息

postgres=# \x
Expanded display is on. postgres=# select * from pg_stat_get_wal_receiver();
-[ RECORD 1 ]---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
pid | 11648
status | streaming
receive_start_lsn | 0/3A000000
receive_start_tli | 1
received_lsn | 1/2DE1E28
received_tli | 1
last_msg_send_time | 2018-01-04 17:20:38.645492+08
last_msg_receipt_time | 2018-01-04 17:20:38.640939+08
latest_end_lsn | 1/2DE1E28
latest_end_time | 2018-01-04 17:20:38.645492+08
slot_name |
conninfo | user=rep password=******** dbname=replication host=192.168.2.21 port=5432 fallback_application_name=walreceiver sslmode=prefer sslcompression=1 krbsrvname=postgres target_session_attrs=any

暂停WAL的应用

select pg_wal_replay_pause();
-[ RECORD 1 ]-------+-
pg_wal_replay_pause | postgres=# select pg_is_wal_replay_paused();
-[ RECORD 1 ]-----------+--
pg_is_wal_replay_paused | t postgres=# select * from pg_stat_get_wal_receiver();
-[ RECORD 1 ]---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
pid | 11648
status | streaming
receive_start_lsn | 0/3A000000
receive_start_tli | 1
received_lsn | 1/71D3E88
received_tli | 1
last_msg_send_time | 2018-01-04 17:23:52.302411+08
last_msg_receipt_time | 2018-01-04 17:23:52.297611+08
latest_end_lsn | 1/71D3E88
latest_end_time | 2018-01-04 17:23:52.302411+08
slot_name |
conninfo | user=rep password=******** dbname=replication host=192.168.2.21 port=5432 fallback_application_name=walreceiver sslmode=prefer sslcompression=1 krbsrvname=postgres target_session_attrs=any

恢复WAL的应用

postgres=# select pg_wal_replay_resume();
-[ RECORD 1 ]--------+-
pg_wal_replay_resume | postgres=# select pg_is_wal_replay_paused();
-[ RECORD 1 ]-----------+--
pg_is_wal_replay_paused | f

注意事项

防止主库wal文件被删除,从库没有接收到

方法有:使用slot、配置足够大的wal keep、wal归档。

slot

配置方法

主 postgresql.conf
max_replication_slots = 10 备 recovery.conf
primary_slot_name = ''

当备库挂了或者不再使用,而忘记删除对应的SLOT时,可能导致主库WAL无限膨胀。

wal keep

配置方法

主 postgresql.conf
wal_keep_segments = 1024

会导致主库的WAL预留足够的个数,占用一定空间(walkeepsegments*16M
= 16G)。

wal归档

配置主库的归档,同时备库需要能获取到已归档的WAL文件。

配置方式

主 postgresql.conf
archive_mode = on
archive_command = '......' 备 recovery.conf
restore_command = '....'

同步账号密码的安全性

由于recovery.conf是明文,需要保护好recovery.conf文件的访问权限
或者限制只允许特定的从机访问

postgres--流复制的更多相关文章

  1. Postgressql高可用(pgpool+异步流复制)

    文档结构: 由于博主之前是Oracle dba,oracle 高可用一般是rac,以及搭建ADG,一个是基于实例的高可用,一个是基于数据的容灾,甚至也有rac+adg的方式.Postgres有同步和异 ...

  2. postgres配置主从流复制

    postgres主从流复制 postgres在9.0之后引入了主从的流复制机制,所谓流复制,就是从库通过tcp流从主库中同步相应的数据.postgres的主从看过一个视频,大概效率为3w多事务qps. ...

  3. postgres主从基于流复制

    环境: CentOS Linux release 7.6.1810 (Core) 内核版本:3.10.0-957.10.1.el7.x86_64 node1:192.168.216.130 node2 ...

  4. pgpool-II主备流复制的架设

    1.环境 OS: CentOS release 6.4 (Final) DB: postgresql 9.3.6 pgpool服务器: pgpool 172.16.0.240 数据库主服务器:mast ...

  5. 再不了解PostgreSQL,你就晚了之PostgreSQL主从流复制部署

    前言 在MySQL被收购之后,虽然有其替代品为: MariaDB,但是总感觉心里有点膈应.大家发现了另一款开源的数据库: PostgreSQL. 虽然centos自带版本9.2也可以用,但是最近的几次 ...

  6. 20181219-PostgreSQL 流复制监控脚本

    PostgreSQL 流复制监控脚本 https://github.com/AndyYHM/Writing/blob/PostgreSQL/20181219-PostgreSQL%20Stream%2 ...

  7. postgresSQL主从流复制安装

    命令行运维: https://blog.csdn.net/zhangzeyuaaa/article/details/77941039 安装流程: 先准备类库: yum -y install readl ...

  8. PostgreSQL数据库单机扩展为流复制

    primary:10.189.102.118 standby:10.189.100.195 1. 配置ssh互信机制 在primary主库执行 $ ssh-keygen -t rsa $ cp ~/. ...

  9. PostgreSQL流复制

    原理机制 参考--https://yq.aliyun.com/articles/51009 主备总体结构 PG主备流复制的核心部分由walsender,walreceiver和startup三个进程组 ...

  10. PostgreSQL流复制参数max_wal_senders详解

    转自:http://my.oschina.net/Kenyon/blog/152234PostgreSQL 9.2.4 主机:192.25.10.76 从机:192.25.10.71 做postgre ...

随机推荐

  1. FineReport——巧妙实现类tab布局

    在FR中,表达form支持局部刷新和tab布局,在报表中,不能做到这样,只能舍弃一些功能来做到类似的tab布局. 首先,在参数面板放一个文本控件temp,用作一个临时值,需要设置一个默认值,而切换是通 ...

  2. 8:django sessions(会话)

    django会话 django提供对匿名会话全方位的支持,会话框架可以存储和检索每个站点访问者的任意数据.会话数据是存储在服务器端的,并且简要了发送和接受cookie的过程,cookies只包含一个s ...

  3. 字符串截取,SubString

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAk8AAACYCAIAAAByAZqHAAAYgklEQVR4nO2dL28ku5qHTS4ctuTSQf ...

  4. 前端读者 | 嗨,你知道this吗

    本文来自 @position_柚子,地址:https://juejin.im/post/5995c7a76fb9a0247a60c407 在平时的代码中,相信大家经常用到 this,可是你真的明白此 ...

  5. Ubuntu 18.04安装网易云音乐(转载)

    作为Ubuntu下唯一一款超级好用的音乐软件,必须下载. 提升为root权限后操作 0 : 网易云音乐1.0.0(该版本较为好安装)下载地址 http://s1.music.126.net/downl ...

  6. python 正则表达式匹配中文(转)

    网上的一篇文章,做了整理,作者已无从考证,谢谢了 s=""" en: Regular expression is a powerful tool for manipula ...

  7. SQL练习总结

    [SQL语句练习] 1. 表1: Person +-------------+---------+ | 列名 | 类型 | +-------------+---------+ | PersonId | ...

  8. Linux中的命令判断

    命令判断会用到三个特殊符号分号(;),&&,|| (1).分号(;) 不考虑命令的相关性,连续执行,不保证命令全部执行成功. 例: [root@xuexi ~]# ls xxxx ; ...

  9. Xamarin XAML语言教程模板视图TemplatedView(一)

    Xamarin XAML语言教程模板视图TemplatedView(一) 模板视图TemplatedView 与模板页面相对的是TemplatedView,它被称为模板视图,它的功能和模板页面类似,也 ...

  10. android 内存泄漏检测工具 LeakCanary 泄漏金丝雀

    韩梦飞沙 yue31313 韩亚飞 han_meng_fei_sha 313134555@qq.com 内存泄漏检测工具 android 内存泄漏检测工具 ======== 内存泄漏 就是  无用的对 ...