1 总体规划

 

Master

Slave

操作系统

CentOS Linux release 7.5.1804

CentOS Linux release 7.5.1804

处理器

1

1

内存

4G

4G

硬盘

38G

38G

主机名称

SHSNC-DB01

SHSNC-DB02

IP地址

192.168.1.61

192.168.1.62

具体安装步骤,可以查看《PostgreSQL数据库的安装》,不在本文的介绍范围内。

2 PostgreSQL主从异步流复制搭建

2.1 参数检查

检查主库postgresql.conf文件是否已经配置以下参数:

listen_addresses = '*'
port =
log_destination = 'csvlog'
logging_collector = on
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
max_connections =
max_connections =
max_connections = hot_standby

若以上参数没有配置,配置完后需要重启PostgreSQL数据库。

2.2 创建同步账号

在主库创建同步账号以及相应的数据库

$ psql -p  -U postgres postgres
psql (9.6.)
Type "help" for help.
postgres=# CREATE DATABASE pocdb;
CREATE DATABASE
postgres=# \c pocdb
You are now connected to database "pocdb" as user "postgres".
pocdb=#
pocdb=# CREATE USER repl ENCRYPTED PASSWORD '' REPLICATION;
CREATE ROLE

检查创建用户的权限:

$ psql -p  -U postgres postgres
psql (9.6.)
Type "help" for help.
postgres=# \du+
List of roles
Role name | Attributes | Member of | Description
-----------+------------------------------------------------------------+-----------+-------------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} |
repl | Replication | {} |

2.3 修改pg_hba.conf文件

在主库pg_hba.conf文件中添加相应内容,添加后关键内容如下:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/ trust
host all all 192.168.1.0/ trust
# IPv6 local connections:
host all all ::/ trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres trust
#host replication postgres 127.0.0.1/ trust
#host replication postgres ::/ trust
host replication repl 192.168.1.61/ md5
host replication repl 192.168.1.62/ md5

需要注意此处用户名repl是刚才创建同步的用户,不是postgres。

2.4 reload配置文件

reload主库配置文件:

$ pg_ctl -D /postgres/pgdata/ reload
server signaled

master配置成功后,slave 安装基本环境同 master ,区别在于 slave 从库不需要进行 initdb 初始化数据库

2.5 备库数据复制

在备库使用postgres主机账号进行操作:

$ pg_basebackup -h 192.168.1.61 -U repl -W -Fp -Pv -Xs -R -D /postgres/pgdata
Password:
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
transaction log start point: / on timeline
pg_basebackup: starting background WAL receiver
/ kB (%), / tablespace
transaction log end point: /20000F8
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: base backup completed

上述表示同步成功

2.6 检查recovery配置文件

在备库检查recovery.conf配置文件

$ cat recovery.conf
standby_mode = 'on'
primary_conninfo = 'user=repl password=123456 host=192.168.1.61 port=5432 sslmode=disable sslcompression=1'

2.7 启动备库

$ pg_ctl -D /postgres/pgdata start
server starting

2.8 搭建后验证

启动后在主库创建一个数据库并在备库查看是否已同步:

主库:

$ psql
psql (9.6.)
Type "help" for help. postgres=# create database shsnc;
CREATE DATABASE
postgres=# \list
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
chenzxdb | postgres | UTF8 | en_US.UTF- | en_US.UTF- |
pocdb | postgres | UTF8 | en_US.UTF- | en_US.UTF- |
postgres | postgres | UTF8 | en_US.UTF- | en_US.UTF- |
shsnc | postgres | UTF8 | en_US.UTF- | en_US.UTF- |
template0 | postgres | UTF8 | en_US.UTF- | en_US.UTF- | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF- | en_US.UTF- | =c/postgres +
| | | | | postgres=CTc/postgres
( rows) postgres=# \x
Expanded display is on.
postgres=# select * from pg_stat_replication;
-[ RECORD ]----+------------------------------
pid |
usesysid |
usename | repl
application_name | walreceiver
client_addr | 192.168.1.162 ------>从备库连接上主库
client_hostname |
client_port |
backend_start | -- ::54.269887+
backend_xmin |
state | streaming
sent_location | /4032A78
write_location | /4032A78
flush_location | /4032A78
replay_location | /4032A78
sync_priority |
sync_state | async postgres=#

备库:

$ psql
psql (9.6.)
Type "help" for help. postgres=# \list
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
chenzxdb | postgres | UTF8 | en_US.UTF- | en_US.UTF- |
pocdb | postgres | UTF8 | en_US.UTF- | en_US.UTF- |
postgres | postgres | UTF8 | en_US.UTF- | en_US.UTF- |
shsnc | postgres | UTF8 | en_US.UTF- | en_US.UTF- |
template0 | postgres | UTF8 | en_US.UTF- | en_US.UTF- | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF- | en_US.UTF- | =c/postgres +
| | | | | postgres=CTc/postgres
( rows) postgres=#

