首页 > 数据库 >搭建 PostgreSQL 主从架构

搭建 PostgreSQL 主从架构

时间:2024-11-12 11:19:12浏览次数:3  
标签:12 架构 以下 命令 xx PostgreSQL 执行 主从

操作场景

PostgreSQL 是一个开源对象关系型数据库管理系统,并侧重于可扩展性和标准的符合性。PostgreSQL 面向企业复杂 SQL 处理的 OLTP 在线事务处理场景,支持 NoSQL 数据类型(JSON/XML/hstore),支持 GIS(Geographic Information System 或 Geo-Information system)地理信息处理,在可靠性、数据完整性方面有良好声誉,适用于互联网网站、位置应用系统、复杂数据对象处理等应用场景。

本文指导您在 CentOS 7 操作系统的云服务器实例上搭建 PostgreSQL。

示例软件版本

本文搭建的 PostgreSQL 组成及版本使用说明如下:

Linux:Linux 操作系统,本文以 CentOS 7.6 为例。

PostgreSQL:关系型数据库管理系统,本文以 PostgreSQL 12 为例。

前提条件

已创建两台云服务器实例(一台云服务器实例作为主节点,另一台云服务器实例作为从节点)。 具体步骤请参见 通过购买页创建实例

新建的两台云服务器实例已配置安全组规则:放通5432端口。 具体步骤请参见 添加安全组规则

操作步骤

配置主节点

1. 登录主节点实例。

2. 执行以下命令,升级所有包、系统版本和内核。

yum update -y

3. 依次执行以下命令,安装 PostgreSQL。 本文以使用 PostgreSQL 12 版本为例,您可按需选择其他版本。

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 postgresql12-server postgresql12-contrib -y

/usr/pgsql-12/bin/postgresql12-setup initdb

4. 执行以下命令,启动服务。

systemctl start postgresql-12.service

5. 执行以下命令,设置服务开机自启动。

systemctl enable postgresql-12.service

6. 执行以下命令,登录 postgres 用户。

su - postgres

7. 执行以下命令,进入 PostgreSQL 交互终端。

psql

8. 执行以下命令,为用户 postgres 设置密码,增强安全性。

ALTER USER postgres WITH PASSWORD '自定义密码';

9. 执行以下命令,创建数据库账号,并设置密码及登录权限和备份权限。

create role 账户名 login replication encrypted password '自定义密码';

本文以创建数据库账号 replica,密码 123456 为例,则执行以下命令。

create role replica login replication encrypted password '123456';

10. 执行以下命令,查询账号是否创建成功。

SELECT usename from pg_user;

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

usename

----------

postgres

replica

(2 rows)

11. 执行以下命令,查询权限是否创建成功。

SELECT rolname from pg_roles;

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

rolname

-------------------

pg_signal_backend

postgres

replica

(3 rows)

12. 输入 \q,按 Enter,退出 SQL 终端。

13. 输入 exit,按 Enter,退出 PostgreSQL。

14. 执行以下命令,打开 pg_hba.conf 配置文件,设置 replica 用户白名单。

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

15. 按 i 切换至编辑模式,在 IPv4 local connections 段添加如下两行内容:

host all all <从节点的VPC IPv4网段> md5 #允许 VPC 网段中 md5 密码认证连接

host replication replica <从节点的VPC IPv4网段> md5 #允许用户从 replication 数据库进行数据同步

例如,数据库账号为 replica,从节点的 VPC IPv4 网段为 xx.xx.xx.xx/16,则在 IPv4 local connections 段添加如下内容:

host all all xx.xx.xx.xx/16 md5

host replication replica xx.xx.xx.xx/16 md5

16. 按 Esc,输入 :wq,保存文件返回。

17. 执行以下命令,打开 postgresql.conf 文件。

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

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

listen_addresses = '*' #监听的内网 IP 地址

max_connections = 100 #最大连接数,从库的 max_connections 必须要大于主库的

wal_level = hot_standby #启用热备模式

synchronous_commit = on #开启同步复制

max_wal_senders = 32 #同步最大的进程数量

wal_sender_timeout = 60s #流复制主机发送数据的超时时间

19. 按 Esc,输入 :wq,保存文件返回。

20. 执行以下命令,重启服务。

systemctl restart postgresql-12.service

配置从节点

1. 登录从节点实例。

2. 执行以下命令,升级所有包、系统版本和内核。

yum update -y

3. 依次执行以下命令,安装 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 postgresql12-server postgresql12-contrib -y

4. 执行以下命令,使用 pg_basebackup 基础备份工具制定备份目录。

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

根据提示,输入数据库账号对应的密码,按 Enter。返回如下结果,表示备份成功。

Password:

24526/24526 kB (100%), 1/1 tablespace

5. 执行以下命令,拷贝 master 配置相关文件。

cp /usr/pgsql-12/share/recovery.conf.sample /var/lib/pgsql/12/data/recovery.conf

6. 执行以下命令,打开 recovery.conf 文件。

vim /var/lib/pgsql/12/data/recovery.conf

7. 按 i 切换至编辑模式,分别找到如下参数,并修改为如下内容:

standby_mode = on #声明此节点为从库

primary_conninfo = 'host=<主节点公网 IP> port=5432 user=数据库账号 password=数据库密码' #对应主库的连接信息

recovery_target_timeline = 'latest' #流复制同步到最新的数据

8. 按 Esc,输入 :wq,保存文件返回。

9. 执行以下命令,打开 postgresql.conf 文件。

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

