|
先介绍一下什么是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的使用,我也是一个初学者,希望可以和大家一同学习进步。
最后上一张最后部署后管理页面,如下所示。
合作电话:010-64087828
社区邮箱:greatsql@greatdb.com