搭建PostgreSQL主从架构

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: PostgreSQL是一个关系型数据库管理系统(RDBMS),支持NoSQL数据类型(JSON/XML/hstore)。本教程介绍如何在两台CentOS 7操作系统的ECS实例上搭建PostgreSQL主从架构。

搭建PostgreSQL主从架构


1. 创建实验资源

在实验开始之前,您需要创建相关实验资源。

  1. 在实验室页面,单击创建资源
  2. (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、用户信息等)。

说明 :资源创建过程需要1~3分钟。

2. 配置PostgreSQL主节点

本步骤指导您如何在ECS实例上配置PostgreSQL主节点。

  1. 在虚拟桌面,双击LX终端。

  1. 在LX终端中输入连接命令ssh <username>@<ipaddress>。您需要将 <username><ipaddress>替换成云服务器ECS-1的用户和弹性IP。例如:
ssh root@47.xxx.xxx.28

说明 :云服务器ECS-1的用户和弹性IP您可在云产品资源列表中查看。

命令显示结果如下。

  1. 输入yes,该操作表示同意继续连接。
  2. 输入云服务器ECS-1的密码。

说明 :云服务器ECS-1的密码您可在云产品资源列表中查看。

登录成功后会显示如下信息。

  1. 执行如下命令,更新yum源。
yum update -y
  1. 依次执行如下命令,安装PostgreSQL。
wget --no-check-certificate https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
rpm -ivh pgdg-redhat-repo-latest.noarch.rpm
yum install postgresql96-server postgresql96-contrib -y

返回结果如下所示,表示您已成功安装PostgreSQL。

  1. 执行如下命令,初始化数据库。
/usr/pgsql-9.6/bin/postgresql96-setup initdb
  1. 执行如下命令,启动PostgreSQL服务。
systemctl start postgresql-9.6.service
  1. 执行如下命令,设置PostgreSQL服务开机自启动。
systemctl enable postgresql-9.6.service
  1. 在主节点上创建数据库用户replica(用于主从复制),并设置密码及登录权限和备份权限。

1)执行如下命令,登录postgres用户。

su - postgres

返回结果如下所示,表示您已成功登录postgres用户。

2)执行如下命令,进入PostgreSQL交互终端。

psql

返回结果如下所示,表示您已成功进入PostgreSQL交互终端。

3)执行如下命令,为用户postgres设置密码,增强安全性。

ALTER USER postgres WITH PASSWORD 'YourPassWord';

4)执行如下命令,创建数据库用户replica,设置密码为replica,并授权登录权限和备份权限。

CREATE ROLE replica login replication encrypted password 'replica';

5)执行如下命令,查询用户是否创建成功。

SELECT usename from pg_user;

返回结果如下所示,表示用户replica已创建成功。

6)执行如下命令,查询权限是否创建成功。

SELECT rolname from pg_roles;

返回结果如下所示,表示权限已创建成功。

7)执行如下命令,退出PostgreSQL交互终端。

\q

8)执行如下命令,退出PostgreSQL。

exit

11. 执行如下命令,修改pg_hba.conf文件,设置replica用户白名单。

vim /var/lib/pgsql/9.6/data/pg_hba.conf

i键进入编辑模式,在IPv4 local connections段添加下面两行内容。

说明 :您需要将<从节点的VPC IPv4网段>替换成172.16.0.0/12

host    all             all             <从节点的VPC IPv4网段>          md5     #允许VPC网段中md5密码认证连接
host    replication     replica         <从节点的VPC IPv4网段>          md5     #允许用户从replication数据库进行数据同步

添加后的文件内容如下所示。按下Esc键后,输入:wq后按下Enter键保存并退出。

12. 执行如下命令,修改postgresql.conf文件。

vim /var/lib/pgsql/9.6/data/postgresql.conf

i键进入编辑模式,分别找到以下参数,并将参数修改为以下内容:

说明 :在非编辑模式下,输入/搜索内容即可快速定位参数位置。

listen_addresses = '*'   #监听的IP地址
max_connections = 100    #最大连接数,从库的max_connections必须要大于主库的
wal_level = hot_standby  #启用热备模式
synchronous_commit = on  #开启同步复制
max_wal_senders = 32     #同步最大的进程数量
wal_sender_timeout = 60s #流复制主机发送数据的超时时间

修改完成后的文件内容如下所示。按下Esc键后,输入:wq后按下Enter键保存并退出。

13. 执行如下命令,重启服务。

systemctl restart postgresql-9.6.service


3. 配置PostgreSQL从节点

