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. HDU 5007 字符串匹配

    http://acm.hust.edu.cn/vjudge/contest/122814#problem/A 匹配到字符串就输出,水题,主要是substr的运用 #include <iostre ...

  2. IntelliJ IDEA 2017.3.5 安装 lombok-plugin-0.17 失败,通过网络下载总是超时

    1.问题: IntelliJ IDEA 2017.3.5 安装 lombok-plugin-0.17 失败,通过网络下载总是超时: 2.原因:IntelliJ IDEA 2017.3.5 目前还不支持 ...

  3. angular2-模板驱动表单

    app.module.ts 导入 FormsModule  import { NgModule } from '@angular/core'; import { BrowserModule } fro ...

  4. JavaScript中8个容易犯的错误

    这里dbestech针对JavaScript初学者给出一些技巧和列出一些陷阱. 1. 你是否尝试过对数组元素进行排序? JavaScript默认使用字典序(alphanumeric)来排序.因此,[1 ...

  5. HTML表单(form)的“enctype”属性

    Form元素的语法中,EncType表明提交数据的格式 属性值: application/x-www-form-urlencoded:在发送前编码所有字符(默认) multipart/form-dat ...

  6. 使用canvas及js简单生成验证码方法

    在很多时候都需要用到验证码,前端验证码需要知道Html5中的canvas知识点.验证码生成步骤是:1.生成一张画布canvas 2.生成随机数验证码  3.在画布中生成干扰线  4.把验证码文本填充到 ...

  7. [转]chrome developer tool 调试技巧

    这篇文章是根据目前 chrome 稳定版(19.0.1084.52 m)写的, 因为 google 也在不断完善chrome developer tool, 所以 chrome 版本不同可能稍有差别. ...

  8. .NET开源工作流RoadFlow-表单设计-下拉列表

    下拉列表即<select></select>标签,相关选项与单选按钮组相同: 是否添加空项:即在下拉列表的开头是否添加一个空的选项<option value=" ...

  9. 我是一只IT小小鸟读书笔记3

    Part6: 一.    无论在什么时候,师兄师姐都是我们最好的资源,遇到不会的问题一定要及时向他们请教,善于利用身边的人脉关系也是一个基本的技能. 二.    爱好很多,但特长一定要有.仔细思考一下 ...

  10. 好记性不如烂笔头-nginx安装环境与Linux安装ftp组件

    Nginx安装环境 1. Nginx安装环境 Nginx是C语言开发,建议在linux上运行,我参加工作这些年来一直使用Linux发行版之一的 Centos作为安装环境. 1.1 gcc 安装Ngin ...