猪圈Pigsty-PG私有RDS集群搭建教程
本文最后更新于 2024年5月30日 下午
简介
Pigsty 是一个更好的本地自建且开源 RDS for PostgreSQL 替代,具有以下特点:
开箱即用的 PostgreSQL 发行版,深度整合地理、时序、分布式、图、向量、分词、AI等 150 余个扩展插件!
运行于裸操作系统之上,无需容器支持,支持主流操作系统: EL7/8/9 及其衍生发行版, Ubuntu 20.04/22.04 以及 Debian 11/12。(推荐使用Rocky Linux)
基于现代的 Prometheus 与 Grafana 技术栈,提供令人惊艳,无可比拟的数据库观测能力:画廊 & 演示站点
基于 pgBackRest 与可选的 MinIO 集群提供开箱即用的 PITR 时间点恢复,为软件缺陷与人为删库兜底。
基于 Ansible 提供声明式的 API 对复杂度进行抽象,以 Database-as-Code 的方式极大简化了日常运维管理操作。
Pigsty用途广泛,可用作完整应用运行时,开发演示数据/可视化应用,大量使用 PG 的软件可用 Docker 模板一键拉起。
提供基于 Vagrant 的本地开发测试沙箱环境,与基于 Terraform 的云端自动部署方案,开发测试生产保持环境一致。
部署并监控专用的 Redis(主从,哨兵,集群),MinIO,Etcd,Haproxy,MongoDB(FerretDB) 集群
官方文档:https://pigsty.cc/doc/#/zh/README
项目地址:https://github.com/Vonng/pigsty
本教程说明
一个非常简单的入门教程,用于构建一个三节点的PG集群(开启vip-manager),且支持扩展时序数据库TimeScaleDB,主要用于Zabbix的后端数据库。
基于Pigsty 2.7.0 、Rocky Linux 8.9 编写。
zabbix 7 安装教程:https://songxwn.com/zabbix-7-install-TimescaleDB/
安装
在线初始化元节点(管理监控节点)
准备一个全新的符合要求 的 Linux x86_64 ,使用带有root权限或有sudo权限的用户执行安装脚本。
(官方推荐使用Rocky Linux 8.9,配置建议2C4G 100G硬盘)
1 |
|
PS:安装后会移除系统自带yum源,建议提前安装所需软件。
该命令会下载并解压 Pigsty 源码至用户Home,按提示完成 准备,配置,安装三个步骤即可完成安装。
1 |
|
安装完成后,您可以通过域名或80/443端口通过 Nginx 访问 WEB 界面,通过 5432 端口访问元节点默认的 PostgreSQL 数据库服务。
集群和IP地址规划
IP地址 | 主机名 | 角色 |
---|---|---|
172.18.77.33 | pg-meta-1 | 元节点 |
172.18.77.101 | pg-cu1-1 | PG集群主机节点 |
172.18.77.102 | pg-cu1-2 | PG集群主机节点 |
172.18.77.103 | pg-cu1-3 | PG集群主机节点 |
172.18.77.99 | vip | Keepalived 虚拟IP |
PS:Keepalived 集群需要在同一广播域。(其实就是基于VRRP协议)
DNS 解析配置
组件 | 端口 | 域名 | 说明 | 官方Demo地址 |
---|---|---|---|---|
Nginx | 80 | h.pigsty |
Web 服务总入口,本地YUM源 | home.pigsty.cc |
AlertManager | 9093 | a.pigsty |
告警聚合/屏蔽页面 | a.pigsty.cc |
Grafana | 3000 | g.pigsty |
Grafana 监控面板 | demo.pigsty.cc |
Prometheus | 9090 | p.pigsty |
Prometheus 管理界面 | p.pigsty.cc |
你需要修改hosts文件,增加以上解析。或者在内网dns配置上述解析。解析的IP为元节点IP即可。
PS:也可以配置泛解析,如 1.1.1.1 *.pigsty.songxwn.com
Pigsty 会自动给纳入管理的节点填写hosts文件。
1 |
|
访问Web 界面
主页域名为 http://h.pigsty ,http://g.pigsty 为Grafana ,全局应用默认账号密码为 admin/pigsty。
(如果自己电脑要用浏览器访问,注意配置DNS解析或hosts文件)
部署三节点PG高可用集群
编辑Pigsty 配置文件,增加主机节点信息
1 |
|
增加PG集群和VIP配置信息
1、集群名字为pg-cu1
2、配置172.18.77.101为默认主节点,其他为从节点。
3、开启vip-manager keepalived配置,配置VIP地址为 172.18.22.99。配置每台关联VIP的网卡为ens33。(网卡名字注意修改)
4、vip-manager的VIP是绑定PG主节点
5、此段配置在children 下增加,与默认的pg-meta同级别的缩进。
1 |
|
增加PG数据库、用户、HBA配置。
1、增加zabbix、grafana 数据库,Zabbix 开启timescaledb扩展,并配置所属用户。并与pgbouncer同步创建。
2、增加zabbix、grafana 用户并配置密码、角色。并与pgbouncer同步创建。
3、配置用户的HBA规则,允许任意IP访问,并配置pgbouncer和HBA
4、pg_libs 配置PG加载的插件列表,这里加载了timescaledb插件。
1 |
|
配置元节点密钥免密登录主机节点
Pigsty 会在元节点自动生成一对公私钥,将其拷贝到所有主机节点。
1 |
|
将集群节点纳入Pigsty 管理并部署PG集群
节点纳入管理
1 |
|
PG集群初始化部署(注意:会根据CPU内存等配置自动优化PG参数,建议提前固定好虚拟机配置)
1 |
|
PG集群架构图
硬件故障由 patroni、etcd 和 Haproxy 提供的自愈高可用架构来兜底,在主库故障的情况下,默认会在 30 秒内执行自动故障转移(Failover)。 客户端无需修改配置重启应用:Haproxy 利用 patroni 健康检查进行流量分发,读写请求会自动分发到新的集群主库中,并避免脑裂的问题。 这一过程十分丝滑,例如在从库故障,或主动切换(switchover)的情况下,客户端只有一瞬间的有感知查询闪断。
软件故障、人为错误和 数据中心级灾难由 pgbackrest 和可选的 MinIO 集群来兜底。这为您提供了本地/云端的 PITR 能力,并在数据中心爆炸的情况下提供了跨地理区域复制,与异地容灾功能。
管理和使用
默认用户
Pigsty 也有四个默认用户(系统用户):
超级用户 (postgres),集群的所有者和创建者,与操作系统 dbsu 名称相同。
复制用户 (replicator),用于主-从复制的系统用户。
监控用户 (dbuser_monitor),用于监控数据库和连接池指标的用户。
管理用户 (dbuser_dba),执行日常操作和数据库更改的管理员用户。
这4个默认用户的用户名/密码通过4对专用参数进行定义,并在很多地方引用:
pg_dbsu:操作系统 dbsu 名称,默认为 postgres,最好不要更改它
pg_dbsu_password:dbsu 密码,默认为空字符串意味着不设置 dbsu 密码,最好不要设置。
pg_replication_username:postgres 复制用户名,默认为 replicator
pg_replication_password:postgres 复制密码,默认为 DBUser.Replicator
pg_admin_username:postgres 管理员用户名,默认为 dbuser_dba
pg_admin_password:postgres 管理员密码的明文,默认为 DBUser.DBA
pg_monitor_username:postgres 监控用户名,默认为 dbuser_monitor
pg_monitor_password:postgres 监控密码,默认为 DBUser.Monitor
在生产部署中记得更改这些密码,不要使用默认值!
在部署前,可以在pigsty.yml 里面修改。
配置用户
1 |
|
配置HBA
1 |
|
创建数据库
1 |
|
数据库集群访问端口说明
组件 | 端口 | 描述 | 状态 | 备注 |
---|---|---|---|---|
Postgres | 5432 | Pigsty CMDB | 默认启用 | |
Pgbouncer | 6432 | Pgbouncer 连接池服务 | 默认启用 | |
Patroni | 8008 | Patroni 高可用组件 | 默认启用 | |
Haproxy Primary | 5433 | 主连接池:读/写服务 | 默认启用 | |
Haproxy Replica | 5434 | 副本连接池:只读服务 | 默认启用 | |
Haproxy Default | 5436 | 主直连服务* | 默认启用 | |
Haproxy Offline | 5438 | 离线直连:离线读服务 | 默认启用 | |
Haproxy service |
543x | PostgreSQL 定制服务 | 按需定制 | |
Haproxy Admin | 9101 | 监控指标和流量管理 | 默认启用 | |
PG Exporter | 9630 | PG 监控指标导出器 | 默认启用 | |
PGBouncer Exporter | 9631 | PGBouncer 监控指标导出器 | 默认启用 | |
Node Exporter | 9100 | 节点监控指标导出器 | 默认启用 | |
Promtail | 9080 | 收集数据库组件与主机日志 | 默认启用 | |
vip-manager | - | 将 VIP 绑定到主节点 | 按需启用 | |
Docker Daemon | 9323 | Docker 守护进程 | 按需启用 | |
keepalived | - | 为整个集群绑定 L2 VIP | 按需启用 | |
Keepalived Exporter | 9650 | Keepalived 指标导出器 | 按需启用 |
PS:个人推荐使用 5436端口,并通过VIP地址访问数据库集群。(绕过pgbouncer)
使用pgbouncer 则可以使用5433端口,并通过VIP地址访问集群。
默认管理员账号为dbuser_dba。