Pigsty v2.0.0
架构大升级,兼容性、安全性、可维护性显著增强
架构大升级,兼容性、安全性、可维护性显著增强
v2.0.0 ·
相关文章:
Pigsty v2.0.0 正式发布!
从 v2.0.0 开始,PIGSTY 现在是 “PostgreSQL In Great STYle"的首字母缩写,即"全盛状态的 PostgreSQL”。
Download directly from GitHub Release
亮点
- 完美整合 PostgreSQL 15, PostGIS 3.3, Citus 11.2, TimescaleDB 2.10,分布式地理时序超融合数据库。
- OS 兼容性大幅增强:支持 EL7,8,9,以及 RHEL, CentOS, Rocky, OracleLinux, AlmaLinux 等兼容发行版。
- 安全性改进:自签名 CA,全局网络流量 SSL 加密,密码 scram-sha-256 认证,备份采用 AES 加密,重制的 HBA 规则系统。
- Patroni 升级至3.0,提供原生的高可用 Citus 分布式集群支持,默认启用 FailSafe 模式,无惧 DCS 故障致全局主库瘫痪。
- 提供基于 pgBackRest 的开箱即用的时间点恢复 PITR 支持,默认支持本地文件系统与专用 MinIO/S3 集群备份。
- 新模块
ETCD,可独立部署,简易扩缩容,自带监控高可用,彻底取代 Consul 作为高可用 PG 的 DCS。 - 新模块
MINIO,可独立部署,支持多盘多节点部署,用作 S3 本地替代,亦用于集中式 PostgreSQL 备份仓库。 - 大幅精简配置文件参数,无需默认值即可使用;模板自动根据机器规格调整主机与 PG 参数,HBA/服务的定义更简洁泛用。
- 受 Grafana 与 MinIO 影响,软件协议由 Apache License 2.0 变更为 AGPL 3.0
兼容性
- 支持 EL7, EL8, EL9 三个大版本,并提供三个版本对应的离线软件包,默认开发测试环境由 EL7 升级至 EL9。
- 支持更多 EL 兼容 Linux 发行版:RHEL, CentOS, RockyLinux, AlmaLinux, OracleLinux 等…
- 源码包与离线软件包的命名规则发生改变,现在版本号,操作系统版本号,架构都会体现在包名中。
PGSQL:PostgreSQL 15.2, PostGIS 3.3, Citus 11.2, TimescaleDB 2.10 现可同时使用,协同工作。PGSQL:Patroni 升级至 3.0 版本,作为 PGSQL 的高可用组件。- 默认使用 ETCD 作为 DCS,取代 Consul,减少一个 Consul Agent 失效点。
- 因为 vip-manager 升级至 2.1 并使用 ETCDv3 API,彻底弃用 ETCDv2 API,Patroni 同理
- 提供原生的高可用 Citus 分布式集群支持。使用完全开源所有功能的 Citus 11.2。
- 默认启用 FailSafe 模式,无惧 DCS 故障致全局主库瘫痪。
PGSQL:引入 pgBackrest v2.44 提供开箱即用的 PostgreSQL 时间点恢复 PITR 功能- 默认使用主库上的备份目录创建备份仓库,滚动保留两天的恢复窗口。
- 默认备选备份仓库为专用 MinIO/S3 集群,滚动保留两周的恢复窗口,本地使用需要启用 MinIO 模块。
ETCD现在作为一个独立部署的模块,带有完整的扩容/缩容方案与监控。MINIO现在成为一个独立部署的模块,支持多盘多节点部署,用作 S3 本地替代,亦可用作集中式备份仓库。NODE模块现在包含haproxy,docker,node_exporter,promtail功能组件chronyd现在取代ntpd成为所有节点默认的 NTP 服务。- HAPROXY 现从属于
NODE的一部分,而不再是PGSQL专属,可以 NodePort 的方式对外暴露服务。 - 现在
PGSQL模块可以使用专用的集中式 HAPROXY 集群统一对外提供服务。
INFRA模块现在包含dnsmasq,nginx,prometheus,grafana,loki等组件- Infra 模块中的 DNSMASQ 服务器默认启用,并添加为所有节点的默认 DNS 服务器之一。
- 添加了
blackbox_exporter用于主机 PING 探测,pushgateway用于批处理任务指标。 loki与promtail现在使用 Grafana 默认的软件包,使用官方的 Grafana Echarts 面板插件- 提供针对 PostgreSQL 15 的新增可观测性位点的监控支持,添加 Patroni 监控
- 软件版本升级
- PostgreSQL 15.2 / PostGIS 3.3 / TimescaleDB 2.10 / Citus 11.2
- Patroni 3.0 / Pgbouncer 1.18 / pgBackRest 2.44 / vip-manager 2.1
- HAProxy 2.7 / Etcd 3.5 / MinIO 20230131022419 / mcli 20230128202938
- Prometheus 2.42 / Grafana 9.3 / Loki & Promtail 2.7 / Node Exporter 1.5
安全性
- 启用了一个完整的本地自签名 CA:
pigsty-ca,用于签发内网组件所使用的证书。 - 创建用户/修改密码的操作将不再会在日志文件中留下痕迹。
- Nginx 默认启用 SSL 支持(如需 HTTPS,您需要在系统中信任
pigsty-ca,或使用 Chromethisisunsafe) - ETCD 全面启用 SSL 加密客户端与服务端对等通信
- PostgreSQL 添加并默认启用了 SSL 支持,管理链接默认都使用 SSL 访问。
- Pgbouncer 添加了 SSL 支持,出于性能考虑默认不启用。
- Patroni 添加了 SSL 支持,并默认限制了管理 API 只能从本机与管理节点使用密码认证方可访问。
- PostgreSQL 的默认密码认证方式由
md5改为scram-sha-256。 - Pgbouncer 添加了认证查询支持,可以动态管理连接池用户。
- pgBackRest 使用远端集中备份存储仓库时,默认使用
AES-256-CBC加密备份数据。 - 提供高安全等级配置模板:强制使用全局 SSL,并要求使用管理员证书登陆。
- 所有默认 HBA 规则现在全部在配置文件中显式定义。
可维护性
- 现有的配置模板可根据机器规格(CPU/内存/存储)自动调整优化。
- 现在可以动态配置 Postgres/Pgbouncer/Patroni/pgBackRest 的日志目录:默认为:
/pg/log/<type>/ - 原有的 IP 地址占位符
10.10.10.10被替换为一个专用变量:${admin_ip},可在多处引用,便于切换备用管理节点。 - 您可以指定
region来使用不同地区的上游镜像源,以加快软件包的下载速度。 - 现在允许用户定义更细粒度的上游源地址,您可以根据不同的 EL 版本、架构,以及地区,使用不同的上游源。
- 提供了阿里云与 AWS 中国地区的 Terraform 模板,可用于一键拉起所需的 EC2 虚拟机。
- 提供了多种不同规格的 Vagrant 沙箱模板:
meta,full,el7/8/9,minio,build,citus - 添加了新的专用剧本:
pgsql-monitor.yml用于监控现有的 Postgres 实例或 RDS。 - 添加了新的专用剧本:
pgsql-migration.yml,使用逻辑复制无缝迁移现有实例至 Pigsty 管理的集群。 - 添加了一系列专用 Shell 实用命令,封装常见运维操作,方便用户使用。
- 优化了所有 Ansible Role 的实现,使其更加简洁、易读、易维护,无需默认参数即可使用。
- 允许在业务数据库/用户的层次上定义额外的 Pgbouncer 参数。
API 变更
Pigsty v2.0 进行了大量变更,新增64个参数,移除13个参数,重命名17个参数。
新增的参数
INFRA.META.admin_ip:主元节点 IP 地址INFRA.META.region:上游镜像区域:default|china|europeINFRA.META.os_version:企业版 Linux 发行版本:7,8,9INFRA.CA.ca_cn:CA 通用名称,默认为 pigsty-caINFRA.CA.cert_validity:证书有效期,默认为 20 年INFRA.REPO.repo_enabled:在 infra 节点上构建本地 yum 仓库吗?INFRA.REPO.repo_upstream:上游 yum 仓库定义列表INFRA.REPO.repo_home:本地 yum 仓库的主目录,通常与 nginx_home ‘/www’ 相同INFRA.NGINX.nginx_ssl_port:https 监听端口INFRA.NGINX.nginx_ssl_enabled:启用 nginx https 吗?INFRA.PROMTETHEUS.alertmanager_endpoint:altermanager 端点(ip|domain):端口格式NODE.NODE_TUNE.node_hugepage_ratio:内存 hugepage 比率,默认禁用,值为 0NODE.HAPROXY.haproxy_service:要公开的 haproxy 服务列表PGSQL.PG_ID.pg_mode:pgsql 集群模式:pgsql,citus,gpsqlPGSQL.PG_BUSINESS.pg_dbsu_password:dbsu 密码,默认为空字符串表示没有 dbsu 密码PGSQL.PG_INSTALL.pg_log_dir:postgres 日志目录,默认为/pg/data/logPGSQL.PG_BOOTSTRAP.pg_storage_type:SSD|HDD,默认为 SSDPGSQL.PG_BOOTSTRAP.patroni_log_dir:patroni 日志目录,默认为/pg/logPGSQL.PG_BOOTSTRAP.patroni_ssl_enabled:使用 SSL 保护 patroni RestAPI 通信?PGSQL.PG_BOOTSTRAP.patroni_username:patroni rest api 用户名PGSQL.PG_BOOTSTRAP.patroni_password:patroni rest api 密码(重要:请更改此密码)PGSQL.PG_BOOTSTRAP.patroni_citus_db:由 patroni 管理的 citus 数据库,默认为 postgresPGSQL.PG_BOOTSTRAP.pg_max_conn:postgres 最大连接数,auto将使用推荐值PGSQL.PG_BOOTSTRAP.pg_shmem_ratio:postgres 共享内存比率,默认为 0.25,范围 0.1~0.4PGSQL.PG_BOOTSTRAP.pg_rto:恢复时间目标,故障转移的 ttl,默认为 30sPGSQL.PG_BOOTSTRAP.pg_rpo:恢复点目标,默认最多丢失 1MB 数据PGSQL.PG_BOOTSTRAP.pg_pwd_enc:密码加密算法:md5|scram-sha-256PGSQL.PG_BOOTSTRAP.pgbouncer_log_dir:pgbouncer 日志目录,默认为/var/log/pgbouncerPGSQL.PG_BOOTSTRAP.pgbouncer_auth_query:如果启用,查询 pg_authid 表以检索 biz 用户,而不是填充用户列表PGSQL.PG_BOOTSTRAP.pgbouncer_sslmode:pgbouncer 客户端的 SSL:disable|allow|prefer|require|verify-ca|verify-fullPGSQL.PG_BOOTSTRAP.pg_service_provider:专用的 haproxy 节点组名称,或者默认为本地节点的空字符串PGSQL.PG_BOOTSTRAP.pg_default_service_dest:如果 svc.dest=‘default’,则为默认服务目标PGSQL.PG_BACKUP.pgbackrest_enabled:启用 pgbackrest 吗?PGSQL.PG_BACKUP.pgbackrest_clean:初始化期间删除 pgbackrest 数据吗?PGSQL.PG_BACKUP.pgbackrest_log_dir:pgbackrest 日志目录,默认为/pg/logPGSQL.PG_BACKUP.pgbackrest_method:pgbackrest 备份仓库方法,local 或 minioPGSQL.PG_BACKUP.pgbackrest_repo:pgbackrest 备份仓库配置PGSQL.PG_DNS.pg_dns_suffix:pgsql dns 后缀,默认为空字符串PGSQL.PG_DNS.pg_dns_target:auto, primary, vip, none 或 ad hoc ipETCD.etcd_seq:etcd 实例标识符,必需ETCD.etcd_cluster:etcd 集群和组名称,默认为 etcdETCD.etcd_safeguard:防止清除正在运行的 etcd 实例吗?ETCD.etcd_clean:在初始化期间清除现有的 etcd 吗?ETCD.etcd_data:etcd 数据目录,默认为 /data/etcdETCD.etcd_port:etcd 客户端端口,默认为 2379ETCD.etcd_peer_port:etcd 对等端口,默认为 2380ETCD.etcd_init:etcd 初始集群状态,新建或已存在ETCD.etcd_election_timeout:etcd 选举超时,默认为 1000msETCD.etcd_heartbeat_interval:etcd 心跳间隔,默认为 100msMINIO.minio_seq:minio 实例标识符,必须参数MINIO.minio_cluster:minio 集群名称,默认为 minioMINIO.minio_clean:初始化时清理 minio 吗?默认为 falseMINIO.minio_user:minio 操作系统用户,默认为minioMINIO.minio_node:minio 节点名模式MINIO.minio_data:minio 数据目录,使用 {x…y} 来指定多个驱动器MINIO.minio_domain:minio 外部域名,默认为sss.pigstyMINIO.minio_port:minio 服务端口,默认为 9000MINIO.minio_admin_port:minio 控制台端口,默认为 9001MINIO.minio_access_key:根访问密钥,默认为minioadminMINIO.minio_secret_key:根秘密密钥,默认为minioadminMINIO.minio_extra_vars:minio 服务器的额外环境变量MINIO.minio_alias:本地 minio 部署的别名MINIO.minio_buckets:待创建的 minio 存储桶列表MINIO.minio_users:待创建的 minio 用户列表
移除的参数
INFRA.CA.ca_homedir:CA 主目录,现在固定为/etc/pki/INFRA.CA.ca_cert:CA 证书文件名,现在固定为ca.keyINFRA.CA.ca_key:CA 密钥文件名,现在固定为ca.keyINFRA.REPO.repo_upstreams:已被repo_upstream替代PGSQL.PG_INSTALL.pgdg_repo:现在由节点 playbooks 负责PGSQL.PG_INSTALL.pg_add_repo:现在由节点 playbooks 负责PGSQL.PG_IDENTITY.pg_backup:未使用且与部分名称冲突PGSQL.PG_IDENTITY.pg_preflight_skip:不再使用,由pg_id替代DCS.dcs_name:由于使用 etcd 而被移除DCS.dcs_servers:被 ad hoc 组etcd替代DCS.dcs_registry:由于使用 etcd 而被移除DCS.dcs_safeguard:被etcd_safeguard替代DCS.dcs_clean:被etcd_clean替代
重命名的参数
nginx_upstream->infra_portalrepo_address->repo_endpointpg_hostname->node_id_from_pgpg_sindex->pg_grouppg_services->pg_default_servicespg_services_extra->pg_servicespg_hba_rules_extra->pg_hba_rulespg_hba_rules->pg_default_hba_rulespgbouncer_hba_rules_extra->pgb_hba_rulespgbouncer_hba_rules->pgb_default_hba_rulesvip_mode->pg_vip_enabledvip_address->pg_vip_addressvip_interface->pg_vip_interfacenode_packages_default->node_default_packagesnode_packages_meta->infra_packagesnode_packages_meta_pip->infra_packages_pipnode_data_dir->node_data
Checksums
特别感谢意大利用户 @alemacci 在 SSL 加密,备份,多操作系统发行版适配与自适应参数模版上的贡献!