特性

快速了解Pigsty所解决的问题,采用的技术,适用的场景。

开箱即用的数据库发行版:用得上,用的好,用着简单还省钱!

特性 - 图1

自动驾驶高可用 / 极致入微可观测 / 简单易用门槛低 / 自由部署体验齐 / 应用广泛生态全 / 自主可控更省钱

PostgreSQL数据库发行版

RedHat for Linux! 开箱即用! 从无到有,让用户用得上

Pigsty将高可用集群部署,扩容缩容,主从复制,故障切换,流量代理,连接池,服务发现,访问控制,监控系统,告警系统,日志采集等生产级成熟解决方案封装为发行版。一次性解决在生产环境与各类场景下使用 世界上最先进的开源关系型数据库 —— PostgreSQL 时会遇到的各种问题,真正做到开箱即用。

特性 - 图2

智能监控管控运维解决方案

Auto-Pilot for Postgres! 自动驾驶! 从有到优,让用户用的爽

特性 - 图3

数据库即代码开发者工具箱

HashiCorp for Database! 简单易用!从优到易,让用户省心

  • Pigsty秉持 Infra as Data 的设计理念,用户只需用几行声明式的配置文件描述自己想要的数据库,即可使用幂等剧本,一键将其创建。Just like Kubernetes!

  • Pigsty向开发者交付简单易用的数据库工具箱:一键下载安装,自动配置;一键部署各类开源数据库,一键迁移备份、扩容缩容,极大拉低数据库管理使用门槛,量产DBA!

  • Pigsty能够简化数据库部署与交付、解决环境配置统一的难题:无论是上千套数据库几万核的生产环境,还是本地1C1G的笔记本均可完整运行;基于Vagrant的本地沙箱与基于Terraform的多云部署,云上云下,一键拉起!

特性 - 图4

开源云数据库PaaS替代方案

Alternative for RDS! 安全可控降本增效!从易到廉,给用户省钱

  • Pigsty相比云厂商RDS,在拥有更低使用⻔槛与更丰富功能的前提下,可节约 50% - 80% 的数据库软硬件成本,初级研发人员即可自主管理成百上千套数据库。

  • Pigsty采用模块化设计,可自由组合,按需定制扩展。可在生产环境部署管理各种数据库,或仅仅将其当成主机监控;可用于开发数据库可视化Demo、或支撑各类SaaS应用

  • 开源免费的生产级数据库解决方案,用于补全云原生生态缺失的最后一块拼图。稳定可靠,经过长时间大规模生产部署验证,提供可选的专业技术支持服务。

特性 - 图5

自动驾驶高可用

故障自愈,高枕无忧

以PostgreSQL为例,Pigsty创建的数据库集群是分布式高可用数据库集群。只要集群中有任意实例存活,集群就可以对外提供完整的读写服务只读服务

Pigsty的高可用架构久经生产环境考验,Pigsty使用 Patroni + Consul 进行故障检测、Fencing与自动故障切换,通过HAProxy、VIP或DNS实现流量的自动切换,以极低的复杂度代价实现了完整的高可用方案,让主从架构的数据库能用出了布式数据库般的体验。

数据库集群可以自动进行故障检测与主从切换,普通故障能在几秒到几十秒内自愈:主库故障RTO < 1min,只读流量几乎无影响,同步集群 RPO = 0 不丢数据。

数据库集群中的每个数据库实例在使用上都是幂等的,任意实例都可以通过内建负载均衡组件HAProxy提供完整的读写服务。任何一个或多个Haproxy实例都可以作为集群的负载均衡器,并通过健康检查进行流量分发,对外屏蔽集群成员的区别。用户可以通过配置灵活定义服务,并通过多种可选方式接入

特性 - 图6

极致入微可观测

You can’t manage you don’t measure.

监控系统提供了对系统状态的度量,是运维管理工作的基石。【DEMO

Pigsty带有一个针对大规模数据库集群管理而设计的专业级监控系统,基于业内最佳实践,采用Prometheus、Alertmanager、Grafana、Loki作为监控基础设施。开源开放,定制便利,可复用,可移植,没有厂商锁定。

