身份标识

实体命名规范与身份标识符设计。

Pigsty 使用统一的身份标识系统来识别和管理实体,确保命名一致性和可追溯性。


核心身份参数

三项必填参数构成 PGSQL 的最小身份集:

参数 层级 说明 约束
pg_cluster 集群 集群名称 [a-z][a-z0-9-]*
pg_seq 实例 实例序号 唯一正整数,不可复用
pg_role 实例 实例角色 primary/replica/offline/delayed

这三个参数必须在配置清单中显式指定,Pigsty 不会提供默认值。


衍生标识

基于核心参数,Pigsty 自动生成其他实体标识:

实例名

实例名 = ${pg_cluster}-${pg_seq}

示例:

  • pg-test-1
  • pg-test-2
  • pg-meta-1

服务名

服务名 = ${pg_cluster}-${角色后缀}

默认服务:

  • pg-test-primary(读写)
  • pg-test-replica(只读)
  • pg-test-default(直连)
  • pg-test-offline(离线)

节点名

默认情况下,节点名等同于实例名:

节点名 = ${pg_cluster}-${pg_seq}

可通过 node_id_from_pg 参数控制。


命名规范

集群命名

集群名应为有效的 DNS 域名组件:

正确:pg-test, pg-meta, pg-order-db
错误:pg.test, pg_test, PG-TEST

规则

  • 只能包含小写字母、数字和连字符
  • 必须以字母开头
  • 不能包含点号、下划线或大写字母
  • 正则:[a-z][a-z0-9-]*

建议

  • 使用 模块-用途 格式:pg-orderpg-user
  • 使用 模块-环境-用途 格式:pg-prod-order

实例序号

序号是集群内实例的唯一标识:

规则:正整数,从 1 开始,唯一且不可复用

设计理念

  • 表达拓扑顺序和故障转移优先级
  • 一旦分配,即使实例销毁也不应复用
  • 用于监控标签和日志关联

实例角色

角色决定实例在复制拓扑中的位置:

角色 说明 数量
primary 主库,可读写 有且仅有 1 个
replica 从库,承载在线只读 0 到多个
offline 离线库,不承载在线流量 0 到多个
delayed 延迟库,延迟复制 0 到多个

配置示例

pg-test:
  hosts:
    10.10.10.11: { pg_seq: 1, pg_role: primary }
    10.10.10.12: { pg_seq: 2, pg_role: replica }
    10.10.10.13: { pg_seq: 3, pg_role: replica, pg_offline_query: true }
  vars:
    pg_cluster: pg-test

生成的标识

集群 序号 角色 节点 IP 实例名 主机名
pg-test 1 primary 10.10.10.11 pg-test-1 pg-test-1
pg-test 2 replica 10.10.10.12 pg-test-2 pg-test-2
pg-test 3 replica 10.10.10.13 pg-test-3 pg-test-3

服务入口

服务名 端口 目标实例
pg-test-primary 5433 pg-test-1
pg-test-replica 5434 pg-test-2, pg-test-3
pg-test-default 5436 pg-test-1
pg-test-offline 5438 pg-test-3

监控标签

监控系统使用身份参数作为指标标签:

# 实例级指标
pg_up{cls="pg-test", ins="pg-test-1", ip="10.10.10.11", job="pgsql"}

# 集群级聚合
sum(pg_stat_activity_count{cls="pg-test"})

# 特定实例
pg_replication_lag_seconds{ins="pg-test-2"}

标签定义

标签 来源 说明
cls pg_cluster 集群名
ins pg_cluster-pg_seq 实例名
ip 节点 IP 节点地址
job 固定值 pgsqlpgrds

日志标签

VictoriaLogs 使用以下标签:

日志类型 Job 名
PostgreSQL CSV 日志 postgres
pgBackRest 日志 pgbackrest
其他组件(通过 syslog) 各组件名

最佳实践

命名建议

  1. 语义化:名称应反映业务含义

    pg-order    # 订单服务数据库
    pg-user     # 用户服务数据库
    pg-meta     # 元数据库
    
  2. 环境前缀:区分不同环境

    pg-prod-order   # 生产环境
    pg-stag-order   # 预发环境
    pg-dev-order    # 开发环境
    
  3. 保持一致:整个组织使用统一的命名规范

序号分配

  1. 不要复用:实例销毁后,序号应保留
  2. 预留空间:为扩容预留序号范围
  3. 记录映射:维护序号与用途的映射文档