GreatSQL社区

搜索

reddey

关于使用pigsty部署数据库集群一些实践心得

reddey 已有 100 次阅读2025-8-19 14:40 |系统分类:运维实战


先介绍一下什么是pigsty?Pigsty是由PG大佬冯若航老师开发的数据库部署产品,产品的网址如是:https://pigsty.cc/docs/about/feature/。

Pigsty 是一个更好的本地开源 RDS for PostgreSQL 替代:

开箱即用的RDS:从内核到RDS发行版,在 EL/Debian/Ubuntu 下提供 12-17 版本的生产级 PG 数据库服务。

丰富的扩展插件:提供无可比拟的 420+ 扩展,提供开箱即用的分布式的时序地理空间图文向量多模态数据库能力。

灵活的模块架构:灵活组合,自由扩展:Redis/Etcd/MinIO/Mongo;可独立使用,监控现有RDS/主机/数据库。

惊艳的观测能力:基于现代可观测性技术栈 Prometheus/Grafana,提供令人惊艳,无可比拟的数据库观测能力。

验证过的可靠性:故障自愈的高可用架构:硬件故障自动切换,流量无缝衔接。并提供自动配置的 PITR 兜底删库!

简单易用可维护:声明式API,GitOps就位,傻瓜式操作,Database/Infra-as-Code 以及管理SOP封装管理复杂度!

扎实的安全实践:加密备份一应俱全,自带基础ACL最佳实践。只要硬件与密钥安全,您无需操心数据库的安全性!

广泛的应用场景:低代码数据应用开发,或使用预置的 Docker Compose 模板,一键拉起使用PostgreSQL的海量软件!

开源的自由软件:以云数据库1/10不到的成本拥有与更好的数据库服务!帮您真正“拥有”自己的数据,实现自主可控!

由于最近一直都在学习PG数据库,也加了不少PG数据库的学习群,所以在网友们的介绍和建议下,就接触了冯哥的pigsty。前几天冯哥还做了一次直播,冯哥谈了自己的对国产数据库的发展趋势的看法,看得出老师是一个很直率的人。如果大家对冯哥的Pigsty比较感兴趣,可以去试用一下。

现在切入正题,本次我所构建的一主一备PG集群,选择的数据库模板是dual.yml,内容如下所示:

[08-19 10:11:17] vagrant@mytest1:~/pigsty/conf/ha

$ cat dual.yml

---

#==============================================================#

# File      :   dual.yml

# Desc      :   Pigsty deployment example for two nodes

# Ctime     :   2020-05-22

# Mtime     :   2025-01-23

# Docs      :   https://doc.pgsty.com/config

# License   :   AGPLv3 @ https://doc.pgsty.com/about/license

# Copyright :   2018-2025  Ruohang Feng / Vonng (rh@vonng.com)

#==============================================================#



# It is recommended to use at least three nodes in production deployment.

# But sometimes, there are only two nodes available, that's dual.yml for

#

# In this setup, we have two nodes, .10 (admin_node) and .11 (pgsql_priamry):

#

# If .11 is down, .10 will take over since the dcs:etcd is still alive

# If .10 is down, .11 (pgsql primary) will still be functioning as a primary if:

#   - Only dcs:etcd is down

#   - Only pgsql is down

# if both etcd & pgsql are down (e.g. node down), the primary will still demote itself.



all:

 children:


   # infra cluster for proxy, monitor, alert, etc..

   infra: { hosts: { 192.168.200.234: { infra_seq: 1 } } }


   # etcd cluster for ha postgres

   etcd: { hosts: { 192.168.200.234: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }


   # minio cluster, optional backup repo for pgbackrest

   #minio: { hosts: { 10.10.10.10: { minio_seq: 1 } }, vars: { minio_cluster: minio } }


   # postgres cluster 'pg-meta' with single primary instance

   pg-meta:

     hosts:

       192.168.200.89: { pg_seq: 1, pg_role: replica }

       192.168.200.234: { pg_seq: 2, pg_role: primary }  # <----- use this as primary by default

     vars:

       pg_cluster: pg-meta

       pg_databases: [ { name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [ pigsty ] ,extensions: [ { name: vector }] } ]

       pg_users:

         - { name: dbuser_meta ,password: DBUser.Meta   ,pgbouncer: true ,roles: [ dbrole_admin ]    ,comment: pigsty admin user }

         - { name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [ dbrole_readonly ] ,comment: read-only viewer for meta database }

       node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ] # make a full backup every 1am

       pg_vip_enabled: true

       pg_vip_address: 192.168.200.251/24

       pg_vip_interface: ens33


 vars:                               # global parameters

   version: v3.6.1                   # pigsty version string

   admin_ip: 192.168.200.234             # admin node ip address

   region: default                   # upstream mirror region: default,china,europe

   node_tune: oltp                   # node tuning specs: oltp,olap,tiny,crit

   pg_conf: oltp.yml                 # pgsql tuning specs: {oltp,olap,tiny,crit}.yml

   #docker_registry_mirrors: ["https://docker.1panel.live","https://docker.1ms.run","https://docker.xuanyuan.me","https://registry-1.docker.io"]

   infra_portal:                     # domain names and upstream servers

     home         : { domain: h.pigsty }

     grafana      : { domain: g.pigsty ,endpoint: "${admin_ip}:3000" , websocket: true }

     prometheus   : { domain: p.pigsty ,endpoint: "${admin_ip}:9090" }

     alertmanager : { domain: a.pigsty ,endpoint: "${admin_ip}:9093" }

     blackbox     : { endpoint: "${admin_ip}:9115" }

     loki         : { endpoint: "${admin_ip}:3100" }

     #minio        : { domain: m.pigsty ,endpoint: "${admin_ip}:9001" ,scheme: https ,websocket: true }


   # consider using local fs or external s3 service for cold backup storage in dual node configuration

   #pgbackrest_method: minio


   #----------------------------------#

   # Repo, Node, Packages

   #----------------------------------#

   repo_remove: true                 # remove existing repo on admin node during repo bootstrap

   node_repo_remove: true            # remove existing node repo for node managed by pigsty

   repo_extra_packages: [ pg17-main ] #,pg17-core ,pg17-time ,pg17-gis ,pg17-rag ,pg17-fts ,pg17-olap ,pg17-feat ,pg17-lang ,pg17-type ,pg17-util ,pg17-func ,pg17-admin ,pg17-stat ,pg17-sec ,pg17-fdw ,pg17-sim ,pg17-etl]

   pg_version: 17                    # default postgres version

   #pg_extensions: [pg17-time ,pg17-gis ,pg17-rag ,pg17-fts ,pg17-feat ,pg17-lang ,pg17-type ,pg17-util ,pg17-func ,pg17-admin ,pg17-stat ,pg17-sec ,pg17-fdw ,pg17-sim ,pg17-etl ] #,pg17-olap]

