postgres--流复制
配置
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--流复制的更多相关文章
- Postgressql高可用(pgpool+异步流复制)
文档结构: 由于博主之前是Oracle dba,oracle 高可用一般是rac,以及搭建ADG,一个是基于实例的高可用,一个是基于数据的容灾,甚至也有rac+adg的方式.Postgres有同步和异 ...
- postgres配置主从流复制
postgres主从流复制 postgres在9.0之后引入了主从的流复制机制,所谓流复制,就是从库通过tcp流从主库中同步相应的数据.postgres的主从看过一个视频,大概效率为3w多事务qps. ...
- postgres主从基于流复制
环境: CentOS Linux release 7.6.1810 (Core) 内核版本:3.10.0-957.10.1.el7.x86_64 node1:192.168.216.130 node2 ...
- pgpool-II主备流复制的架设
1.环境 OS: CentOS release 6.4 (Final) DB: postgresql 9.3.6 pgpool服务器: pgpool 172.16.0.240 数据库主服务器:mast ...
- 再不了解PostgreSQL,你就晚了之PostgreSQL主从流复制部署
前言 在MySQL被收购之后,虽然有其替代品为: MariaDB,但是总感觉心里有点膈应.大家发现了另一款开源的数据库: PostgreSQL. 虽然centos自带版本9.2也可以用,但是最近的几次 ...
- 20181219-PostgreSQL 流复制监控脚本
PostgreSQL 流复制监控脚本 https://github.com/AndyYHM/Writing/blob/PostgreSQL/20181219-PostgreSQL%20Stream%2 ...
- postgresSQL主从流复制安装
命令行运维: https://blog.csdn.net/zhangzeyuaaa/article/details/77941039 安装流程: 先准备类库: yum -y install readl ...
- PostgreSQL数据库单机扩展为流复制
primary:10.189.102.118 standby:10.189.100.195 1. 配置ssh互信机制 在primary主库执行 $ ssh-keygen -t rsa $ cp ~/. ...
- PostgreSQL流复制
原理机制 参考--https://yq.aliyun.com/articles/51009 主备总体结构 PG主备流复制的核心部分由walsender,walreceiver和startup三个进程组 ...
- PostgreSQL流复制参数max_wal_senders详解
转自:http://my.oschina.net/Kenyon/blog/152234PostgreSQL 9.2.4 主机:192.25.10.76 从机:192.25.10.71 做postgre ...
随机推荐
- FineReport——巧妙实现类tab布局
在FR中,表达form支持局部刷新和tab布局,在报表中,不能做到这样,只能舍弃一些功能来做到类似的tab布局. 首先,在参数面板放一个文本控件temp,用作一个临时值,需要设置一个默认值,而切换是通 ...
- 8:django sessions(会话)
django会话 django提供对匿名会话全方位的支持,会话框架可以存储和检索每个站点访问者的任意数据.会话数据是存储在服务器端的,并且简要了发送和接受cookie的过程,cookies只包含一个s ...
- 字符串截取,SubString
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAk8AAACYCAIAAAByAZqHAAAYgklEQVR4nO2dL28ku5qHTS4ctuTSQf ...
- 前端读者 | 嗨,你知道this吗
本文来自 @position_柚子,地址:https://juejin.im/post/5995c7a76fb9a0247a60c407 在平时的代码中,相信大家经常用到 this,可是你真的明白此 ...
- Ubuntu 18.04安装网易云音乐(转载)
作为Ubuntu下唯一一款超级好用的音乐软件,必须下载. 提升为root权限后操作 0 : 网易云音乐1.0.0(该版本较为好安装)下载地址 http://s1.music.126.net/downl ...
- python 正则表达式匹配中文(转)
网上的一篇文章,做了整理,作者已无从考证,谢谢了 s=""" en: Regular expression is a powerful tool for manipula ...
- SQL练习总结
[SQL语句练习] 1. 表1: Person +-------------+---------+ | 列名 | 类型 | +-------------+---------+ | PersonId | ...
- Linux中的命令判断
命令判断会用到三个特殊符号分号(;),&&,|| (1).分号(;) 不考虑命令的相关性,连续执行,不保证命令全部执行成功. 例: [root@xuexi ~]# ls xxxx ; ...
- Xamarin XAML语言教程模板视图TemplatedView(一)
Xamarin XAML语言教程模板视图TemplatedView(一) 模板视图TemplatedView 与模板页面相对的是TemplatedView,它被称为模板视图,它的功能和模板页面类似,也 ...
- android 内存泄漏检测工具 LeakCanary 泄漏金丝雀
韩梦飞沙 yue31313 韩亚飞 han_meng_fei_sha 313134555@qq.com 内存泄漏检测工具 android 内存泄漏检测工具 ======== 内存泄漏 就是 无用的对 ...