当前位置: 首页 > news >正文

使用阿里云服务器搭建PostgreSQL主从架构图文流程

阿里云百科分享使用阿里云服务器搭建PostgreSQL主从架构图文流程,PostgreSQL被业界誉为最先进的开源数据库,支持NoSQL数据类型(JSON/XML/hstore)。本文档介绍在CentOS 7操作系统的ECS实例上搭建PostgreSQL主从架构的操作步骤。

目录

前提条件

步骤一:选购ECS实例

步骤二:配置PostgreSQL主节点

步骤三:配置PostgreSQL从节点

步骤四:检测验证


前提条件

  • 已注册阿里云账号。如还未注册,请先完成账号注册。
  • 已在安全组入方向中添加规则放行5432端口。具体步骤,请参见添加安全组规则。
  • ECS云服务器:aliyunbaike.com/go/ecs
  • 实例规格:ecs.g6.large
  • 操作系统:CentOS 7.2
  • PostgreSQL:11

本教程基于yum方式手动安装并搭建PostgreSQL主从复制架构。

步骤一:选购ECS实例

搭建PostgreSQL主从复制架构,需要选购2台专有网络类型的ECS实例,一台ECS实例作为主节点,另一台ECS实例作为从节点。 具体操作,请参见使用向导创建实例。

说明 建议您不为ECS实例分配公网IP,按需购买弹性公网IP绑定至ECS实例,后续您可以根据实际情况考虑升级配置或调优架构。详情请参见申请弹性公网IP。

 

步骤二:配置PostgreSQL主节点

  1. 远程连接PostgreSQL主节点。

    具体操作,请参见连接方式概述。

  2. 依次运行以下命令,安装PostgreSQL。
    yum update -y
    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 postgresql11-server postgresql11-contrib -y
    /usr/pgsql-11/bin/postgresql-11-setup initdb

    说明 本教程以PostgreSQL 11版本为例。实际安装时,请您使用最新版本。

  3. 依次运行以下命令,启动服务并设置服务开机自启动。
    systemctl start postgresql-11.service    #启动服务
    systemctl enable postgresql-11.service   #设置服务开机自启动
  4. 在主节点上创建数据库账号replica(用于主从复制),并设置密码及登录权限和备份权限。可以在阿里云CLUB中心:aliyun.club 领取云服务器专用的满减券。
    1. 运行以下命令,登录postgres用户。
      su - postgres
    2. 当显示-bash-4.2$时表示成功登录,然后输入以下命令进入PostgreSQL交互终端。
      psql
    3. 当显示postgres=#时表示成功进入交互终端,然后为用户postgres设置密码,增强安全性。
      ALTER USER postgres WITH PASSWORD 'YourPassWord';
    4. 输入以下SQL语句创建数据库账号replica,并设置密码及登录权限和备份权限。本示例中将密码设置为replica
      CREATE ROLE replica login replication encrypted password 'replica';
    5. 查询账号是否创建成功。
      SELECT usename from pg_user;
      返回结果如下,表示已创建成功。
      usename  
      ----------
      postgres
      replica
      (2 rows)
    6. 查询权限是否创建成功。
      SELECT rolname from pg_roles;
      返回结果如下,表示已创建成功。
      rolname  
      ----------
      postgres
      replica
      (2 rows)
    7. 输入以下命令,并按Enter退出SQL终端。
      \q
    8. 输入以下命令,并按Enter退出PostgreSQL。
      exit
  5. 运行以下命令,打开pg_hba.conf文件,设置replica用户白名单。
    vim /var/lib/pgsql/11/data/pg_hba.conf
    IPv4 local connections段添加下面两行内容。
    host    all             all             <从节点的VPC IPv4网段>          md5     #允许VPC网段中md5密码认证连接
    host    replication     replica         <从节点的VPC IPv4网段>          md5     #允许用户从replication数据库进行数据同步

    添加完成后,按Esc键,输入:wq并按下enter键,保存并退出。

  6. 运行以下命令,打开postgresql.conf文件。
    vim /var/lib/pgsql/11/data/postgresql.conf
    分别找到以下参数,并将参数修改为以下内容:
    listen_addresses = '*'   #监听的IP地址
    wal_level = hot_standby  #启用热备模式
    synchronous_commit = on  #开启同步复制
    max_wal_senders = 32     #同步最大的进程数量
    wal_sender_timeout = 60s #流复制主机发送数据的超时时间
    max_connections = 100    #最大连接数,从库的max_connections必须要大于主库的

    修改完成后,按Esc键,输入:wq并按下enter键,保存并退出。

  7. 运行以下命令,重启服务。
    systemctl restart postgresql-11.service

