PostgreSQL数据库异步的流复制

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: 一、虚拟主机安装1.使用VMware虚拟机安装CentOS操作系统操作系统环境CentOS Linux release 7.2.1511 (Core)软件选择 选择安装GNOME桌面安装位置 选择自动分区2.通过克隆的方式,生成主备两台主机。

一、虚拟主机安装

1.使用VMware虚拟机安装CentOS操作系统
操作系统环境
CentOS Linux release 7.2.1511 (Core)

  • 软件选择 选择安装GNOME桌面
  • 安装位置 选择自动分区

2.通过克隆的方式,生成主备两台主机。
192.168.238.132_master
192.168.238.133_slave

3.使用NAT网络方式

注意事项:
1) 开启服务,否则配置网络时,总是显示网线被拔出
1553504215_1_

2) DHCP方式自动获取IP
测试连接,存在失败的情况,注意是否已经关闭了防火墙

psql -h192.168.238.133 -dtest -Upostgres
psql: could not connect to server: 拒绝连接
    Is the server running on host "192.168.238.133" and accepting
    TCP/IP connections on port 5432?

3) 修改网卡自启动
vi /etc/sysconfig/network-scripts/ifcfg-ens33

ONBOOT=yes

二、数据库安装配置步骤

先在192.168.238.132_master和192.168.238.133_slave均安装PostgreSQL。
安装步骤见【PostgreSQL 10.0 源码安装

主服务器
主服务器地址:192.168.238.132

先创建一个新目录:

mkdir /usr/local/pgsql/pg_archive/

1.首先需要创建一个数据库用户进行主从同步。创建用户replica,并赋予登录和复制的权限

postgres# CREATE ROLE replica login replication encrypted password 'replica'

2.修改pg_hba.conf,允许replica用户来同步
在pg_hba.conf里增加两行:

host     all             all          192.168.238.133/32          trust   #允许133连接到主服务器
host   replication      replica       192.168.238.133/32          md5   #允许133使用replica用户来复制

这样,就设置了replica这个用户可以从192.168.238.133进行流复制请求。
注:
第二个字段必须要填replication

3.修改postgresql.conf

listen_addresses = '*'   # 监听所有IP
archive_mode = on  # 允许归档
archive_command = 'cp %p /opt/pgsql/pg_archive/%f'  # 用该命令来归档logfile segment
wal_level = hot_standby 
max_wal_senders = 32 # 这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个
wal_keep_segments = 256 #设置流复制保留的最多的xlog数目
wal_sender_timeout = 60s #设置流复制主机发送数据的超时时间
max_connections = 100 # 这个设置要注意下,从库的max_connections必须要大于主库的

配置完两个文件后重启服务器。

pg_ctl restart

4.测试slave能否连接到master数据库。在slave上运行如下命令:

psql -h 192.168.238.133 -U postgres

如提示无法连接,请检查是否关闭了防火墙。
关闭防火墙

启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld 
开机禁用  : systemctl disable firewalld
开机启用  : systemctl enable firewalld

看看是否能进入数据库。若可以,则正常

2.2 从服务器

1.从主节点拷贝数据到从节点

