配置

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. 判断ArcSDE是否安装成功

    安装SDE后在ArcMap的Toolboxes - Data Management Tools中会新增Geodatabase Administration 即数据管理工具下面会新增地理数据库管理

  2. 第一次用python编写的小程序

    print ("*******数字游戏*********")temp = input ("猜猜小红现在心里想的是什么数字呢?")guess = int(temp ...

  3. Leetcode 之Binary Tree Inorder Traversal(43)

    树的中序遍历.先不断压入左结点至末尾,再访问,再压入右结点.注意和先序遍历的比较 vector<int> inorderTraversal(TreeNode *root) { vector ...

  4. C++智能指针: auto_ptr, shared_ptr, unique_ptr, weak_ptr

    本文参考C++智能指针简单剖析 内存泄露 我们知道一个对象(变量)的生命周期结束的时候, 会自动释放掉其占用的内存(例如局部变量在包含它的第一个括号结束的时候自动释放掉内存) int main () ...

  5. [Jsoi2011]柠檬

    Description Flute 很喜欢柠檬.它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬.贝壳一共有 N (1 ≤ N ≤ 100,000) 只,按顺序串在树枝上.为了方便,我们从 ...

  6. linux命令(12):ping命令

    1.ping网关:ping –b 192.168.1.1 2.ping指定次数:ping -c 10 192.168.1.100 3.时间间隔和次数限制的ping:ping -c 10 -i 0.5 ...

  7. Disruptor Ringbuffer

    系列译文: http://ifeve.com/disruptor/ 当有多个消费者时,(按Disruptor的设计)每个消费者各自控制自己的指针,依次读取每个Slot(也就是每个消费者都会读取到所有的 ...

  8. JMeter 中 HTTP Cookie 管理器的使用

    根据 web 应用的复杂度你可以选择创建两种类型的 JMeter 测试计划:面向点击数的或面向场景的. 创建一个面向点击数的测试计划你需要有中值统计.这些统计要包含你的应用每秒应该处理多少个独立请求的 ...

  9. Django如何从Model中获取字段名称——verbose_name

    一.背景 CRM项目重新总结一下,重写之前的项目发现有不少知识点已经忘记,所以特此来重新总结一下一便后续能够回忆起 二.代码分析 1. 核心代码 from django.conf.urls impor ...

  10. 181. Employees Earning More Than Their Managers

    The Employee table holds all employees including their managers. Every employee has an Id, and there ...