PostgreSQL异步主从流复制搭建
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异步主从流复制搭建的更多相关文章
- 再不了解PostgreSQL,你就晚了之PostgreSQL主从流复制部署
前言 在MySQL被收购之后,虽然有其替代品为: MariaDB,但是总感觉心里有点膈应.大家发现了另一款开源的数据库: PostgreSQL. 虽然centos自带版本9.2也可以用,但是最近的几次 ...
- postgres配置主从流复制
postgres主从流复制 postgres在9.0之后引入了主从的流复制机制,所谓流复制,就是从库通过tcp流从主库中同步相应的数据.postgres的主从看过一个视频,大概效率为3w多事务qps. ...
- postgresSQL主从流复制安装
命令行运维: https://blog.csdn.net/zhangzeyuaaa/article/details/77941039 安装流程: 先准备类库: yum -y install readl ...
- PostgreSQL主备流复制机制
原文出处 http://mysql.taobao.org/monthly/2015/10/04/ PostgreSQL在9.0之后引入了主备流复制机制,通过流复制,备库不断的从主库同步相应的数据,并在 ...
- 1018关于MySQL复制搭建[异步复制和半同步复制]
转自:http://www.cnblogs.com/ivictor/p/5735580.html 搭建MySQL数据库的主从架构,还是蛮简单的.重要的几个命令整理一下. 主从服务器上: SHOW VA ...
- 数据库周刊28│开发者最喜爱的数据库是什么?阿里云脱口秀聊程序员转型;MySQL update误操作;PG流复制踩坑;PG异机归档;MySQL架构选型;Oracle技能表;Oracle文件损坏处理……
热门资讯 1.Stackoverflow 2020年度报告出炉!开发者最喜爱的数据库是什么?[摘要]2020年2月,近6.5万名开发者参与了 Stackoverflow 的 2020 年度调查,这份报 ...
- postgresql数据库异步流复制hot standby环境搭建
生命不息,test不止. 最近组里面修改了几个postgresql的bug,要进行回归测试,除了前面提到的WAL的RT测试和Mirroring Controller的RT测试,还要测试下postgre ...
- Postgressql高可用(pgpool+异步流复制)
文档结构: 由于博主之前是Oracle dba,oracle 高可用一般是rac,以及搭建ADG,一个是基于实例的高可用,一个是基于数据的容灾,甚至也有rac+adg的方式.Postgres有同步和异 ...
- PostgreSQL流复制
原理机制 参考--https://yq.aliyun.com/articles/51009 主备总体结构 PG主备流复制的核心部分由walsender,walreceiver和startup三个进程组 ...
随机推荐
- urllib模块的使用
Python3学习笔记(urllib模块的使用) 1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, ca ...
- 深入Java字符串
深入Java字符串 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 一.从根本上认识java.lang ...
- P2085 最小函数值(minval)
题目描述 有n个函数,分别为F1,F2,...,Fn.定义Fi(x)=Aix^2+Bix+Ci (x∈N*).给定这些Ai.Bi和Ci,请求出所有函数的所有函数值中最小的m个(如有重复的要输出多个). ...
- PLSQL Developer中几个功能
1,登录后默认自动选中My Objects 默认情况下,PLSQL Developer登录后,Brower里会选择All objects,如果你登录的用户是dba,要展开tables目录,正常情况都需 ...
- 对于在gti操作遇见detached Head时
1.什么是detached HEAD 在git中,这是一个处于”游离“状态的标签 2.使用git branch <new_branch_name> <HEAD_code> 为这 ...
- java web的安全约束--表单的验证
例子,表单和JDBCRealm的安全验证 参考了一篇文章http://www.cnblogs.com/dyllove98/archive/2013/07/31/3228698.html 1.要在wab ...
- spring学习(四)spring 持久层的封装
持久层:所谓“持久层”,也就是在系统逻辑层面上,专著于实现数据持久化的一个相对独立的领域(Domain),是把数据保存到可掉电式存储设备中.持久层是负责向(或者从)一个或者多个数据存储器中存储(或者获 ...
- java生成实体类的工具内部是如何实现的(mysql)
一.认识INFORMATION_SCHEMA数据库 INFORMATION_SCHEMA数据库提供了访问数据库元数据(数据的数据)的方式 该数据库中存放有数据库名.表名,列名.列的数据类型等各种数据 ...
- 一個新的面試題目,leetcode上面可以找到shortest palindrome
記錄一下新的面試題目,其實題目是舊的,只是我才見到.以前研究過,只不過以前的解法不容易理解,現在有了新的遞歸解法.記錄一下. public String shortestPalindrome(Stri ...
- IIS10搭建FTP服务
1.首先是基本搭建 http://jingyan.baidu.com/article/0bc808fc408fa91bd585b94f.html 2.计算机—管理----本地用户和组----本地用户- ...