步骤三:配置PostgreSQL从节点

  1. 远程连接PostgreSQL从节点。

    具体操作,请参见连接方式概述。

  2. 依次运行以下命令,安装PostgreSQL。
    yum update -y
    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 postgresql11-server postgresql11-contrib -y
  3. 运行以下命令,使用pg_basebackup基础备份工具指定备份目录。
    pg_basebackup -D /var/lib/pgsql/11/data -h <主节点IP> -p 5432 -U replica -X stream -P
    本示例中Passwordreplica
    Password: 
    30075/30075 kB (100%), 1/1 tablespace
  4. 依次运行以下命令,新建并修改recovery.conf配置文件。
    cp /usr/pgsql-11/share/recovery.conf.sample /var/lib/pgsql/11/data/recovery.conf
    vim /var/lib/pgsql/11/data/recovery.conf
    分别找到以下参数,并将参数修改为以下内容:
    standby_mode = on     #声明此节点为从库
    primary_conninfo = 'host=<主节点IP> port=5432 user=replica password=replica' #对应主库的连接信息
    recovery_target_timeline = 'latest' #流复制同步到最新的数据

    修改完成后,按Esc键,输入:wq并按下enter键,保存并退出。

  5. 运行以下命令,打开postgresql.conf文件。
    vim /var/lib/pgsql/11/data/postgresql.conf
    分别找到以下参数,并将参数修改为以下内容:
    max_connections = 1000             # 最大连接数,从节点需设置比主节点大
    hot_standby = on                   # 开启热备
    max_standby_streaming_delay = 30s  # 数据流备份的最大延迟时间
    wal_receiver_status_interval = 1s  # 从节点向主节点报告自身状态的最长间隔时间
    hot_standby_feedback = on          # 如果有错误的数据复制向主进行反馈

    修改完成后,按Esc键,输入:wq并按下enter键,保存并退出。

  6. 运行以下命令,修改数据目录的属组和属主。
    chown -R postgres.postgres /var/lib/pgsql/11/data
  7. 依次运行以下命令,启动服务并设置服务开机自启动。
    systemctl start postgresql-11.service    #启动服务
    systemctl enable postgresql-11.service   #设置服务开机自启动

 

步骤四:检测验证

检测验证需要主从节点之间存在数据交互,例如,从节点备份目录时,进行检测能够得到预期的结果。

pg_basebackup -D /var/lib/pgsql/96/data -h <主节点IP> -p 5432 -U replica -X stream -P
  1. 在主节点中运行以下命令,查看sender进程。
    ps aux |grep sender
    返回结果如下,表示可成功查看到sender进程。
    postgres  2916  0.0  0.3 340388  3220 ?        Ss   15:38   0:00 postgres: wal sender     process replica 192.168.**.**(49640) streaming 0/F01C1A8
  2. 在从节点中运行以下命令,查看receiver进程。
    ps aux |grep receiver
    返回结果如下,表示可成功查看到receiver进程。
    postgres 23284  0.0  0.3 387100  3444 ?        Ss   16:04   0:00 postgres: wal receiver process   streaming 0/F01C1A8
  3. 在主节点中进入PostgreSQL交互终端,输入以下SQL语句,在主库中查看从库状态。
    select * from pg_stat_replication;
    返回结果如下,表示可成功查看到从库状态。
    pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | backend_xmin | state | sent_location | write_locati
    on | flush_location | replay_location | sync_priority | sync_state 
    ------+----------+---------+------------------+---------------+-----------------+------------- +-------------------------------+--------------+-----------+---------------+-------------
    ---+----------------+-----------------+---------------+------------
    2916 | 16393 | replica | walreceiver | 192.168.**.** | | 49640 | 2017-05-02 15:38:06.188988+08 | 1836 | streaming | 0/F01C0C8 | 0/F01C0C8 
    | 0/F01C0C8 | 0/F01C0C8 | 0 | async
    (1 rows)

