参考了别人的部分,添加了自己在实践中的内容,仅做记录。

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流复制记录的更多相关文章

  1. PostgreSQL流复制

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

  2. PostgreSQL 流复制+高可用

    QA PgPool-II 同步 Postgresql X1 服务器准备 192.168.59.121 PostgreSQL10 192.168.59.120 PGPool-II 3.7 X2 安装Po ...

  3. PostgreSQL流复制参数max_wal_senders详解

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

  4. [笔记] postgresql 流复制(streaming replication)

    基本环境说明: os:FreeBSD 9.3 postgresql version: master:192.168.56.101 standby:192.168.56.102 安装过程略,基于pkg包 ...

  5. postgresql流复制配置

    一.配置环境: 示例环境 主机名 IP 角色 系统版本 数据目录 pg版本 db1 192.168.128.128 主库 RedHat5.3 /app/postgreSQL/data 9.1.7 db ...

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

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

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

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

  8. [原创] PostgreSQL Plus Advanced Server在Windows中配置双机热备流复制

    一.系统环境 操作系统:Windows Server 2003/2008 两个节点分别为master与slave. 主节点master:172.27.19.28 备机点slave:172.27.19. ...

  9. PostgreSQL主备流复制机制

    原文出处 http://mysql.taobao.org/monthly/2015/10/04/ PostgreSQL在9.0之后引入了主备流复制机制,通过流复制,备库不断的从主库同步相应的数据,并在 ...

随机推荐

  1. unity,  在编辑界面中隐藏公开变量

    unity默认声明为public的变量都是在编辑界面可见的,如果要隐藏的话就可以这样做 一种是使用属性 Public float Age { get; set; } 另一种是使用标签 [HideInI ...

  2. 设计模式(三) cglib代理

    1.1.cglib代理,也可也叫子类代理 Cglib代理,也叫做子类代理.我们知道,JDK的动态代理机制只能代理实现了接口的类,而不能实现接口的类就不能使用JDK的动态代理.cglib是针对类来实现代 ...

  3. Linux网络相关命令firewalld和netfilter、iptables 使用(6/22)

    iptables和netfilter的关系: netfilter在内核空间的代码根据table中的rules,完成对packet的分析和处置.但是这些table中的具体的防火墙rules,还是必须由系 ...

  4. linux mkisofs(genisoimage)命令用法

    功能说明:建立ISO 9660映像文件. 常用命令:genisoimage -o imagename.iso file 语 法:mkisofs [-adDfhJlLNrRTvz][-print-siz ...

  5. Linux yum源地址

    ----------------------------------Linux yum源地址------------------------------ Zabbix 3.0 yum源 rpm -iv ...

  6. MySQL数据库表分区功能详解

    1.什么是表分区? mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件,一个是frm存放表 ...

  7. 0927-转载:SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释

    这篇文章暂时只对框架中所要用到的配置文件进行解释说明,而且是针对注解形式的,框架运转的具体流程过两天再进行总结. spring+springmvc+mybatis框架中用到了三个XML配置文件:web ...

  8. AndroidDevTools下载

    收集整理Android开发所需的Android SDK.开发中用到的工具.Android开发教程.Android设计规范,免费的设计素材等. http://www.androiddevtools.cn ...

  9. Linux系统运行级别配置

    Linux的运行级别 Linux的运行级别有七种,可以通过查看/etc/inittab文件进行了解: Level0:系统停机状态,默认系统运行级别不能设置为0,否则系统不能正常启动: Level1:单 ...

  10. pexpect的pxssh类实现远程操作

    #!/usr/bin/pythonimport pexpectfrom pexpect import pxssh import getpasstry: s=pxssh.pxssh() hostname ...