搭建PostgreSQL主从架构

简介: 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

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


实验链接:https://developer.aliyun.com/adc/scenario/d1fd5e0437c84a1685bb006063665bd5

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
6月前
|
网络协议 Linux
Linux DNS服务详解——DNS主从架构配置
Linux DNS服务详解——DNS主从架构配置
562 4
|
6月前
|
SQL 关系型数据库 MySQL
MySQL-主从架构的搭建
MySQL-主从架构的搭建
203 0
|
2月前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
5月前
|
缓存 NoSQL Redis
Redis主从架构
当看到图示中红色标记的,就代表从节点挂载成功了。
38 0
|
3月前
|
运维 监控 关系型数据库
【一文搞懂PGSQL】7. PostgreSQL + repmgr + witness 高可用架构
该文档介绍了如何构建基于PostgreSQL的高可用架构,利用repmgr进行集群管理和故障转移,并引入witness节点增强网络故障检测能力。repmgr是一款轻量级的开源工具,支持一键部署、自动故障转移及分布式节点管理。文档详细描述了环境搭建步骤,包括配置postgresql参数、安装与配置repmgr、注册集群节点以及配置witness节点等。此外,还提供了故障手动与自动切换的方法及常用命令,确保集群稳定运行。
|
5月前
|
人工智能 NoSQL 关系型数据库
主从模式(Master-Slave Architecture)在传统的计算机科学中指的是一种分布式系统架构
主从模式(Master-Slave Architecture)在传统的计算机科学中指的是一种分布式系统架构
268 5
|
6月前
|
负载均衡 NoSQL 关系型数据库
深入浅出Redis(六):Redis的主从架构与主从复制原理
深入浅出Redis(六):Redis的主从架构与主从复制原理
|
6月前
|
运维 负载均衡 监控
软件体系结构 - 关系数据库(3)主从架构
【4月更文挑战第26天】软件体系结构 - 关系数据库(3)主从架构
96 0
|
6月前
|
存储 负载均衡 NoSQL
Redis 高可用篇:你管这叫主从架构数据同步原理?
Redis 高可用篇:你管这叫主从架构数据同步原理?
338 5
|
6月前
|
关系型数据库 MySQL 数据库
分库分表之基于Shardingjdbc+docker+mysql主从架构实现读写分离(一)
分库分表之基于Shardingjdbc+docker+mysql主从架构实现读写分离(一)