PostgreSQL流复制记录
参考了别人的部分,添加了自己在实践中的内容,仅做记录。
1.同步流复制中
主机操作
1.1postgresql.conf
wal_level = hot_standby # 这个是设置主为wal的主机 max_wal_senders = 32 # 这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个 wal_keep_segments = 256 # 设置流复制保留的最多的xlog数目 wal_sender_timeout = 60s # 设置流复制主机发送数据的超时时间 max_connections = 100 # 这个设置要注意下,从库的max_connections必须要大于主库的 synchronous_standby_names='standby1' #同步复制时需要配置该参数,同样在备机需要在连接中配置application_name=standby1
#可以配置多个,standby1,standby2。三个节点中,一个主,一个同步流复制,一个潜在同步流复制。
#级别是按照配置的顺序决定,当standby1掉了后,备用同步流复制自动成为同步流复制,主节点的写入不会卡住。但是如果两个同步节点都掉了,则主节点不能写入,写入时#会卡在等待同步节点返回值的地方。 synchronous_commit=on|remote_write|locale|off
#on 表示主节点XLOG写入xlog file且备节点接收到XLOG,并将XLOG写入到wal buffer,wal buffer刷盘道xlog file之后,事务才可以完成提交。
#remote_write表示主节点XLOG写入xlog file且备节点接收到XLOG,并将XLOG写入到wal buffer后,事务才可以完成提交。
#locale 表示主节点XLOG写入xlog file,事务即可完成提交。
#off 表示主节点XLOG写入到wal buffer,事务即可完提交。
hot_standby = on #在启动过程中做recovery时,可以访问数据库。不设置在启动后,连接数据库,可能会遇到:
#[postgre@pg-2 postgresql-9.4.4]$ psql postgres
#psql: FATAL: the database system is starting up
1.2 修改pg_hba.conf
host replication replica 10.12.12.12/32 md5
1.3 创建同步用户
postgres# CREATE ROLE replica login replication encrypted password 'replica'
备机操作
1.4 然后使用pg_basebackup建立备机data目录
pg_basebackup -F p -P -x -R -D /data/pgsql/data2 -h 10.12.12.10 -p 5432 -U replica
#-R会自动生成一个recovery.conf文件。
#-F指定传输压缩格式
1.5 修改recovery.conf文件
standby_mode = on # 这个说明这台机器为从库 #primary_conninfo = 'host=10.12.12.10 port=5432 user=replica password=replica' # 这个说明这台机器对应主库的信息 异步复制的信息 primary_conninfo = 'host=10.12.12.10 port=5432 user=replica password=replica application_name=ecox_standby_node' #同步复制 recovery_target_timeline = 'latest' # 这个说明这个流复制同步到最新的数据
查看同步状态
postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid | 8467 # sender的进程
usesysid | 44673 # 复制的用户id
usename | replica # 复制的用户用户名
application_name | walreceiver
client_addr | 10.12.12.12 # 复制的客户端地址
client_hostname |
client_port | 55804 # 复制的客户端端口
backend_start | 2015-05-12 07:31:16.972157+08 # 这个主从搭建的时间
backend_xmin |
state | streaming # 同步状态 startup: 连接中、catchup: 同步中、streaming: 同步
sent_location | 3/CF123560 # Master传送WAL的位置
write_location | 3/CF123560 # Slave接收WAL的位置
flush_location | 3/CF123560 # Slave同步到磁盘的WAL位置
replay_location | 3/CF123560 # Slave同步到数据库的WAL位置
sync_priority | 0 #同步Replication的优先度
0: 异步、1~?: 同步(数字越小优先度越高)
sync_state | async # 有三个值,async: 异步、sync: 同步、potential: 虽然现在是异步模式,但是有可能升级到同步模式
补充:
6、检查异步流复制的情况:
可以使用主库上的视图pg_stat_replication查看流复制的信息:
postgres=# select pid,state,client_addr,sync_priority,sync_state from pg_stat_replication;
pid | state | client_addr | sync_priority |sync_state
------+-----------+-------------+---------------+------------
9552 | streaming | 10.0.2.61 | 0 | async
(1 row)
查看备库落后主库多少字节的WAL日志:
postgres=# select pg_xlog_location_diff(pg_current_xlog_location(),replay_location)from pg_stat_replication;
pg_xlog_location_diff
-----------------------
0
(1 row)
7、查看备库状态:
如何判断数据库处于备库状态:
1)hotstandby 状态:
可以连接数据库执行pg_is_in_recovery()函数,主库上返回False,standby上返回true;
主库:
postgres=# select pg_is_in_recovery();
pg_is_in_recovery
-------------------
f
(1 row)
standby库:
postgres=# select pg_is_in_recovery();
pg_is_in_recovery
-------------------
t
(1 row)
2)不是hotstandby:
不是host standby不能直接连上去,此时使用pg_controldata来判断:
从库:
[postgre@pg-2 postgresql-9.4.4]$pg_controldata |grep state
Database cluster state: in archive recovery
主库:
[postgre@pg-1 data]$ pg_controldata |grep state
Database cluster state: in production
8、在HotStandby,还可以执行如下一些函数,查看备库接收的WAL日志和应用WAL日志的状态:
pg_last_xlog_receive_location()
pg_last_xlog_replay_location()
pg_last_xact_replay_timestamp()
如下:
postgres=# select pg_last_xlog_receive_location(),pg_last_xlog_replay_location(),pg_last_xact_replay_timestamp();
pg_last_xlog_receive_location | pg_last_xlog_replay_location |pg_last_xact_replay_timestamp
-------------------------------+------------------------------+-------------------------------
0/1B013F50 | 0/1B013F50 | 2015-07-17 11:41:09.406696+08
(1 row)
PostgreSQL流复制记录的更多相关文章
- PostgreSQL流复制
原理机制 参考--https://yq.aliyun.com/articles/51009 主备总体结构 PG主备流复制的核心部分由walsender,walreceiver和startup三个进程组 ...
- PostgreSQL 流复制+高可用
QA PgPool-II 同步 Postgresql X1 服务器准备 192.168.59.121 PostgreSQL10 192.168.59.120 PGPool-II 3.7 X2 安装Po ...
- PostgreSQL流复制参数max_wal_senders详解
转自:http://my.oschina.net/Kenyon/blog/152234PostgreSQL 9.2.4 主机:192.25.10.76 从机:192.25.10.71 做postgre ...
- [笔记] postgresql 流复制(streaming replication)
基本环境说明: os:FreeBSD 9.3 postgresql version: master:192.168.56.101 standby:192.168.56.102 安装过程略,基于pkg包 ...
- postgresql流复制配置
一.配置环境: 示例环境 主机名 IP 角色 系统版本 数据目录 pg版本 db1 192.168.128.128 主库 RedHat5.3 /app/postgreSQL/data 9.1.7 db ...
- 再不了解PostgreSQL,你就晚了之PostgreSQL主从流复制部署
前言 在MySQL被收购之后,虽然有其替代品为: MariaDB,但是总感觉心里有点膈应.大家发现了另一款开源的数据库: PostgreSQL. 虽然centos自带版本9.2也可以用,但是最近的几次 ...
- 20181219-PostgreSQL 流复制监控脚本
PostgreSQL 流复制监控脚本 https://github.com/AndyYHM/Writing/blob/PostgreSQL/20181219-PostgreSQL%20Stream%2 ...
- [原创] PostgreSQL Plus Advanced Server在Windows中配置双机热备流复制
一.系统环境 操作系统:Windows Server 2003/2008 两个节点分别为master与slave. 主节点master:172.27.19.28 备机点slave:172.27.19. ...
- PostgreSQL主备流复制机制
原文出处 http://mysql.taobao.org/monthly/2015/10/04/ PostgreSQL在9.0之后引入了主备流复制机制,通过流复制,备库不断的从主库同步相应的数据,并在 ...
随机推荐
- ajax异步请求返回对象
使用ajax异步请求返回一个对象. java code: @RequestMapping({"getAstSingleWheelImg_bbs"+Constant.JSON}) @ ...
- C++中的默认成员函数
一般而言,对于一个用户自定义的类类型,以下四个函数在用户没有自定义的情形下,会由编译器自动生成: 1.default constructor 2.copy constructor Someclass: ...
- HTML初识(Day46)
一.HTML初识 1.web服务本质 import socket def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM ...
- mysql的-F与master-data理解(一个小型的big-log恢复)
例子: 使用mysqlbin-log恢复,有两种情况,一个是停数据库,一个是不停 在不停数据库的情况下,为了防止新的写入,需要将bin-log切割,然后新的数据会保存在新的bin-log里面 在此之前 ...
- CSS 控制元素 上下左右居中
不说废话,直接 搞起..... 首先,我们将题目 <css控制元素上下左右居中> 分析一下哈,我是将其分成了4部分信息: 1.CSS控制: 只用 CSS 来达成目的 2.元素: 不只是d ...
- 使用curl 命令模拟POST/GET请求
https://blog.csdn.net/u012340794/article/details/71440604 curl命令是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载 ...
- [国家集训队] Crash 的文明世界(第二类斯特林数)
题目 [国家集训队] Crash 的文明世界 前置 斯特林数\(\Longrightarrow\)斯特林数及反演总结 做法 \[\begin{aligned} ans_x&=\sum\limi ...
- vue2.0 transition 多个元素嵌套使用过渡
在做vue的demo的时候遇到一个问题,多个嵌套的元素如何设置transition? 我的代码:代码中元素整体做平移,里面的inner中做旋转,实现一个圆形滚动的效果 <transition n ...
- zero-base coordinate 和one-base coordinate
zero-base和one-base是生信会经常碰到的两套坐标系统. zero-base是半开放式的,是不包括该点的,zero-base的文件有:bed;bam one-base是封闭式的,是包括该点 ...
- 《React-Native系列》3、RN与native交互之Callback、Promise
接着上一篇<React-Native系列>RN与native交互与数据传递,我们接下来研究另外的两种RN与Native交互的机制 一.Callback机制 首先Calllback是异步的, ...