PostgreSQL DBA(31) – Backup&Recovery#4(搭建流复制)

PostgreSQL通过流复制Streaming Replication可轻松实现高可用HA环境的搭建.本节简单介绍了搭建流复制环境的基本步骤.

Step 1 主库:创建用户 
创建复制用户replicator

testdb=# CREATE USER replicator WITH REPLICATION ENCRYPTED PASSWORD 'replicator';CREATE ROLE 

Step 2 主库:参数配置 
配置archive_mode等参数

archive_mode = ONwal_level = replicamax_wal_senders = 10archive_command = '/home/xdb/archive.sh %p %f'listen_addresses = '*' 

也可用alter system命令修改

ALTER SYSTEM SET wal_level TO 'replica';ALTER SYSTEM SET archive_mode TO 'ON';ALTER SYSTEM SET max_wal_senders TO '10';ALTER SYSTEM SET listen_addresses TO '*'; 

重启数据库

pg_ctl -D $PGDATA restart -mf

Step 3 主库:访问配置 
修改pg_hba.conf文件

host replication replicator 192.168.26.26/32 md5

生效配置

pg_ctl -D $PGDATA reload

Step 4 从库:从主库备份中恢复 
在从库上使用pg_basebackup创建备库 
192.168.26.25是主库IP,192.168.26.26是从库IP

pg_basebackup -h 192.168.26.25 -U replicator -p 5432 -D $PGDATA -P -Xs -R

配置从库postgres.conf

hot_standby = ONhot_standby_feedback = ONALTER SYSTEM SET hot_standby TO 'ON';ALTER SYSTEM SET hot_standby_feedback TO 'ON'; 

配置从库recovery.conf

$ cat $PGDATA/recovery.confstandby_mode = 'on'primary_conninfo = 'host=192.168.26.25 port=5432 user=replicator password=replicator'restore_command = 'cp /data/archivelog/%f %p'archive_cleanup_command = 'pg_archivecleanup /data/archivelog %r' 

Step 5 从库:启动数据库

[xdb@localhost testdb]$ pg_ctl -D $PGDATA startwaiting for server to start....2019-03-13 12:13:30.239 CST [1870] LOG:  listening on IPv4 address "0.0.0.0", port 54322019-03-13 12:13:30.239 CST [1870] LOG:  listening on IPv6 address "::", port 54322019-03-13 12:13:30.252 CST [1870] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"2019-03-13 12:13:30.379 CST [1870] LOG:  redirecting log output to logging collector process2019-03-13 12:13:30.379 CST [1870] HINT:  Future log output will appear in directory "pg_log". doneserver started 

Step 6 验证复制环境 
确认相关进程是否已启动

#主库[xdb@localhost testdb]$ ps -ef|grep senderxdb       1646  1532  0 12:13 ?        00:00:00 postgres: walsender replicator 192.168.26.26(35294) streaming 0/43000140xdb       1659  1440  0 12:17 pts/1    00:00:00 grep --color=auto sender[xdb@localhost testdb]$ #从库[xdb@localhost testdb]$ ps -ef|grep receiverxdb       1879  1870  0 12:13 ?        00:00:00 postgres: walreceiver   streaming 0/43000140xdb       1884  1799  0 12:18 pts/0    00:00:00 grep --color=auto receiver[xdb@localhost testdb]$ ps -ef|grep startupxdb       1872  1870  0 12:13 ?        00:00:00 postgres: startup   recovering 000000100000000000000043xdb       1887  1799  0 12:18 pts/0    00:00:00 grep --color=auto startup[xdb@localhost testdb]$ 

Step 7 监控 
查询pg_stat_replication数据字典表

testdb=# SELECT * FROM pg_stat_replication;-[ RECORD 1 ]----+------------------------------pid              | 1646usesysid         | 90113usename          | replicatorapplication_name | walreceiverclient_addr      | 192.168.26.26client_hostname  | client_port      | 35294backend_start    | 2019-03-13 12:13:30.852269+08backend_xmin     | state            | streamingsent_lsn         | 0/43000140write_lsn        | 0/43000140flush_lsn        | 0/43000140replay_lsn       | 0/43000140write_lag        | flush_lag        | replay_lag       | sync_priority    | 0sync_state       | asynctestdb=# 

同步复制 
从库配置参数recovery.conf,在primary_conninfo中添加application_name