Pigsty在PostgreSQL监控上做到无可比拟,通过30+监控面板与上千仪表盘综合呈现约1200+类指标,覆盖从全局大盘到单个对象的详细信息,从数据库目录到节点日志全部一览无遗。与同类产品相比在指标的覆盖率与监控面板丰富程度上一骑绝尘,为专业用户提供无可替代的价值。详略得当的层次设计,为业余用户带来直观便捷的管理体验。

Pigsty的监控系统可用于监控原生部署的各类数据库实例:PGSQL,REDIS,GPSQL等,也可以独立使用,监控已有的数据库实例或远端云厂商RDS,或仅仅作为主机监控使用,它还可以用作数据可视化作品的展示平台。

特性 - 图7

简单易用门槛低

HashiCorp for Database! Database as Code, Infra as Data!

Pigsty采纳 Database as Data 的设计哲学,使用类似 Kubernetes 的声明式配置,通过大量可选的配置选项对数据库与运行环境进行描述,并通过幂等的预置剧本自动创建所需的数据库集群,提供私有云般的使用体验。

用户只需要通过配置文件或图形界面描述“自己想要什么样的数据库”,而无需关心Pigsty如何去创建或修改它。Pigsty会根据用户的配置文件清单,在几分钟内从裸机节点上创造出所需的数据库集群。

例如,在三台机器上创建一主两从的数据库集群pg-test,只需要几行配置与一行命令pgsql.yml -l pg-test,即可创建出如下一节所介绍的高可用数据库集群。

特性 - 图8