本步骤指导您如何在ECS实例上配置PostgreSQL从节点。

  1. 在虚拟桌面,双击LX终端。

  1. 在终端中输入连接命令ssh <username>@<ipaddress>。您需要将<username><ipaddress>替换成云服务器ECS-2的用户和弹性IP。例如:
ssh root@47.xxx.xxx.167

说明 :云服务器ECS-2的用户和弹性IP您可在云产品资源页签中查看。

命令显示结果如下。

  1. 输入yes,该操作表示同意继续连接。
  2. 输入云服务器ECS-2的密码。

说明 :云服务器ECS-2的密码您可在云产品资源页签中查看。

登录成功后会显示如下信息。

  1. 执行如下命令,更新yum源。
yum update -y
  1. 执行如下命令,命令安装PostgreSQL。
wget --no-check-certificate https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
rpm -ivh pgdg-redhat-repo-latest.noarch.rpm
yum install postgresql96-server postgresql96-contrib -y
  1. 执行如下命令,使用pg_basebackup基础备份工具指定备份目录。

说明 :您需要将<主节点IP>替换为云产品资源列表中云服务器ECS-1的私有地址。

pg_basebackup -D /var/lib/pgsql/9.6/data -h <主节点IP> -p 5432 -U replica -X stream -P

返回结果如下所示,输入数据库用户replica的密码。本实例中数据库用户replica的密码为replica

返回结果如下所示,表示备份成功。

  1. 执行如下命令,新建recovery.conf配置文件。
cp /usr/pgsql-9.6/share/recovery.conf.sample /var/lib/pgsql/9.6/data/recovery.conf
  1. 执行如下命令,修改recovery.conf配置文件。
vim /var/lib/pgsql/9.6/data/recovery.conf

i键进入编辑模式,分别找到以下参数,并将参数修改为以下内容。

说明 :您需要将<主节点IP>替换为云产品资源列表中云服务器ECS-1的私有地址。

standby_mode = on     #声明此节点为从库
primary_conninfo = ‘host=<主节点IP> port=5432 user=replica password=replica’ #对应主库的连接信息
recovery_target_timeline = ‘latest’ #流复制同步到最新的数据

修改完成后的文件内容如下所示。按下Esc键后,输入:wq后按下Enter键保存并退出。

  1. 执行如下命令,修改postgresql.conf文件。
vim /var/lib/pgsql/9.6/data/postgresql.conf

i键进入编辑模式,分别找到以下参数,并将参数修改为以下内容:

说明 :在非编辑模式下,输入/搜索内容即可快速定位参数位置。

max_connections = 1000             # 最大连接数,从节点需设置比主节点大
hot_standby = on                   # 开启热备
max_standby_streaming_delay = 30s  # 数据流备份的最大延迟时间
wal_receiver_status_interval = 1s  # 从节点向主节点报告自身状态的最长间隔时间
hot_standby_feedback = on          # 如果有错误的数据复制向主进行反馈

修改完成后的文件内容如下所示。按下Esc键后,输入:wq后按下Enter键保存并退出。

  1. 执行如下命令,修改数据目录的属组和属主。
chown -R postgres.postgres /var/lib/pgsql/9.6/data
  1. 执行如下命令,启动PostgreSQL服务。
systemctl start postgresql-9.6.service
  1. 执行如下命令,设置PostgreSQL服务开机自启动。
systemctl enable postgresql-9.6.service


4. 检测验证

本步骤指导您如何检测主节点的sender进程和从节点的receiver进程,验证主库和从库的数据同步。

  1. 在主节点的LX终端窗口中,执行如下命令,查看sender进程。
ps aux |grep sender

返回结果如下所示,您可成功查看到sender进程。

  1. 在从节点的LX终端窗口中,执行如下命令,查看receiver进程。
ps aux |grep receiver

返回结果如下所示,您可成功查看到receiver进程。

  1. 在主库中查看从库状态。

1)在主节点的LX终端窗口中,执行如下命令,登录postgres用户。

su - postgres

返回结果如下所示,表示您已成功登录postgres用户。

2)执行如下命令,进入PostgreSQL交互终端。

psql

返回结果如下所示,表示您已成功进入PostgreSQL交互终端。

3)执行如下命令,查看从库状态。

select * from pg_stat_replication;

返回结果如下所示,您可在主库中查看到从库状态。

  1. 验证备库是否可以同步主库数据。

1)在主节点的LX终端窗口中,执行如下命令,创建数据库testdb。

create database testdb;