10. 按 i 切换至编辑模式,分别找到如下参数,并修改为如下内容:

max_connections = 1000 # 最大连接数,从库的 max_connections 必须要大于主库的

hot_standby = on # 开启热备

max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间

wal_receiver_status_interval = 1s # 从节点向主节点报告自身状态的最长间隔时间

hot_standby_feedback = on # 如果有错误的数据复制向主进行反馈

11. 按 Esc,输入 :wq,保存文件返回。

12. 执行以下命令,修改数据目录的属组和属主。

chown -R postgres.postgres /var/lib/pgsql/12/data

13. 执行以下命令,启动服务。

systemctl start postgresql-12.service

14. 执行以下命令,设置服务开机自启动。

systemctl enable postgresql-12.service

验证部署

您可以通过如下操作验证是否部署成功:

1. 执行以下命令,从节点备份目录。

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

输入数据库密码并按 Enter,返回如下结果,则表示已备份成功。

Password:

24526/24526 kB (100%), 1/1 tablespace

2. 在主节点中,执行以下命令,查看 sender 进程。

ps aux |grep sender

3. 在从节点中,执行以下命令,查看 receiver 进程。

ps aux |grep receiver

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



4. 在主节点中,依次执行以下命令,进入 PostgreSQL 交互终端,在主库中查看从库状态。

su - postgres
psql
select * from pg_stat_replication;

返回如下结果,即表示可成功查看到从库状态。



标签:12,架构,以下,命令,xx,PostgreSQL,执行,主从
From: https://blog.csdn.net/2401_88127808/article/details/143365017

相关文章

  • HarmonyOS Next在智能家居领域的安全架构:设备身份认证与数据防泄漏方案
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在智能家居蓬勃发展的今天,各种智......
  • arch——显示当前主机的硬件架构类型
    转自于:https://github.com/jaywcjlove/linux-command,后不赘述arch显示当前主机的硬件架构类型概要arch[OPTION]...主要用途打印机器架构信息;arch命令输出结果有:i386、i486、i586、alpha、sparc、arm、m68k、mips、ppc、i686等。选项--help显示帮助信息并退......
  • 软考架构案例分析-重点回顾笔记2
    反规范化设计方法? 常见反规范化技术:   增加冗余列:在多个表中保留相同的列,通过增加数据冗余减少或避免查询时的连接操作。   增加派生列:在表中增加可以由本表或其他表中数据计算生成的列,减少查询时的连接操作     并且避免计算或使用集合函数。  ......
  • 【软考】系统架构设计师-2018年下半年下午案例真题及答案
    全国计算机技术与软件专业技术资格(水平)考试高级系统架构设计师2018年下半年下午试卷 案例试题一 【说明】某文化产业集团委托软件公司开发一套文化用品商城系统,业务涉及文化用品销售、定制、竞拍和点评等板块,以提升商城的信息化建设水平。该软件公司组织项......
  • 【软考】系统架构设计师-2018年下半年下午论文真题及答案
    全国计算机技术与软件专业技术资格(水平)考试高级系统架构设计师2018年下半年下午试卷 论文试题一 论软件开发过程 RUP 及其应用RUP(RationalUnifiedProcess)是 IBM 公司一款软件开发过程产品,它提出了一整套以UML 为基础的开发准则,用以指导软件开发人员以 U......
  • 企业生产环境-麒麟V10(ARM架构)操作系统部署Zookeeper单节点&高可用集群版
    前言:ZooKeeper是一个分布式协调服务,它为分布式应用提供一致性服务,是ApacheHadoop的子项目。它被设计为易于编程,同时具有高性能和高可靠性。ZooKeeper提供了一个简单的接口和一些基本的文件系统操作,使得开发者能够快速地构建分布式应用。以下是ZooKeeper的一些关键特性和概念:......
  • PostgreSQL流复制主从监控和自动故障转移的轻量级实现
    如何实现PostgreSQL的高可用,之前研究过repmgr以及pg_auto_failover,起作用都是起到主节点故障时,实现“自动故障转移”的目的。但是repmgr以及pg_auto_failover得缺点是对数据库侵入过多,需要在监控的数据库内部进行一系列的配置操作,同时需要启动第三方服务实现节点的可用性监控,这又......
  • MySQL主从复制
    MySQL主从复制  概要  随着业务的增长,一台数据服务器已经满足不了需求了,负载过重。这个时候就需要减压了,实现负载均衡读写分离,一主一丛或一主多从。  主服务器只负责写,而从服务器只负责读,从而提高了效率减轻压力。  主从复制可以分为:  主从同步:当用户写数据......
  • 使用LangGraph构建复杂AI工作流:子图架构详解
    一、子图架构概述子图(Subgraph)是LangGraph中一个强大的特性,它允许我们将复杂的工作流程分解成更小、更易管理的组件。通过子图,我们可以实现模块化设计,提高代码的可重用性和可维护性。1.1子图的基本概念子图本质上是一个完整的图结构,可以作为更大图结构中的一个节点使用。它具......
  • LangGraph入门:构建ReACT架构的智能Agent
    引言在人工智能和大语言模型(LLM)快速发展的今天,如何构建高效、灵活的智能Agent成为了一个热门话题。LangGraph作为一个强大的工具,为我们提供了一种新的方式来实现复杂的AI工作流,特别是在构建ReACT(ReasoningandActing)架构的智能Agent方面表现出色。本文将深入探讨如何使用LangGra......