使用更多参数对数据库集群进行定制

  1. #----------------------------------#
  2. # cluster: pg-meta (on meta node) #
  3. #----------------------------------#
  4. # pg-meta is the default SINGLE-NODE pgsql cluster deployed on meta node (10.10.10.10)
  5. # if you have multiple n meta nodes, consider deploying pg-meta as n-node cluster too
  6. pg-meta: # required, ansible group name , pgsql cluster name. should be unique among environment
  7. hosts: # `<cluster>.hosts` holds instances definition of this cluster
  8. 10.10.10.10: # INSTANCE-LEVEL CONFIG: ip address is the key. values are instance level config entries (dict)
  9. pg_seq: 1 # required, unique identity parameter (+integer) among pg_cluster
  10. pg_role: primary # required, pg_role is mandatory identity parameter, primary|replica|offline|delayed
  11. pg_offline_query: true # instance with `pg_offline_query: true` will take offline traffic (saga, etl,...)
  12. # some variables can be overwritten on instance level. e.g: pg_upstream, pg_weight, etc...
  13. #---------------
  14. # mandatory # all configuration above (`ip`, `pg_seq`, `pg_role`) and `pg_cluster` are mandatory
  15. #---------------
  16. vars: # `<cluster>.vars` holds CLUSTER LEVEL CONFIG of this pgsql cluster
  17. pg_cluster: pg-meta # required, pgsql cluster name, unique among cluster, used as namespace of cluster resources
  18. #---------------
  19. # optional # all configuration below are OPTIONAL for a pgsql cluster (Overwrite global default)
  20. #---------------
  21. pg_version: 14 # pgsql version to be installed (use global version if missing)
  22. node_tune: tiny # node optimization profile: {oltp|olap|crit|tiny}, use tiny for vm sandbox
  23. pg_conf: tiny.yml # pgsql template: {oltp|olap|crit|tiny}, use tiny for sandbox
  24. patroni_mode: default # entering patroni pause mode after bootstrap {default|pause|remove}
  25. patroni_watchdog_mode: off # disable patroni watchdog on meta node {off|require|automatic}
  26. pg_lc_ctype: en_US.UTF8 # use en_US.UTF8 locale for i18n char support (required by `pg_trgm`)
  27. #---------------
  28. # biz databases # Defining Business Databases (Optional)
  29. #---------------
  30. pg_databases: # define business databases on this cluster, array of database definition
  31. # define the default `meta` database
  32. - name: meta # required, `name` is the only mandatory field of a database definition
  33. baseline: cmdb.sql # optional, database sql baseline path, (relative path among ansible search path, e.g files/)
  34. # owner: postgres # optional, database owner, postgres by default
  35. # template: template1 # optional, which template to use, template1 by default
  36. # encoding: UTF8 # optional, database encoding, UTF8 by default. (MUST same as template database)
  37. # locale: C # optional, database locale, C by default. (MUST same as template database)
  38. # lc_collate: C # optional, database collate, C by default. (MUST same as template database)
  39. # lc_ctype: C # optional, database ctype, C by default. (MUST same as template database)
  40. # tablespace: pg_default # optional, default tablespace, 'pg_default' by default.
  41. # allowconn: true # optional, allow connection, true by default. false will disable connect at all
  42. # revokeconn: false # optional, revoke public connection privilege. false by default. (leave connect with grant option to owner)
  43. # pgbouncer: true # optional, add this database to pgbouncer database list? true by default
  44. comment: pigsty meta database # optional, comment string for this database
  45. connlimit: -1 # optional, database connection limit, default -1 disable limit
  46. schemas: [pigsty] # optional, additional schemas to be created, array of schema names
  47. extensions: # optional, additional extensions to be installed: array of schema definition `{name,schema}`
  48. - { name: adminpack, schema: pg_catalog } # install adminpack to pg_catalog
  49. - { name: postgis, schema: public } # if schema is omitted, extension will be installed according to search_path.
  50. - { name: timescaledb } # some extensions are not relocatable, you can just omit the schema part
  51. # define an additional database named grafana & prometheus (optional)
  52. # - { name: grafana, owner: dbuser_grafana , revokeconn: true , comment: grafana primary database }
  53. # - { name: prometheus, owner: dbuser_prometheus , revokeconn: true , comment: prometheus primary database , extensions: [{ name: timescaledb }]}
  54. #---------------
  55. # biz users # Defining Business Users (Optional)
  56. #---------------
  57. pg_users: # define business users/roles on this cluster, array of user definition
  58. # define admin user for meta database (This user are used for pigsty app deployment by default)
  59. - name: dbuser_meta # required, `name` is the only mandatory field of a user definition
  60. password: md5d3d10d8cad606308bdb180148bf663e1 # md5 salted password of 'DBUser.Meta'
  61. # optional, plain text and md5 password are both acceptable (prefixed with `md5`)
  62. login: true # optional, can login, true by default (new biz ROLE should be false)
  63. superuser: false # optional, is superuser? false by default
  64. createdb: false # optional, can create database? false by default
  65. createrole: false # optional, can create role? false by default
  66. inherit: true # optional, can this role use inherited privileges? true by default
  67. replication: false # optional, can this role do replication? false by default
  68. bypassrls: false # optional, can this role bypass row level security? false by default
  69. pgbouncer: true # optional, add this user to pgbouncer user-list? false by default (production user should be true explicitly)
  70. connlimit: -1 # optional, user connection limit, default -1 disable limit
  71. expire_in: 3650 # optional, now + n days when this role is expired (OVERWRITE expire_at)
  72. expire_at: '2030-12-31' # optional, YYYY-MM-DD 'timestamp' when this role is expired (OVERWRITTEN by expire_in)
  73. comment: pigsty admin user # optional, comment string for this user/role
  74. roles: [dbrole_admin] # optional, belonged roles. default roles are: dbrole_{admin,readonly,readwrite,offline}
  75. parameters: {} # optional, role level parameters with `ALTER ROLE SET`
  76. # search_path: public # key value config parameters according to postgresql documentation (e.g: use pigsty as default search_path)
  77. - {name: dbuser_view , password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly], comment: read-only viewer for meta database}
  78. # define additional business users for prometheus & grafana (optional)
  79. - {name: dbuser_grafana , password: DBUser.Grafana ,pgbouncer: true ,roles: [dbrole_admin], comment: admin user for grafana database }
  80. - {name: dbuser_prometheus , password: DBUser.Prometheus ,pgbouncer: true ,roles: [dbrole_admin], comment: admin user for prometheus database , createrole: true }
  81. #---------------
  82. # hba rules # Defining extra HBA rules on this cluster (Optional)
  83. #---------------
  84. pg_hba_rules_extra: # Extra HBA rules to be installed on this cluster
  85. - title: reject grafana non-local access # required, rule title (used as hba description & comment string)
  86. role: common # required, which roles will be applied? ('common' applies to all roles)
  87. rules: # required, rule content: array of hba string
  88. - local grafana dbuser_grafana md5
  89. - host grafana dbuser_grafana 127.0.0.1/32 md5
  90. - host grafana dbuser_grafana 10.10.10.10/32 md5
  91. vip_mode: l2 # setup a level-2 vip for cluster pg-meta
  92. vip_address: 10.10.10.2 # virtual ip address that binds to primary instance of cluster pg-meta
  93. vip_cidrmask: 8 # cidr network mask length
  94. vip_interface: eth1 # interface to add virtual ip
  95. ``` Pigsty 1.3+:定制不同类型的Redis集群

—————————————————

redis sentinel example

—————————————————

redis-meta: hosts: 10.10.10.10: redis_node: 1 redis_instances: { 6001 : {} ,6002 : {} , 6003 : {} } vars: redis_cluster: redis-meta redis_mode: sentinel

  1. redis_max_memory: 128MB

—————————————————

redis cluster example

—————————————————

redis-test: hosts: 10.10.10.11: redis_node: 1 redis_instances: { 6501 : {} ,6502 : {} ,6503 : {} ,6504 : {} ,6505 : {} ,6506 : {} } 10.10.10.12: redis_node: 2 redis_instances: { 6501 : {} ,6502 : {} ,6503 : {} ,6504 : {} ,6505 : {} ,6506 : {} } vars: redis_cluster: redis-test # name of this redis ‘cluster’ redis_mode: cluster # standalone,cluster,sentinel redis_max_memory: 64MB # max memory used by each redis instance redis_mem_policy: allkeys-lru # memory eviction policy

—————————————————

redis standalone example

—————————————————

redis-common: hosts: 10.10.10.13: redis_node: 1 redis_instances: 6501: {} 6502: { replica_of: ‘10.10.10.13 6501’ } 6503: { replica_of: ‘10.10.10.13 6501’ } vars: redis_cluster: redis-common # name of this redis ‘cluster’ redis_mode: standalone # standalone,cluster,sentinel redis_max_memory: 64MB # max memory used by each redis instance ``` Pigsty 1.4+:安装并监控一套MatrixDB集群

  1. #----------------------------------#
  2. # cluster: mx-mdw (gp master)
  3. #----------------------------------#
  4. mx-mdw:
  5. hosts:
  6. 10.10.10.10: { pg_seq: 1, pg_role: primary , nodename: mx-mdw-1 }
  7. vars:
  8. gp_role: master # this cluster is used as greenplum master
  9. pg_shard: mx # pgsql sharding name & gpsql deployment name
  10. pg_cluster: mx-mdw # this master cluster name is mx-mdw
  11. pg_databases:
  12. - { name: matrixmgr , extensions: [ { name: matrixdbts } ] }
  13. - { name: meta }
  14. pg_users:
  15. - { name: meta , password: DBUser.Meta , pgbouncer: true }
  16. - { name: dbuser_monitor , password: DBUser.Monitor , roles: [ dbrole_readonly ], superuser: true }
  17. pgbouncer_enabled: true # enable pgbouncer for greenplum master
  18. pgbouncer_exporter_enabled: false # enable pgbouncer_exporter for greenplum master
  19. pg_exporter_params: 'host=127.0.0.1&sslmode=disable' # use 127.0.0.1 as local monitor host
  20. #----------------------------------#
  21. # cluster: mx-sdw (gp master)
  22. #----------------------------------#
  23. mx-sdw:
  24. hosts:
  25. 10.10.10.11:
  26. nodename: mx-sdw-1 # greenplum segment node
  27. pg_instances: # greenplum segment instances
  28. 6000: { pg_cluster: mx-seg1, pg_seq: 1, pg_role: primary , pg_exporter_port: 9633 }
  29. 6001: { pg_cluster: mx-seg2, pg_seq: 2, pg_role: replica , pg_exporter_port: 9634 }
  30. 10.10.10.12:
  31. nodename: mx-sdw-2
  32. pg_instances:
  33. 6000: { pg_cluster: mx-seg2, pg_seq: 1, pg_role: primary , pg_exporter_port: 9633 }
  34. 6001: { pg_cluster: mx-seg3, pg_seq: 2, pg_role: replica , pg_exporter_port: 9634 }
  35. 10.10.10.13:
  36. nodename: mx-sdw-3
  37. pg_instances:
  38. 6000: { pg_cluster: mx-seg3, pg_seq: 1, pg_role: primary , pg_exporter_port: 9633 }
  39. 6001: { pg_cluster: mx-seg1, pg_seq: 2, pg_role: replica , pg_exporter_port: 9634 }
  40. vars:
  41. gp_role: segment # these are nodes for gp segments
  42. pg_shard: mx # pgsql sharding name & gpsql deployment name
  43. pg_cluster: mx-sdw # these segment clusters name is mx-sdw
  44. pg_preflight_skip: true # skip preflight check (since pg_seq & pg_role & pg_cluster not exists)
  45. pg_exporter_config: pg_exporter_basic.yml # use basic config to avoid segment server crash
  46. pg_exporter_params: 'options=-c%20gp_role%3Dutility&sslmode=disable' # use gp_role = utility to connect to segments