primary_conninfo = 'user=replicator password=replicator host=192.168.26.25 port=5432 application_name = standby_26'

主库配置参数

synchronous_standby_names = 'standby_26'synchronous_commit = on 

重启数据库,验证是否配置成功

testdb=# \xExpanded display is on.testdb=# SELECT * FROM pg_stat_replication;-[ RECORD 1 ]----+------------------------------pid              | 2257usesysid         | 90113usename          | replicatorapplication_name | standby_26client_addr      | 192.168.26.26client_hostname  | client_port      | 35418backend_start    | 2019-03-13 15:17:57.330573+08backend_xmin     | 634state            | streamingsent_lsn         | 0/54D4DBD0write_lsn        | 0/54D4DBD0flush_lsn        | 0/54D4DBD0replay_lsn       | 0/54D4DBD0write_lag        | 00:00:00.00101flush_lag        | 00:00:00.001954replay_lag       | 00:00:00.002145sync_priority    | 1sync_state       | sync 

参考资料 
pgbasebackup 
Setting up Streaming Replication in PostgreSQL

Image placeholder
Thejoe
未设置
  27人点赞

没有讨论,发表一下自己的看法吧

推荐文章
2019全球PostgreSQL生态报告出炉,PG为何从RDBMS中脱颖而出?

墨墨导读:本文是近期ScaleGrid发布的2019PG趋势报告,从不同的角度解读了PostgreSQL如何在众多优秀的RDBMS中脱颖而出,原文:https://scalegrid.io/blog/

GoWeb教程_05.4. 使用 PostgreSQL 数据库

PostgreSQL是一个自由的对象-关系数据库服务器(数据库管理系统),它在灵活的BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如MySQL和Firebird),和对专有系统比如

中兴陈河堆:PostgreSQL在5G网管中的应用

2019年是中国5G试商用元年,各大电信运营商正在进行紧张的5G实验局测试。5G网络基于SDN/NFV虚拟化技术进行构建,组网架构非常复杂,由无线接入网、承载网、核心网等部分组成,包含了大量的网元设备

从Oracle到PostgreSQL,某保险公司迁移实践

摘要:去O一直是金融保险行业永恒的话题,但去O的难度之大也只有真正经历过的人才知其中的艰辛。此次笔者结合实际去O工作,对去O过程中碰到的DBLINK、SEQUENCE最大值、空串、SQL语句中的别名等

为什么你应当选择 PostgreSQL 而不是 Oracle?

本文转自| PostgreSQL中文社区 作者简介 Jan Karremans,EnterpriseDB的高级销售工程师。 译者简介 KevinZhan,深圳联友科技SA,目前负责公司部分核心系统应用

最稳定可靠,PostgreSQL 12.1版本正式发布!

1.PG12.1Beta发布了!PostgreSQL全球开发组宣布,PostgreSQL12的第一个测试版(PG12.1Beta)现已开放下载。该版本中可预览的所有特性都将延续至PG12的最终版本中,

PostgreSQL 12 正式发布:全面的性能提升

PostgreSQL12已经发布,该版本在各方面都得到了加强,包括显著地提升查询性能,特别是对大数据集,总的空间利用率方面。这个版本为应用程序开发人员提供了更多的功能,比如对SQL/JSON路径表达式

从 Oracle 到 PostgreSQL ,某保险公司迁移实践

作者 |章晨曦编辑 | 老鱼摘要:去O一直是金融保险行业永恒的话题,但去O的难度之大也只有真正经历过的人才知其中的艰辛。此次笔者结合实际去O工作,对去O过程中碰到的DBLINK、SEQUENCE最大值

为什么PostgreSQL越来越火?

PostgreSQL是一个开源的关系型数据库,在过去30年里,它的社区活跃度、忠诚度不断飙升,PostgreSQL变得越来越受欢迎。根据DB-Engines1月发布的年度数据库报告,PostgreSQ

Ubuntu 中使用 Nginx+rtmp 搭建流媒体直播服务.md

一、背景本篇文章是继上一篇文章《Ubuntu中使用Nginx+rtmp模块搭建流媒体视频点播服务》文章而写,在上一篇文章中我们搭建了一个点播服务器,在此基础上我们再搭建一个直播服务器,二、配置rtmp

聊聊chronos的BackupDB

