讲师中心 微信公众号
AI工具推荐 视频效率加速

统信UOS怎么安装和配置PostgreSQL高可用

胖墨小哥_5696

胖墨小哥_5696

发布时间:2026-06-25 07:28:29

|

769人浏览过

|

来源于php中文网

原创

统信UOS部署PostgreSQL高可用集群需基于Patroni+etcd实现自动故障转移,核心步骤包括:配置三节点etcd集群、初始化主库并启用WAL与复制、创建replicator用户、编写Patroni配置文件(含restapi/etcd/postgresql参数)、部署systemd服务,并在备节点自动拉取数据构建流复制集群,最终通过patronictl验证failover能力。

统信uos怎么安装和配置postgresql高可用

在统信UOS上部署PostgreSQL高可用集群,需突破单实例局限,实现主库故障时自动切换至备库、数据零丢失、服务不中断。这要求同时配置流复制、触发器文件切换、Patroni或repmgr等编排工具,并调整内核参数与防火墙策略。

准备基础环境与依赖

先确认系统为UOS Server 20或Desktop Professional 1070及以上版本,内核≥5.10,且已关闭SELinux(UOS默认未启用,但需验证):
sudo cat /etc/os-version | grep -E "(MajorVersion|MinorVersion)"
sudo getenforce 2>/dev/null || echo "SELinux not installed"

安装高可用必需的底层工具链:
sudo apt update && sudo apt install -y curl wget gnupg2 python3-pip python3-setuptools python3-venv libpq-dev libssl-dev libsystemd-dev

若目标机器处于离线环境,必须提前在联网机执行:
sudo apt download postgresql-14 postgresql-client-14 postgresql-contrib-14 python3-patroni python3-etcd python3-consul python3-dnspython && scp *.deb user@offline-host:/tmp/debs/