原文来自阿里云官方文档。 

相关文章:

使用阿里云服务器搭建PostgreSQL主从架构图文流程

阿里云百科分享使用阿里云服务器搭建PostgreSQL主从架构图文流程&#xff0c;PostgreSQL被业界誉为最先进的开源数据库&#xff0c;支持NoSQL数据类型&#xff08;JSON/XML/hstore&#xff09;。本文档介绍在CentOS 7操作系统的ECS实例上搭建PostgreSQL主从架构的操作步骤。 目…...

Linux的基本权限(文件,目录)

文章目录 前言一、Linux权限的概念二、Linux权限管理 1.文件访问者分类2.文件类型和访问类型3.文件访问权限的相关设置方法三、目录的权限四、权限的总结 前言 Linux下一切皆文件&#xff0c;指令的本质就是可执行文件&#xff0c;直接安装到了系统的某种路径下 一、Linux权限的…...

网络编程(12): TCP重传、滑动窗口、流量控制、拥塞控制

1、TCP重传机制 通过序列号和确认号确保可靠传输&#xff0c;当发送端发送数据给接收到&#xff0c;接收端会返回一个确认号&#xff0c;表示收到消息了 超时重传&#xff1a;没有在指定时间内收到ACK报文 超时重传的两种可能&#xff1a;数据包丢失、确认包丢失超时重传时间RT…...

Docker安装RabbitMQ服务端

使用docker安装RabbitMQ服务端 1、搜索镜像 docker search rabbitmq2、拉取镜像 默认拉取最后一个版本&#xff0c;可以在后面加版本号拉取指定版本 docker pull rabbitmq 3、运行镜像 docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 rabbitmq4、查看…...

vueuse常用方法

useDateFormat 时间格式化 <script setup lang"ts">import { useNow, useDateFormat } from vueuse/coreconst formatted useDateFormat(useNow(), YYYY-MM-DD HH:mm:ss)</script><template><div>{{ formatted }}</div> </templa…...

选择大型语言模型自定义技术

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可二次编辑器的3D应用场景 企业需要自定义模型来根据其特定用例和领域知识定制语言处理功能。自定义LLM使企业能够在特定的行业或组织环境中更高效&#xff0c;更准确地生成和理解文本。 自定义模型使企业能够创建符合其品牌…...

算法概述-Java常用算法

算法概述-Java常用算法 1、算法概念2、算法相关概念3、算法的性能评价4、算法应用归纳 1、算法概念 广泛算法定义&#xff1a;算法是模型分析的一组可行性的、确定的和有穷的规则。 经典算法特征&#xff1a;有穷性、确切性、输入、输出和可行性。 常用的算法包括递推、递归、穷…...

CCLINK转MODBUS-TCP网关cclink通讯接线图 终端电阻

大家好&#xff0c;今天我们要聊的是生产管理系统中的CCLINK和MODBUS-TCP协议&#xff0c;它们的不同使得数据互通比较困难&#xff0c;但捷米JM-CCLK-TCP网关的出现改变了这一切。 1捷米JM-CCLK-TCP是一款自主研发的CCLINK从站功能的通讯网关&#xff0c;它的主要功能是将各种…...

香蕉派 BPI-P2 Pro采用RK3308芯片,512M内存,8G存储,支持PoE供电

Banana Pi BPI-P2 pro(Armsom pro)是一款基于瑞芯瑞(Rockchip) RK3308B-S芯片的开发板。采用高性能4核ARM Cortex-A35处理器&#xff0c;512M RAM内存。和8G eMMC板载存储&#xff0c;支持PoE网线供电功能。芯片具有丰富的接口&#xff0c;如I2S、PCM、TDM、I2C、UART、SPDIF、…...

「隐语小课」拆分学习之“水平拆分学习”