...


从上面的内容看,主要部分是关于PG集群主从节点的设置和VIP地址的设置,配置文件的内容并不复杂。

但有几个部署准备工作,我还是要再强调一下:

1、各个节点上vagrant用户的建立

2、各个节点上vagrant用户SSH互信的建立,可以参考冯哥的安装文档。

3、各个节点上vagrant用户加入sudoer用户,可以参考冯哥的安装文档。

4、各个节点上做好防火墙和SELINUX的设置。

5、各个节点做好/etc/hosts文件的配置

6、各个节点在部署前,系统一定要是干净的,没有部署任何应用和数据库。如果大家是在本地的VM环境部署的,建议你安装好虚拟机并做好基本优化后及时做个快照,确保有一个干净的系统环境可用。这一点非常重要,可以大大提高部署的成功率。

7、各个节点的网络也要符合要求,因为集群本身对网络的要求比较高,如果是生产环境内网至少是万兆为好。

8、切换为vagrant用户后,用这个用户进行部署数据库集群。

下面开始正式的安装,先下载相应的repo库。

curl -fsSL https://repo.pigsty.cc/get | bash; cd ~/pigsty;

该命令会 下载 并解压 Pigsty 源码至家目录,依次完成 配置 与安装 即可完成安装。

具体的安装分为三步走,如下所示。

./bootstrap; ./configure; ./install.yml; # 准备依赖,生成配置,安装 Pigsty 三步走!

bootstrap:【可选】用于确保 Ansible 正常安装,如果 /tmp/pkg.tgz 离线包存在则使用它。如果是在干净的系统中部署,这一步是要要必做的。

configure:【可选】检测环境并自动生成相应的推荐YML配置文件,如果知道如何 配置 Pigsty可以直接跳过。这一步用于指定配置所使用的配置文件,个人建议你还是指定一下所用的配置文件,不同类别的集群,配置文件的内容也是不同的。建议你仔细阅读各个配置文件内容,把配置文件内容修改好了,指定一下。如下所示

./configure -c ha/dual(注意指定配置文件时,不用指定配置文件的扩展文件名,目录要用相对路径。)本次安装我用的dual.yml模板,这是一个双活主从PG集群,由于使用了VIP,如果主节点宕机了,VIP地址会自动漂移到从节点上。该模板的路径如下所示:

[08-19 14:25:37] vagrant@mytest1:~/pigsty/conf/ha

$ pwd

/home/vagrant/pigsty/conf/ha

[08-19 14:25:39] vagrant@mytest1:~/pigsty/conf/ha

$ ls -ltra

总用量 72

-rw-r--r-- 1 vagrant  5257  8月 15 13:04 trio.yml

-rw-r--r-- 1 vagrant 27930  8月 15 13:04 simu.yml

-rw-r--r-- 1 vagrant 12718  8月 15 13:04 safe.yml

-rw-r--r-- 1 vagrant  8077  8月 15 13:04 full.yml

drwxr-xr-x 5 vagrant  4096  8月 15 13:04 ..

-rw-r--r-- 1 vagrant  4367  8月 19 09:11 dual.yml

drwxr-xr-x 2 vagrant    86  8月 19 09:11 .

install.yml:根据生成的配置文件开始在当前节点上执行安装。

注:实际上面三步走的重点是要把配置文件的内容整理好,不要出错,配置文件修改好了,建议大家最好检查一次,确保内容正确无误。这一步是三步走中唯一人为操作控制的步骤,如果配置文件内容正确,后面的安装过程过程基本不会有什么问题。关于Pigsty的使用,我也是一个初学者,希望可以和大家一同学习进步。

最后上一张最后部署后管理页面,如下所示。

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2025-8-29 03:01 , Processed in 0.014567 second(s), 9 queries , Redis On.
返回顶部