在离线主机上一次性补全依赖并安装:
sudo dpkg -i /tmp/debs/*.deb 2>/dev/null || sudo apt --fix-broken install -y

部署Patroni集群控制器

Patroni是当前UOS环境下最稳定的PostgreSQL高可用方案,它基于DCS(如etcd)协调主从状态,避免脑裂。

方法一:使用pip安装(推荐,版本可控)
sudo python3 -m venv /opt/patroni-env
sudo /opt/patroni-env/bin/pip install --upgrade pip
sudo /opt/patroni-env/bin/pip install patroni[etcd] psycopg2-binary

方法二:APT安装(仅限UOS官方源含patroni包的版本)
sudo apt install -y python3-patroni python3-etcd

【关键前提】必须预先部署一个三节点etcd集群(非单点),监听地址绑定到内网IP(如192.168.10.10:2379),且Patroni节点能稳定访问该端口。单点etcd会导致整个HA失效。

初始化主库并配置流复制

第一步:创建专用postgres用户与数据目录
sudo useradd -r -m -u 26 -g 26 -d /var/lib/postgresql postgres
sudo mkdir -p /var/lib/postgresql/14/main && sudo chown -R postgres:postgres /var/lib/postgresql

第二步:以postgres用户初始化主库集群
sudo -u postgres /usr/lib/postgresql/14/bin/initdb -D /var/lib/postgresql/14/main -E UTF8 --locale=C.UTF-8 --data-checksums

第三步:修改postgresql.conf启用复制功能
sudo sed -i "s/#wal_level = replica/wal_level = logical/" /var/lib/postgresql/14/main/postgresql.conf
sudo sed -i "s/#archive_mode = off/archive_mode = on/" /var/lib/postgresql/14/main/postgresql.conf
sudo sed -i "s|#archive_command = ''|archive_command = 'cp %p /var/lib/postgresql/14/archive/%f'|" /var/lib/postgresql/14/main/postgresql.conf
sudo sed -i "s/#max_wal_senders = 10/max_wal_senders = 10/" /var/lib/postgresql/14/main/postgresql.conf
sudo sed -i "s/#max_replication_slots = 10/max_replication_slots = 10/" /var/lib/postgresql/14/main/postgresql.conf
sudo sed -i "s/#hot_standby = off/hot_standby = on/" /var/lib/postgresql/14/main/postgresql.conf

第四步:配置pg_hba.conf允许复制连接
echo "host replication replicator 192.168.10.0/24 md5" | sudo tee -a /var/lib/postgresql/14/main/pg_hba.conf

第五步:创建replicator用户并设密码(后续所有节点复用此凭据)
sudo -u postgres psql -c "CREATE USER replicator WITH REPLICATION ENCRYPTED PASSWORD 'ReplicaPass2026!';"

配置Patroni并启动集群

创建Patroni配置文件 /etc/patroni.yml:

scope: postgres-cluster
namespace: /service/
restapi:
  listen: 192.168.10.10:8008
  connect_address: 192.168.10.10:8008
etcd:
  hosts: ['192.168.10.10:2379','192.168.10.11:2379','192.168.10.12:2379']
bootstrap:
  initdb:
    - encoding: UTF8
    - locale: C.UTF-8
  pg_hba:
    - host all all 0.0.0.0/0 md5
    - host replication replicator 192.168.10.0/24 md5
  postgresql:
    listen: 192.168.10.10:5432
    connect_address: 192.168.10.10:5432
    data_dir: /var/lib/postgresql/14/main
    bin_dir: /usr/lib/postgresql/14/bin
    pgpass: /var/lib/postgresql/.pgpass
    authentication:
      replication:
        username: replicator
        password: ReplicaPass2026!
      superuser:
        username: postgres
        password: PostgresAdmin2026!

赋予配置文件权限:
sudo chown postgres:postgres /etc/patroni.yml && sudo chmod 600 /etc/patroni.yml

编写systemd服务单元文件 /etc/systemd/system/patroni.service:

[Unit]
Description=Patroni High Availability PostgreSQL Cluster
After=network.target etcd.service

[Service]
Type=simple
User=postgres
Group=postgres
EnvironmentFile=/etc/default/patroni
ExecStart=/opt/patroni-env/bin/patroni /etc/patroni.yml
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

启用并启动Patroni服务:
sudo systemctl daemon-reload
sudo systemctl enable patroni
sudo systemctl start patroni

验证集群状态:
sudo -u postgres patronictl -c /etc/patroni.yml list

添加备库节点

在第二台UOS主机(IP: 192.168.10.11)上重复以下操作:

① 创建postgres用户与目录结构(同主库步骤)
② 安装Patroni及依赖(同主库)
③ 配置/etc/patroni.yml,仅修改以下三项:
  restapi.listen → 192.168.10.11:8008
  restapi.connect_address → 192.168.10.11:8008
  bootstrap.postgresql.listen → 192.168.10.11:5432
  bootstrap.postgresql.connect_address → 192.168.10.11:5432
④ 启动patroni服务:
  sudo systemctl start patroni

此时Patroni会自动触发pg_basebackup拉取主库全量数据,并启动流复制。无需手动执行备份命令。

第三节点(192.168.10.12)按相同流程部署,构成三节点仲裁集群。

验证故障自动切换

登录任意节点执行:
sudo -u postgres patronictl -c /etc/patroni.yml failover

观察输出中出现“Successfully switched over to pg-node-02”字样,且原主库变为sync_standby状态。

连接数据库验证角色变更:
psql -h 192.168.10.10 -U postgres -c "SELECT pg_is_in_recovery();"
返回t表示已降为备库;返回f表示已升为主库。

强制杀死当前主库进程模拟宕机:
sudo pkill -f "postgres:.*master process"

等待约15秒后,执行:
sudo -u postgres patronictl -c /etc/patroni.yml list

确认新主节点状态为leader,且其余节点role列为replica。

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
postgresql常用命令
postgresql常用命令

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、l、c、dt、d table_name、du、i file_name、e和q等。本专题为大家提供postgresql相关的文章、下载、课程内容,供大家免费下载体验。

213

2023.10.10

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4149

2023.11.02

postgresql常用命令有哪些
postgresql常用命令有哪些

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、l、c、dt、d table_name、du、i file_name、e和q等。更详细的postgresql常用命令,大家可以访问下面的文章。

607

2023.11.16

postgresql常用命令介绍
postgresql常用命令介绍

postgresql常用命令有l、d、d5、di、ds、dv、df、dn、db、dg、dp、c、pset、show search_path、ALTER TABLE、INSERT INTO、UPDATE、DELETE FROM、SELECT等。想了解更多postgresql的相关内容,可以阅读本专题下面的文章。

1356

2023.11.20

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

440

2026.02.12

PostgreSQL 性能优化与查询执行计划实战
PostgreSQL 性能优化与查询执行计划实战

本专题深入解析PostgreSQL性能优化核心,聚焦查询执行计划的实战应用。通过EXPLAIN命令精准定位瓶颈,结合索引策略、SQL改写与参数调优,系统提升查询效率。从执行计划解读到性能调优全流程,助你掌握数据库性能诊断与优化实战能力。

130

2026.05.08

PostgreSQL 在 Next.js / Go 全栈架构中的工程化实践
PostgreSQL 在 Next.js / Go 全栈架构中的工程化实践

本文详解如何利用Next.js(搭配Drizzle ORM)与Go后端构建高性能应用,充分发挥PG在JSONB非结构化存储与pgvector向量检索上的优势。从数据建模到Docker容器化部署,打造支持AI时代的“One Database”工程化解决方案。

881

2026.05.08

PostgreSQL高级特性、内核机制与现代数据架构
PostgreSQL高级特性、内核机制与现代数据架构

本专题从MVCC并发控制与WAL日志等内核机制出发,详解JSONB、PostGIS及pgvector等高级特性。探讨如何利用单一引擎支撑关系型、向量及图数据等现代数据架构需求,助您掌握构建高并发、智能化应用的核心技术。

224

2026.05.08

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

120

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 176人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn