重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 538|回复: 0
打印 上一主题 下一主题

PG环境下数据库集簇,集群服务及实例几者的关系

[复制链接]
跳转到指定楼层
楼主
发表于 2025-8-1 09:57:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 郑全 于 2025-8-1 10:00 编辑

在 PostgreSQL(简称 PG)环境中,“数据库实例”“数据库集簇”“集群服务” 是三个既相关又有明确区别的概念。它们分别对应 PG 运行的基础单元、数据组织形式以及多节点协同架构,理解这些概念对 PG 的部署、管理和优化至关重要。
一、PostgreSQL 数据库实例(Database Instance)PG 实例是数据库软件运行时的具体 “工作实体”,是支撑所有数据库操作的核心。
概念 PG 实例由后台进程和内存结构组成,负责处理用户请求(如 SQL 执行、数据读写)、管理数据访问,并与磁盘上的数据库文件交互。简单来说,它是 PG 软件启动后在内存中形成的 “动态运行环境”。
核心构成
  • 后台进程:PG 启动时会生成一系列核心进程,例如:
    • postmaster:主进程,负责监听客户端连接、启动其他子进程、处理故障恢复等;
    • postgres:为每个客户端连接创建的子进程,负责执行具体的 SQL 语句;
    • bgwriter:后台写进程,将内存中的脏数据定期刷入磁盘,减少事务提交时的 I/O 压力;
    • checkpointer:检查点进程,定期触发检查点,确保内存数据与磁盘数据的一致性。
  • 内存结构:PG 实例占用的内存分为多个区域,例如:
    • shared_buffers:共享缓冲区,缓存磁盘上的数据块,是提升查询性能的核心内存区域;
    • work_mem:为排序、哈希等操作分配的内存,影响复杂查询的执行效率;
    • maintenance_work_mem:为索引创建、数据导入等维护操作分配的内存。

特点
  • 一一对应的数据目录:一个 PG 实例必须关联一个[color=var(--md-box-samantha-deep-text-color) !important]数据目录(通过 PGDATA 环境变量指定),实例启动时从该目录加载配置、读取数据文件。
  • 独立性:每个实例有独立的端口(默认 5432)、进程和内存,不同实例之间互不干扰(即使运行在同一台服务器上)。
  • 启动与管理:通过 pg_ctl 命令管理实例(启动 pg_ctl start、停止 pg_ctl stop、重启 pg_ctl restart)。
示例在一台服务器上,可启动多个 PG 实例:

  • 实例 1:端口 5432,数据目录 /var/lib/postgresql/14/main,用于生产环境;
  • 实例 2:端口 5433,数据目录 /var/lib/postgresql/14/test,用于测试环境。
二、PostgreSQL 数据库集簇(Database Cluster)“数据库集簇” 是 PG 中一个特定术语(注意:与 “集群服务” 不同),指的是由单个实例管理的所有数据库及相关文件的集合
概念当通过 initdb 命令初始化 PG 时,会创建一个数据目录,该目录下的所有文件(数据文件、配置文件、日志文件等)共同构成 “数据库集簇”。一个集簇包含多个数据库(如默认的 postgres 数据库、template1 模板数据库),但这些数据库共享同一个实例的进程和内存结构。
核心组成
  • 数据库:集簇中可创建多个独立数据库(如 db1、db2),每个数据库有自己的表、索引等对象,且数据库之间默认隔离(用户需通过 \c dbname 切换数据库)。
  • 系统目录:存储集簇级元数据的特殊表(如 pg_database 记录所有数据库信息、pg_user 记录用户信息),属于 template1 模板数据库,会被新数据库继承。
  • 配置文件:如 postgresql.conf(实例参数配置)、pg_hba.conf(访问控制策略)、pg_ident.conf(用户映射配置),位于数据目录的根目录。
  • 日志与临时文件:如 pg_log 目录(日志文件)、pg_tblspc 目录(表空间链接)等。
特点
  • 单实例管理:一个数据库集簇只能被一个 PG 实例管理(实例启动时加载该集簇的配置和数据)。
  • 逻辑隔离:集簇内的多个数据库通过命名空间隔离,但底层共享实例的资源(内存、进程),因此并非完全独立的 “物理隔离”。
  • 初始化:通过 initdb 命令创建集簇(如 initdb -D /var/lib/postgresql/14/main),这是部署 PG 的第一步。
示例 初始化一个集簇后,默认包含 3 个数据库:postgres(默认连接数据库)、template0(不可修改的模板)、template1(新数据库的模板)。用户可通过 CREATE DATABASE db1; 在该集簇中创建新数据库。
三、PostgreSQL 集群服务(Cluster Service)PG 本身是单进程架构,不直接支持 “集群” 功能,但通过 外部工具、复制技术或扩展,可将多个 PG 实例(分布在不同节点)组成 “集群服务”,以实现高可用、负载均衡或分布式处理。
概念 PG 集群服务是指 多个独立的 PG 实例(节点)通过网络协同工作,对外提供统一的数据库服务。这些节点可能包含主节点(处理写操作)、从节点(处理读操作或备用),并通过复制机制保持数据同步。
常见架构与实现方式
  • 主从复制集群
    基于 PG 内置的 流复制(Stream Replication)技术,主节点将 WAL(Write-Ahead Log,预写日志)实时发送到从节点,从节点通过重放 WAL 保持数据与主节点一致。
    • 特点:主节点负责写操作,从节点可分担读压力(读写分离);主节点故障时,从节点可提升为主节点(故障转移)。
    • 工具支持:需配合 pg_rewind(修复脑裂)、Patroni(自动故障转移)、pgpool-II(负载均衡)等工具实现自动化管理。
  • 分布式集群(分片集群)
    通过扩展(如 Citus)将数据分片存储在多个节点,每个节点存储部分数据,协同处理查询。
    • 特点:支持海量数据存储和高并发查询,适合 OLAP 或大规模 OLTP 场景;查询时由协调节点分发任务到分片节点,再汇总结果。
  • 多主集群
    多个节点均可处理写操作,通过同步机制(如 Bucardo)保持数据一致。但复杂度高,易出现冲突,较少用于生产环境。
核心功能
  • 高可用性:通过冗余节点避免单点故障(如主节点故障后,从节点自动接管)。
  • 负载均衡:将读请求分发到多个从节点,减轻主节点压力(如 pgpool-II 实现)。
  • 可扩展性:通过添加节点提升存储容量或计算能力(如 Citus 集群横向扩展)。
示例 一个典型的电商 PG 集群:

  • 主节点:处理订单创建、库存更新等写操作;
  • 2 个从节点:分担商品查询、用户浏览记录等读操作;
  • 用 Patroni 监控节点状态,主节点故障时自动将从节点切换为主节点,确保服务不中断。
总结:三者的关系
  • 数据库实例是 PG 运行的动态单元(进程 + 内存),负责处理所有操作,关联一个数据目录;
  • 数据库集簇是实例管理的静态数据集合(数据文件 + 配置 + 多个数据库),存在于数据目录中;
  • 集群服务是多个实例(可能分布在不同服务器)通过协同机制组成的整体,用于提升可用性、扩展性。

简单来说:一个实例管理一个集簇,多个实例组成一个集群服务。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2026-4-18 00:29 , Processed in 0.248446 second(s), 21 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表