一、引言 拆分学习是 2018 年由 MIT 最先提出的分布式算法。本文结合该领域的相关英文文献&#xff0c;介绍水平拆分学习的基本方法&#xff0c;同时还将对比拆分模型与中心化模型、联邦模型在不同条件下模型效率和准确性。拆分学习作为主流的隐私计算学习范式之一&#xff0c…...

WPF--关于Action事件小结

WPF--关于Action事件小结 1.需要类实例去调用事件建立订阅关系 public event Action<int, object> MaintainEvent; new GP1().MaintainEvent NormalCmdAction; 2.static用处--在不便实例的时候&#xff0c;可以直接由类调用 public static event Action<int, objec…...

创建一个 React+Typescript 项目

接下来 我们来一起探索一下用TypeScript 来编写react 这也是一个非常好的趋势&#xff0c;目前也非常多人使用 那么 我们就先从创建项目开始 首先 我们先找一个 或者 之前创建一个目录 用来放我们的项目 然后 在这个目录下直接输入 例如 这里 我想创建一个叫 tsReApp 的项目…...

Java课题笔记~ 数据提交的方式

前四种数据注入的方式&#xff0c;会自动进行类型转换。但无法自动转换日期类型。 &#xff08;1&#xff09;单个数据&#xff08;基本数据类型&#xff09;注入 在方法中声明一个和表单提交的参数名称相同的参数&#xff0c;由框架按照名称直接注入。 &#xff08;2&#x…...

VUE3给页面添加按钮事件

在Vue 3中&#xff0c;可以通过使用setup函数来添加事件和自定义逻辑。下面是一个示例代码&#xff0c;演示了如何添加页面上的altb事件 <template><div><p>Press Alt B to trigger the event!</p></div> </template><script setup&g…...

基于centos7.9通过nginx实现负载均衡以及反向代理

摘要&#xff1a;负载均衡&#xff1a; 负载均衡是一种技术&#xff0c;用于在多个服务器之间分发传入的网络流量&#xff0c;以平衡服务器的负载&#xff0c;提高系统的可用性和性能。当您有多台服务器时&#xff0c;您可以使用负载均衡将请求分发到这些服务器上&#xff0c;从…...

前端原生写自定义旋转变换轮播图

html部分&#xff1a; <div class"banner_box"><div class"swiperWrapper" v-show"bannerList.length>0"><div class"swiper-item" :id"swiperSlide${index}" :class"{active:index0,next:index1,pr…...

linux tomcat server.xml 项目访问路径变更不生效

如果想改成默认的127.0.0.1:8080 访问项目 先确定更改的作用文件 server.xml 的 host:appBase 标签 默认找到appBase webapps 下的war包&#xff0c;并解压&#xff0c;解压后的appname为访问路径 也就变成了 127.0.0.1:8080/appname host:Context:path 标签 appBase的 优先…...

介绍原型模式:快速构建和复制对象的设计模式

经过瀑布模式之后&#xff0c;我们不禁想要用模型解决更多的问题&#xff0c;最重要的就是不再单向行径。 由此&#xff0c;介绍 原型模式&#xff0c; 所谓原型&#xff0c;就是我们有一个框架或者初始角色。我们可以根据项目的不同&#xff0c;对它进行不同的修改&#xff0…...

Unity的TimeScale的影响范围分析

大家好&#xff0c;我是阿赵。 这期来说一下Unity的TimeScale。 一、前言 Unity提供了Time这个类&#xff0c;来控制时间。其实我自己倒是很少使用这个Time&#xff0c;因为做网络同步的游戏&#xff0c;一般是需要同步服务器时间&#xff0c;所以我比较多是在使用System.Date…...

爬虫逆向实战(五)--猿人学第三题

一、数据接口分析 主页地址&#xff1a;猿人学第三题 1、抓包 通过抓包可以发现数据接口是api/match/3 2、判断是否有加密参数 请求参数是否加密&#xff1f; 无请求头是否加密&#xff1f; 无响应是否加密&#xff1f; 无cookie是否加密&#xff1f; 无 二、发送请求 …...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...