自由部署体验齐

无论是几万核的生产环境,还是1核2G的本地虚拟机,云上云下,用哪个云,体验如一!

无论是生产环境、预发环境、还是本地开发测试环境,对Pigsty来说,只有配置文件的内容差异。无论在哪里部署,都能带来统一的使用体验。

Pigsty可以利用Vagrant与Virtualbox,在您自己的笔记本电脑上拉起安装所需的虚拟机沙箱环境,或通过Terraform,自动向云服务商申请ECS/VPC资源,一键创建,一键销毁,自动获取多云部署的能力。

沙箱环境中的虚拟机具有固定的资源名称与IP地址,非常适于软件开发测试、实验演示。 沙箱配置默认为2核4GB的单节点,IP地址 10.10.10.10,部署有一个名为pg-meta-1的单机数据库实例。 此外还有四节点版本的完整版沙箱,带有额外三个数据库节点,可用于充分展现Pigsty高可用架构与监控系统的能力。

特性 - 图9

沙箱所需机器规格

系统要求

  • Linux内核,x86_64处理器架构
  • 使用 CentOS 7 / RedHat 7 / Oracle Linux 7 或其他等效操作系统发行版
  • 强烈推荐使用 CentOS 7.8.2003 x86_64 ,这是经过长时间生产环境的测试的操作系统环境