2)在从节点的LX终端窗口中,执行如下命令,登录postgres用户。

su - postgres

返回结果如下所示,表示您已成功登录postgres用户。

3)执行如下命令,进入PostgreSQL交互终端。

psql

返回结果如下所示,表示您已成功进入PostgreSQL交互终端。

4)执行如下命令,查看从节点的数据库。

\l

返回结果如下,表示备库成功同步主库数据。


实验链接:/adc/scenario/d1fd5e0437c84a1685bb006063665bd5

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
16小时前
|
存储 关系型数据库 分布式数据库
【PolarDB开源】深入PolarDB内核:探究存储计算分离架构的设计哲学
【5月更文挑战第20天】PolarDB是阿里巴巴的云原生分布式数据库,以其存储计算分离架构为核心,解决了传统数据库的扩展性和资源灵活性问题。该架构将数据存储和计算处理分开,实现高性能(通过RDMA加速数据传输)、高可用性(多副本冗余保证数据可靠性)和灵活扩展(计算资源独立扩展)。通过动态添加计算节点以应对业务流量变化,PolarDB展示了其在云时代应对复杂业务场景的能力。随着开源项目的进展,PolarDB将持续推动数据库技术发展。
22 6
|
5天前
|
缓存 监控 负载均衡
关系型数据库设计集群架构
【5月更文挑战第5天】关系型数据库设计集群架构
22 3
关系型数据库设计集群架构
|
5天前
|
负载均衡 NoSQL 关系型数据库
深入浅出Redis(六):Redis的主从架构与主从复制原理
深入浅出Redis(六):Redis的主从架构与主从复制原理
|
5天前
|
运维 负载均衡 监控
软件体系结构 - 关系数据库(3)主从架构
【4月更文挑战第26天】软件体系结构 - 关系数据库(3)主从架构
31 0
|
5天前
|
关系型数据库 分布式数据库 数据库
电子好书发您分享《PolarDB分布式版架构介绍》
阅读阿里云电子书《PolarDB分布式版架构介绍》,深入理解这款高性能数据库的分布式架构设计。书中通过图文并茂的方式揭示了PolarDB在分布式场景下的核心特性和技术优势,适合数据库爱好者和云计算从业者学习。[阅读链接](/ebook/8332/116553?spm=a2c6h.26392459.ebook-detail.5.4ab72ccbIzDq2Q)
11 1
|
5天前
|
存储 SQL 关系型数据库
电子好书发您分享《PolarDB分布式版架构介绍》
**PolarDB分布式版详解:** 阿里云的PolarDB采用计算存储分离架构,利用GMS进行元数据管理,CN处理分布式SQL。结合PolarFS,实现高效存储与计算,支持大规模扩展。[阅读完整架构介绍](/ebook/8332/116553?spm=a2c6h.26392459.ebook-detail.5.5b912ccbE20nqg)
11 2
|
5天前
|
存储 关系型数据库 分布式数据库
电子好书发您分享《PolarDB分布式版架构介绍PolarDB分布式版架构介绍》
**《PolarDB分布式版架构介绍》电子书分享:** 探索阿里云PolarDB分布式设计,采用计算存储分离,借助GMS、CN组件实现大规模扩展。[阅读更多](/ebook/8332/116553?spm=a2c6h.26392459.ebook-detail.5.3b3b2ccbVVjjt0)
21 3
|
5天前
|
存储 Cloud Native 关系型数据库
电子好书发您分享《PolarDB分布式版架构介绍 PolarDB分布式版架构介绍》
探索阿里云PolarDB分布式版的架构深度解析,该书详述了这款高性能云原生数据库的设计理念与技术特点,包括存储计算分离、水平扩展及分布式事务支持。[阅读电子书](/ebook/8332/116553?spm=a2c6h.26392459.ebook-detail.5.35da2ccbye9KOt)
18 3
|
5天前
|
存储 SQL 关系型数据库
电子好书发您分享《PolarDB分布式版架构介绍》
**《PolarDB分布式版架构介绍》电子书分享:** 深入解析阿里云PolarDB分布式数据库的存储计算分离架构,采用GMS进行元数据管理,保证高可用。计算节点CN处理SQL,结合RDMA技术实现高效通信。[阅读更多](/ebook/8332/116553?spm=a2c6h.26392459.ebook-detail.5.357b2ccbiQpsD1)
11 1
|
5天前
|
网络协议 Linux
Linux DNS服务详解——DNS主从架构配置
Linux DNS服务详解——DNS主从架构配置
427 4
http://www.vxiaotou.com