另外,可查看pg_log查看关键字"database system is ready to accept read only connections"

$ grep "database system " ./pg_log/*csv
./pg_log/postgresql-2018-11-15_171206.csv:2018-11-15 17:12:06.999 CST,,,4324,,5bed3866.10e4,2,,2018-11-15 17:12:06 CST,,0,LOG,00000,"database system is ready to accept read only connections",,,,,,,,,""  ----->连接上主库并使用read only模式打开数据库

3 搭建过程中遇到的问题QA

  • pg_basebackup: could not connect to server: FATAL:  number of requested standby connections exceeds max_wal_senders (currently 0)

解决方案:在主库postgres.conf文件中添加以下参数

max_connections =
max_connections =
max_connections = hot_standby
  • psql: FATAL:  the database system is starting up

解决方案:在备库postgres.conf文件中添加以下参数

hot_standby = on

PostgreSQL异步主从流复制搭建的更多相关文章

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

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

  2. postgres配置主从流复制

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

  3. postgresSQL主从流复制安装

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

  4. PostgreSQL主备流复制机制

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

  5. 1018关于MySQL复制搭建[异步复制和半同步复制]

    转自:http://www.cnblogs.com/ivictor/p/5735580.html 搭建MySQL数据库的主从架构,还是蛮简单的.重要的几个命令整理一下. 主从服务器上: SHOW VA ...

  6. 数据库周刊28│开发者最喜爱的数据库是什么?阿里云脱口秀聊程序员转型;MySQL update误操作;PG流复制踩坑;PG异机归档;MySQL架构选型;Oracle技能表;Oracle文件损坏处理……

    热门资讯 1.Stackoverflow 2020年度报告出炉!开发者最喜爱的数据库是什么?[摘要]2020年2月,近6.5万名开发者参与了 Stackoverflow 的 2020 年度调查,这份报 ...

  7. postgresql数据库异步流复制hot standby环境搭建

    生命不息,test不止. 最近组里面修改了几个postgresql的bug,要进行回归测试,除了前面提到的WAL的RT测试和Mirroring Controller的RT测试,还要测试下postgre ...

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

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

  9. PostgreSQL流复制

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

随机推荐

  1. 对SNMP4J的一些封装

    SNMP4J是一个开源的,用Java实现的snmp协议.其中提供了一下API,在这些API上面封装了一些方法,比如SNMP的get-request请求,get-next-request请求等 如果不了 ...

  2. linux shell内置判断

    内置判断,成功的时候返回0,不成功返回非零 test  判断表达式 [ 判断表达式 ]       注意前后必须留空格哦 数值运算 -eq   等于 -ne   不等于 -gt     大于 -ge ...

  3. Facade模式实现文件上传(Flash+HTML5)

    一.前言 确定了渐进式增强的上传方式,接下来我们需要将上传功能从具体的业务逻辑中剥离出来,作为公共组件供业务层调用.这就要求我们必须对业务层隐藏上传细节,只暴露统一的上传API.这时候大家是不是跟我一 ...

  4. centos7 版本防火墻操作和配置

    1.关闭firewall:systemctl stop firewalld.service #停止firewallsystemctl disable firewalld.service #禁止fire ...

  5. print控制台输出带颜色文字方法

    在python开发的过程中,经常会遇到需要打印各种信息.海量的信息堆砌在控制台中,就会导致信息都混在一起,降低了重要信息的可读性.这时候,如果能给重要的信息加上字体颜色,那么就会更加方便用户阅读了. ...

  6. mysql什么情况下会触发表锁

    锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所有数 ...

  7. Java开发中代码规范有哪些?

    Java开发中所要遵守的编码规范大体上有如下7点.命名规范.注释规范.缩进排版规范.文件名规范.声明规范.语句规范以及编程规范. 1.命名规范 (1)所有的标示符都只能用ASCⅡ字母(A-Z或a-z) ...

  8. 最新一道面試題目,input: int[1,1,2,2,2,3,3,3],output [3,2,1],要求按照數字出現的次數從多到少排列元素。

    面試當時沒有及時答出來,感覺當時在面試官的提示下跑偏了.想用兩個數組來mapping key和value然後對等排序,但是因為面試官讓用Array.sort而沒想好有什麼好辦法,結果可想而知.但是題目 ...

  9. March 21 2017 Week 12 Tuesday

    Sometimes ever, sometimes never. 相聚有时,后会无期. Maybe love is something we can't touch but we can feel w ...

  10. Northwind数据库不能在SQL Server 2012上创建

    附加mdf文件不出意料会提示数据库格式无法兼容,试着通过脚本来创建,会有以下错误提示: Could not find stored procedure 'sp_dboption'. 原因是SQL Se ...