单节点基本规格

  • 最低规格:1核,1GB (容易OOM,建议内存至少2GB)
  • 推荐规格:2核,4GB (沙箱默认配置)
  • 将部署一个单机PostgreSQL实例pg-meta-1
  • 在沙箱中,该节点的IP固定为10.10.10.10

四节点基本规格

  • 元节点要求同单节点所述
  • 部署一个额外的三节点PostgreSQL数据库集群pg-test
  • 普通数据库节点,最低规格:1核,1GB,建议使用2GB内存。
  • 三节点的IP地址固定为:10.10.10.11, 10.10.10.12, 10.10.10.13

应用广泛生态全

一键拉起生产级SaaS应用,数据分析快速上手,低代码开发可视化大屏

SaaS软件应用

Pigsty在元节点上默认安装了Docker,您可以一键拉起各类SaaS应用:开源私有代码托管平台Gitlab,开源论坛Discourse,开源社交网络Mastodon,开源ERP软件Odoo,以及用友、金蝶等软件。 您可以使用Docker拉起无状态的部分,修改其数据库连接串使用外部数据库,获取丝滑的云原生管理体验与生产级的数据持久性。详情请参考 教程:Docker应用

数据分析与可视化应用

Pigsty既是开箱即用的PostgreSQL发行版,也可以用做数据分析环境,或制作低代码的可视化应用。您可以直接从SQL数据处理到Echarts绘图一步到位,也可以使用更精细的工作流:例如使用PG作为主数据库,存储数据并用SQL实现业务逻辑;使用内置的PostgREST自动生成后端API,使用内置的JupyterLab用Python进行复杂数据分析,并使用Echarts进行数据可视化,并通过Grafana获得交互能力。

特性 - 图10

Pigsty自带有几个应用样例作为参考:

  • 分析PG CSV日志样本pglog
  • 新冠疫情数据可视化 covid
  • 全球地表气象站数据查询 isd
  • 数据库流行度排行趋势 dbeng
  • 查询大厂工作上下班安排 worktime