序本文主要研究一下chronos的BackupDBBackupDBDDMQ/carrera-chronos/src/main/java/com/xiaojukeji/chronos/db/Backup

Kubernetes 基础信息:什么是 Kubernetes?

简介 Kubernetes(常简称为K8s,在希腊语意为“舵手”或“驾驶员”)是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统。 由JoeBeda、BrendanBur

SQL Server 2014的数据库引擎新增功能(参考sqlserver官方文档)

SQLServer2014数据库引擎引入了一些新功能和增强功能,这些功能可以提高设计、开发和维护数据存储系统的架构师、开发人员和管理员的能力和工作效率。  以下是 数据库引擎已增强的方面。数据库引擎功

mysql 进行update时,要更新的字段中有单引号或者双引号导致不能批量生成sql的问题

前言将数据从一张表迁移到另外一张表的过程中,通过mysql的concat方法批量生成sql时遇到了一个问题,即进行UPDATE更新操作时如果原表中的字段中包含单引号'或者双引号",那么就会生成不正确的

【Kubernetes系列】第5篇 Ingress controller – traefik组件介绍

1.概述为了能够让Ingress资源能够工作,在Kubernetes集群中必须至少有一个运行中的ingresscontroller组件。也就是说如果在kubernetes集群中没有一个ingressc

AWS在中国开通三个CloudFront站点,可降31%的延迟

4月23日,北京消息,亚马逊旗下公司AmazonWebServices,Inc.(AWS)今天宣布,通过与宁夏西云数据科技有限公司(简称西云数据)协作,在中国开通三个由西云数据运营的AmazonClo

前端培训-中级阶段(31)- Class 的基本语法、Class 的继承(2019-12-26期)

前端最基础的就是HTML+CSS+Javascript。掌握了这三门技术就算入门,但也仅仅是入门,现在前端开发的定义已经远远不止这些。前端小课堂(HTML/CSS/JS),本着提升技术水平,打牢基础知

Stack Overflow 上最火的一个问题:什么是 NullPointerException

在逛StackOverflow的时候,发现最火的问题竟然是:什么是NullPointerException(java.lang.NullPointerException),它是由什么原因导致的,有没有

docker-compose 搭建 dnmp 总结

说明从零开始写一份dnmp环境的docker-compose.yml(由于redis比较常用,也包括进来)。总体设计示意图: 网络分配上,让要直接通讯的容器同属于一个网络,不直接通讯的容器属于不同的网

为什么SQL正在击败NoSQL,这对未来的数据意味着什么

导读:经过多年的沉寂之后,今天的SQL正在复出。缘由如何?这对数据社区有什么影响?看看本文的分析。以下为译文。自从可以利用计算机做事以来,我们一直在收集的数据以指数级的速度在增长,因此对于数据存储、处

从MySQL到POLARDB, 三位CTO讲述迁移背后的故事!

摘要: 去年9月21日,阿里云发布了自主研发的通用云数据库POLARDB公测版,今年4月,POLARDB正式商业化。此前,POLARDB核心卖点是100%向下兼容MySQL5.6,100TB存储容量,

计算存储分离 华为云多模NoSQL服务GeminiDB更易用

随着互联网技术架构的快速普及,企业对于NoSQL的需求也越来越大,在云计算的潮流下,如何将云服务的思维和技术纳入到数据库创新,成为摆在云服务厂商面前的一道难题。前不久,在第十届中国数据库技术大会(DT

使用kubei一步部署k8s高可用集群(包含docker安装、k8s组件安装、master初始化和加入nodes节点)

kubei(kubernetesinstaller)是一个go开发的用来部署kubernetes高可用集群的命令行工具,该工具可在Windows、Linux、Mac中运行kubei原理:通过ssh连接

一小时快速搭建基于阿里云容器服务-Kubernetes的Web应用

本文面向的读者如果您是一个Kubernetes的初学者,本文可以帮助你快速在云上搭建一个可实际使用的集群环境,并发布自己的第一个应用。你无须提前准备任何的硬件资源或者下载任何的软件包。 如果您已经有一

Twitter 宣布抛弃 Mesos,全面转向 Kubernetes

作者|阿里云智能高级技术专家张磊划重点Twitter的基础设施从Mesos全面转向Kubernetes阿里云容器平台团队即将开源 Kubernetes高级作业管理集合美国西部时间5月2日下午7点,Tw