su - postgres
rm -rf /usr/local/pgsql/data/*   #先将data目录下的数据都清空
pg_basebackup -h 192.168.238.132 -U replica -D /usr/local/pgsql/data -X stream -P  # 从master拷贝数据到slave(基础备份)
mkdir /usr/local/pgsql/pg_archive

2.配置recovery.conf
复制/usr/local/pgsql/share/recovery.conf.sample 到 /usr/local/pgsql/data/recovery.conf

cp /usr/local/pgsql/share/recovery.conf.sample  /usr/local/pgsql/data/recovery.conf

修改recovery.conf

standby_mode = on    # 说明该节点是从服务器
primary_conninfo = 'host=192.168.238.132 port=5432 user=replica password=replica'  # 主服务器的信息以及连接的用户
recovery_target_timeline = 'latest'

3.配置postgresql.conf

wal_level = hot_standby
max_connections = 1000 #一般查多于写的应用从库的最大连接数要比较大
hot_standby = on #说明这台机器不仅仅是用于数据归档,也用于数据查询
max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间
wal_receiver_status_interval = 10s # 多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,这里只是设置最长的间隔时间
hot_standby_feedback = on # 如果有错误的数据复制,是否向主进行反馈

2.3 验证是否部署成功
在主节点上执行:

select client_addr,sync_state from pg_stat_replication;

结果如下:

[postgres@localhost data]$ psql
psql (10.7)
Type "help" for help.

postgres=# select client_addr,sync_state from pg_stat_replication;
   client_addr   | sync_state 
-----------------+------------
 192.168.238.133 | async
(1 row)

postgres=#

说明192.168.238.133是从服务器,在接收流,而且是异步流复制。

此外,还可以分别在主、从节点上运行 ps aux | grep postgres 来查看进程:
主服务器上:

postgres 27480  2536  0 10:40 ?        00:00:00 postgres: wal sender process replica 192.168.238.133(55304) streaming 0/8000140

可以看到有一个 wal sender 进程。

从服务器上:

postgres 24721 24716  0 10:40 ?        00:00:00 postgres: wal receiver process   streaming 0/8000140

可以看到有一个 wal receiver 进程。

至此,PostgreSQL主从流复制安装部署完成。

在主服务器上插入数据或删除数据,在从服务器上能看到相应的变化。从服务器上只能查询,不能插入或删除。

参考文章:
https://www.jianshu.com/p/2d07339774c0

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
3天前
|
SQL 关系型数据库 数据库
关系型数据库选择合适的数据库管理系统
关系型数据库选择合适的数据库管理系统
16 2
|
4天前
|
关系型数据库 MySQL BI
关系型数据库选择合适的数据库管理系统
关系型数据库选择合适的数据库管理系统
21 4
|
3天前
|
负载均衡 关系型数据库 MySQL
关系型数据库的安装和配置数据库节点
关系型数据库的安装和配置数据库节点
13 3
|
4天前
|
SQL 存储 关系型数据库
性能诊断工具DBdoctor如何快速纳管数据库PolarDB-X
DBdoctor是一款基于eBPF技术的数据库性能诊断工具,已通过阿里云PolarDB分布式版(V2.3)认证。PolarDB-X是阿里云的高性能云原生分布式数据库,采用Shared-nothing和存储计算分离架构,支持高可用、水平扩展和低成本存储。PolarDB-X V2.3.0在读写混合场景下对比开源MySQL有30-40%的性能提升。DBdoctor能按MySQL方式纳管PolarDB-X的DN节点,提供性能洞察和诊断。用户可通过指定步骤安装PolarDB-X和DBdoctor,实现数据库的管理和性能监控。
|
4天前
|
Cloud Native 关系型数据库 分布式数据库
数据库性能诊断工具DBdoctor通过阿里云PolarDB产品生态集成认证
DBdoctor(V3.1.0)成功通过阿里云PolarDB分布式版(V2.3)集成认证,展现优秀兼容性和稳定性。此工具是聚好看科技的内核级数据库性能诊断产品,运用eBPF技术诊断SQL执行,提供智能巡检、根因分析和优化建议。最新版V3.1.1增加了对PolarDB-X和OceanBase的支持,以及基于cost的索引诊断功能。PolarDB-X是阿里巴巴的高性能云原生分布式数据库,兼容MySQL生态。用户可通过提供的下载地址、在线试用链接和部署指南体验DBdoctor。
|
5天前
|
存储 关系型数据库 分布式数据库
数据库索引回表困难?揭秘PolarDB存储引擎优化技术
PolarDB分布式版存储引擎采用CSM方案均衡资源开销与可用性。
数据库索引回表困难?揭秘PolarDB存储引擎优化技术
|
6天前
|
关系型数据库 Java 数据库
docker部署postgresql数据库和整合springboot连接数据源
docker部署postgresql数据库和整合springboot连接数据源
16 0
|
7天前
|
SQL JSON 关系型数据库
[UE虚幻引擎插件DTPostgreSQL] PostgreSQL Connector 使用蓝图连接操作 PostgreSQL 数据库说明
本插件主要是支持在UE蓝图中连接和操作PostgreSQL 数据库。
16 2
|
14天前
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之在使用 DataWorks 数据集成同步 PostgreSQL 数据库中的 Geometry 类型数据如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
24 0
|
14天前
|
分布式计算 关系型数据库 大数据
MaxCompute产品使用合集之怎么才可以将 PostgreSQL 中的 geometry 空间类型字段同步到 MaxCompute 或另一个 PostgreSQL 数据库
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。