自主可控更省钱

Pigsty可将数据库的综合持有成本降低 50% ~ 80% ,并让数据真正掌控在用户自己的手中!

公有云数据库/RDS,是一种所谓”开箱即用”的解决方案,但它交出的答卷离让用户满意还有很长路要走:相比自建数据库成本昂贵,许多需要超级用户权限的功能被阉割,愚笨的UI与大锅饭式的功能,但在所有问题中,最重要的问题莫过于云软件的安全成本问题:

自主可控

  • 运行在你自己的电脑上的软件,即使软件供应商倒闭也可以继续运行下去。但如果提供云软件的公司/部门倒闭或决定停止支持,这些软件就没法工作了,而你用这些软件创造的数据就被锁死了。因为数据只存储在云端,而不是你自己服务器的磁盘上,而您能指望的补偿通常只有鸡肋的代金券。
  • 无法定制或扩展的问题在云数据库中进一步加剧。云数据库通常不向用户提供数据库超级用户,这将锁死一大批高级功能,以及自行加装扩展功能的能力。与此相对应,‘流复制’,‘高可用’这些本该是数据库标配的东西往往作为增值项向用户出售。
  • 云服务可能在没有警告和追索手段的情况下突然暂停你的账户。您可能在完全无辜的情况下,被自动化系统判定为违反服务条款:未备案使用80与53端口,账户被爆破并用于发送恶意软件或钓鱼邮件,触发违背服务条款。或因为一些政治原因被云厂商锤翻,例如Parler。
  • 国内不用SaaS坚持自研或开源自建的习惯,是被恶劣的生态产业环境真金白银教育出来的。在信息时代把核心资产 — 数据放在别人的硬盘上,就像把金条放在超市存包柜中一样。您无法避免,无法监督、甚至无法意识到利益冲突的云厂商,或者仅仅是怀有恶意或好奇的运维与DBA人员偷窥盗窃您的珍贵数据。

Pigsty则不然,它可以部署在任意地方,包括您自己的服务器上。它开源免费,无需License,无需互联网访问,不收集任何用户数据。您可以在自己的服务器运行它直到海枯石烂。

降本增效

云数据库的成本则是另一个问题:省钱是用户的刚需。公有云厂商的RDS相比传统商业数据库也许有优势,但在自建开源数据库前仍然是暴利天价。据统计,RDS的综合持有成本比起基于云服务器自建要高达 2~3倍,比起IDC托管自建更是高出 5~10倍

特性 - 图11

Pigsty相比使用云数据库有显著成本优势。例如,您可以使用云数据库一半的开销购买同规格的云服务器,并使用Pigsty自行部署数据库。在这种情况下,您既可以享受公有云的绝大部份管理之快捷便利(IaaS),又可以立竿见影节省一半以上的开销。

更重要的是,Pigsty能显著提高用户效能:它允许一两个高级DBA将所有琐碎杂务交由软件处理,轻松管理几百套数据库集群;也可以让一个初级研发人员,经过简单的学习培训后,即可迅速达到一个高级DBA的廉价七成正确水平。

Pigsty开源免费,在提供类似甚至超过云厂商RDS使用体验的前提下,可将数据库的综合持有成本降低 50% ~ 80% ,并让数据真正掌控在用户自己的手中!


PostgreSQL数据库发行版

RedHat for Linux! 开箱即用! 从无到有,让用户用得上

无可比拟的可观测性

开源监控最佳实践!所有信息一览无余,让用户看得见

自动驾驶的高可用架构

故障自愈,高枕无忧,稳定可靠,坚若磐石!让用户省事

Infra as Code工具箱

HashiCorp for Database! 简单易用!从优到易,让用户省心

云上云下,一键拉起

无论是几万核的生产环境,还是1核2G的本地虚拟机,云上云下,用哪个云,体验如一!

应用广泛,生态繁荣

一键拉起生产级SaaS应用,数据分析快速上手,低代码开发可视化大屏

自主可控,降本增效

Alternative for RDS! 安全可控,降本增效!从易到廉,给用户省钱

最后修改 2022-06-05: add pgsql/deploy document (34a3325)