MXDB:MatrixDB Demo

Pigsty matrixdb 4-node exmaple file

``` 1. --- 2. ###################################################################### 3. # File : pigsty.yml 4. # Desc : Pigsty matrixdb 4-node exmaple file 5. # Link : https://pigsty.cc/#/v-config 6. # Ctime : 2020-05-22 7. # Mtime : 2022-05-22 8. # Copyright (C) 2018-2022 Ruohang Feng (rh@vonng.com) 9. ######################################################################

  1. 1. mx-mdw-1 : 10.10.10.10 (2 Core | 4GB) mx-mdw-1(m)

  2. 2. mx-sdw-1 : 10.10.10.11 (1 Core | 1GB) mx-seg1-1(p) mx-seg2-2(r)

  3. 3. mx-sdw-2 : 10.10.10.12 (1 Core | 1GB) mx-seg2-1(p) mx-seg3-2(r)

  4. 4. mx-sdw-3 : 10.10.10.13 (1 Core | 1GB) mx-seg3-1(p) mx-seg1-2(r)

  5. all:

  6. CLUSTERS

  7. meta nodes, nodes, pgsql, redis, pgsql clusters are defined as

  8. k:v pair inside all.children. Where the key is cluster name

  9. and value is cluster definition consist of two parts:

  10. hosts: cluster members ip and instance level variables

  11. vars : cluster level variables

  12. children: # groups definition

  13. ================================================================

  14. Meta Nodes: Admin Controller

  15. ================================================================

  16. meta: # meta nodes are defined in this special group "meta"
  17. vars:
  18. meta_node: true # mark this group as meta nodes
  19. ansible_group_priority: 99 # overwrite with the highest priority

  20. nginx_enabled: true # setup repo & underlying nginx

  21. nameserver_enabled: false # setup dnsmasq
  22. prometheus_enabled: true # setup prometheus
  23. grafana_enabled: true # setup grafana
  24. loki_enabled: true # setup loki
  25. docker_enabled: true # setup docker
  26. dcs_safeguard: false # protect dcs server from fat fingers

  27. hosts: # add nodes to group 'meta'

  28. 10.10.10.10: { }
  29. 10.10.10.11: { nginx_enabled: false }

  30. 10.10.10.12: { nginx_enabled: false }

  31. ================================================================

  32. ================================================================

  33. GPSQL Clusters

  34. ================================================================

  35. ----------------------------------

  36. cluster: mx-mdw (gp master)

  37. ----------------------------------

  38. mx-mdw:
  39. hosts:
  40. 10.10.10.10: { pg_seq: 1, pg_role: primary , nodename: mx-mdw-1 }
  41. vars:
  42. gp_role: master # this cluster is used as greenplum master
  43. pg_shard: mx # pgsql sharding name & gpsql deployment name
  44. pg_cluster: mx-mdw # this master cluster name is mx-mdw
  45. pg_databases:
    • { name: matrixmgr , extensions: [ { name: matrixdbts } ] }
    • { name: meta }
  46. pg_users:
    • { name: meta , password: DBUser.Meta , pgbouncer: true }
    • { name: dbuser_monitor , password: DBUser.Monitor , roles: [ dbrole_readonly ], superuser: true }
  47. pgbouncer_enabled: true # enable pgbouncer for greenplum master

  48. pgbouncer_exporter_enabled: false # enable pgbouncer_exporter for greenplum master
  49. pg_exporter_params: 'host=127.0.0.1&sslmode=disable' # use 127.0.0.1 as local monitor host

  50. ----------------------------------

  51. cluster: mx-sdw (gp master)

  52. ----------------------------------

  53. mx-sdw:
  54. hosts:
  55. 10.10.10.11:
  56. nodename: mx-sdw-1 # greenplum segment node
  57. pg_instances: # greenplum segment instances
  58. 6000: { pg_cluster: mx-seg1, pg_seq: 1, pg_role: primary , pg_exporter_port: 9633 }
  59. 6001: { pg_cluster: mx-seg2, pg_seq: 2, pg_role: replica , pg_exporter_port: 9634 }
  60. 10.10.10.12:
  61. nodename: mx-sdw-2
  62. pg_instances:
  63. 6000: { pg_cluster: mx-seg2, pg_seq: 1, pg_role: primary , pg_exporter_port: 9633 }
  64. 6001: { pg_cluster: mx-seg3, pg_seq: 2, pg_role: replica , pg_exporter_port: 9634 }
  65. 10.10.10.13:
  66. nodename: mx-sdw-3
  67. pg_instances:
  68. 6000: { pg_cluster: mx-seg3, pg_seq: 1, pg_role: primary , pg_exporter_port: 9633 }
  69. 6001: { pg_cluster: mx-seg1, pg_seq: 2, pg_role: replica , pg_exporter_port: 9634 }
  70. vars:
  71. gp_role: segment # these are nodes for gp segments
  72. pg_shard: mx # pgsql sharding name & gpsql deployment name
  73. pg_cluster: mx-sdw # these segment clusters name is mx-sdw
  74. pg_preflight_skip: true # skip preflight check (since pg_seq & pg_role & pg_cluster not exists)
  75. pg_exporter_config: pg_exporter_basic.yml # use basic config to avoid segment server crash
  76. pg_exporter_params: 'options=-c%20gp_role%3Dutility&sslmode=disable' # use gp_role = utility to connect to segments

  77. VARS

  78. vars: # global variables
  79. version: v1.5.1 # pigsty version string

  80. ================================================================

  81. VARS: INFRA

  82. ================================================================

  83. -----------------------------------------------------------------

  84. CONNECT

  85. -----------------------------------------------------------------

  86. INSTANCE level ansible connect parameters

  87. ansible_user: vagrant # which user to be used (when connecting to remote nodes)

  88. ansible_port: 22 # which port to be used (when connecting to remote nodes)

  89. ansible_host: meta # ssh alias host name (when connecting to remote nodes)

  90. ansible_ssh_private_key_file: ~/.ssh/id_rsa # ssh private key file

  91. ansible_ssh_common_args: '-o StrictHostKeyChecking=no' # ssh common args

  92. proxy_env: # global proxy env when downloading packages

  93. no_proxy: "localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16,.pigsty,.aliyun.com,mirrors.,.myqcloud.com,*.tsinghua.edu.cn"
  94. http_proxy: # set your proxy here: e.g http://user:pass@proxy.xxx.com

  95. https_proxy: # set your proxy here: e.g http://user:pass@proxy.xxx.com

  96. all_proxy: # set your proxy here: e.g http://user:pass@proxy.xxx.com

  97. -----------------------------------------------------------------

  98. CA

  99. -----------------------------------------------------------------

  100. ca_method: create # create|copy|recreate
  101. ca_subject: "/CN=root-ca" # self-signed CA subject
  102. ca_homedir: /ca # ca cert directory
  103. ca_cert: ca.crt # ca public key/cert
  104. ca_key: ca.key # ca private key

  105. -----------------------------------------------------------------

  106. NGINX

  107. -----------------------------------------------------------------

  108. nginx_enabled: true # build local repo on this node
  109. nginx_port: 80 # repo listen address, must same as repo_address
  110. nginx_home: /www # default repo home dir

  111. nginx_upstream: # domain names and upstream servers

    • { name: home , domain: pigsty , endpoint: "10.10.10.10:80" }
    • { name: grafana , domain: g.pigsty , endpoint: "10.10.10.10:3000" }
    • { name: loki , domain: l.pigsty , endpoint: "10.10.10.10:3100" }
    • { name: prometheus , domain: p.pigsty , endpoint: "10.10.10.10:9090" }
    • { name: alertmanager , domain: a.pigsty , endpoint: "10.10.10.10:9093" }
    • { name: consul , domain: c.pigsty , endpoint: "127.0.0.1:8500" }
    • { name: matrixdb , domain: mx.pigsty , endpoint: "127.0.0.1:8240" }
  112. nginx_indexes: # application nav links on home page

    • { name: MatrixDB , url : 'http://mx.pigsty' , comment: 'MatrixDB Installer' }
    • { name: Explain , url : '/pev2' , comment: 'postgres explain visualizer' }
    • { name: Package , url : '/pigsty' , comment: 'local yum repo packages' }
    • { name: PG Logs , url : '/logs' , comment: 'postgres raw csv logs' }
    • { name: Schemas , url : '/schema' , comment: 'schemaspy summary report' }
    • { name: Reports , url : '/report' , comment: 'pgbadger summary report' }
  113. -----------------------------------------------------------------

  114. REPO

  115. -----------------------------------------------------------------

  116. repo_name: pigsty # repo name, pigsty by default
  117. repo_address: pigsty # external address to this repo (ip:port or url)
  118. repo_rebuild: false # force re-download packages
  119. repo_remove: true # remove existing upstream repo
  120. repo_upstreams: # where to download packages?
    • name: base
  121. description: CentOS-$releasever - Base
  122. gpgcheck: no
  123. baseurl:
    • https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/
    • http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
    • http://mirror.centos.org/centos/$releasever/os/$basearch/
    • name: updates
  124. description: CentOS-$releasever - Updates
  125. gpgcheck: no
  126. baseurl:
    • https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/updates/$basearch/
    • http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
    • http://mirror.centos.org/centos/$releasever/updates/$basearch/
    • name: extras
  127. description: CentOS-$releasever - Extras
  128. baseurl:
    • https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/extras/$basearch/
    • http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
    • http://mirror.centos.org/centos/$releasever/extras/$basearch/
  129. gpgcheck: no
    • name: epel
  130. description: CentOS $releasever - epel
  131. gpgcheck: no
  132. baseurl:
    • https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/$basearch
    • http://mirrors.aliyun.com/epel/$releasever/$basearch
    • http://download.fedoraproject.org/pub/epel/$releasever/$basearch
    • name: grafana
  133. description: Grafana Official Yum Repo
  134. enabled: yes
  135. gpgcheck: no
  136. baseurl:
    • https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm
    • https://packages.grafana.com/oss/rpm
    • name: prometheus
  137. description: Prometheus and exporters
  138. gpgcheck: no
  139. baseurl: https://packagecloud.io/prometheus-rpm/release/el/$releasever/$basearch
    • name: pgdg-common
  140. description: PostgreSQL common RPMs for RHEL/CentOS $releasever - $basearch
  141. gpgcheck: no
  142. baseurl:
    • http://mirrors.tuna.tsinghua.edu.cn/postgresql/repos/yum/common/redhat/rhel-$releasever-$basearch
    • https://download.postgresql.org/pub/repos/yum/common/redhat/rhel-$releasever-$basearch
    • name: pgdg14
  143. description: PostgreSQL 14 for RHEL/CentOS $releasever - $basearch
  144. gpgcheck: no
  145. baseurl:
    • https://mirrors.tuna.tsinghua.edu.cn/postgresql/repos/yum/14/redhat/rhel-$releasever-$basearch
    • https://download.postgresql.org/pub/repos/yum/14/redhat/rhel-$releasever-$basearch
    • name: timescaledb
  146. description: TimescaleDB for RHEL/CentOS $releasever - $basearch
  147. gpgcheck: no
  148. baseurl:
    • https://packagecloud.io/timescale/timescaledb/el/7/$basearch
    • name: centos-sclo
  149. description: CentOS-$releasever - SCLo
  150. gpgcheck: no
  151. mirrorlist: http://mirrorlist.centos.org?arch=$basearch&release=$releasever&repo=sclo-sclo

  152. baseurl: http://mirrors.aliyun.com/centos/$releasever/sclo/$basearch/sclo/
    • name: centos-sclo-rh
  153. description: CentOS-$releasever - SCLo rh
  154. gpgcheck: no
  155. mirrorlist: http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-rh

  156. baseurl: http://mirrors.aliyun.com/centos/$releasever/sclo/$basearch/rh/
    • name: nginx
  157. description: Nginx Official Yum Repo
  158. skip_if_unavailable: true
  159. gpgcheck: no
  160. baseurl: http://nginx.org/packages/centos/$releasever/$basearch/
    • name: harbottle # for latest consul & kubernetes
  161. description: Copr repo for main owned by harbottle
  162. skip_if_unavailable: true
  163. gpgcheck: no
  164. baseurl: https://download.copr.fedorainfracloud.org/results/harbottle/main/epel-$releasever-$basearch/
    • name: pg_probackup # for pg_probackup
  165. description: PG_PROBACKUP Centos packages for PostgresPro Standard and Enterprise - $basearch
  166. skip_if_unavailable: true
  167. gpgcheck: no
  168. baseurl: https://repo.postgrespro.ru/pg_probackup-forks/rpm/latest/centos-$releasever-$basearch
    • name: docker-ce # for latest docker
  169. description: Docker CE Stable - $basearch
  170. skip_if_unavailable: true
  171. gpgcheck: no
  172. baseurl:
    • https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable
    • https://download.docker.com/linux/centos/$releasever/$basearch/stable
  173. repo_packages: # which packages to be included # what to download #

    • epel-release nginx wget yum-utils yum createrepo sshpass zip unzip # ---- boot ---- #
    • ntp chrony uuid lz4 bzip2 nc pv jq vim-enhanced make patch bash lsof wget git tuned perf ftp lrzsz rsync # ---- node ---- #
    • numactl grubby sysstat dstat iotop bind-utils net-tools tcpdump socat ipvsadm telnet ca-certificates keepalived # ----- utils ----- #
    • readline zlib openssl openssh-clients libyaml libxml2 libxslt libevent perl perl-devel perl-ExtUtils* # --- deps:pg --- #
    • readline-devel zlib-devel uuid-devel libuuid-devel libxml2-devel libxslt-devel openssl-devel libicu-devel # --- deps:devel -- #
    • grafana prometheus2 pushgateway alertmanager mtail consul consul_exporter consul-template etcd dnsmasq # ----- meta ----- #
    • node_exporter nginx_exporter blackbox_exporter redis_exporter # ---- exporter --- #
    • ansible python python-pip python-psycopg2 # - ansible & py3 - #
    • python3 python3-psycopg2 python36-requests python3-etcd python3-consul python36-urllib3 python36-idna python36-pyOpenSSL python36-cryptography
    • patroni patroni-consul patroni-etcd pgbouncer pg_cli pgbadger pg_activity tail_n_mail # -- pgsql common - #
    • pgcenter boxinfo check_postgres emaj pgbconsole pg_bloat_check pgquarrel barman barman-cli pgloader pgFormatter pitrery pspg pgxnclient PyGreSQL
    • postgresql14 postgis32_14 citus_14 pglogical_14 timescaledb-2-postgresql-14 pg_repack_14 wal2json_14 # -- pg14 packages -#
    • pg_qualstats_14 pg_stat_kcache_14 pg_stat_monitor_14 pg_top_14 pg_track_settings_14 pg_wait_sampling_14 pg_probackup-std-14
    • pg_statement_rollback_14 system_stats_14 plproxy_14 plsh_14 pldebugger_14 plpgsql_check_14 pgmemcache_14 # plr_14
    • mysql_fdw_14 ogr_fdw_14 tds_fdw_14 sqlite_fdw_14 firebird_fdw_14 hdfs_fdw_14 mongo_fdw_14 osm_fdw_14 pgbouncer_fdw_14
    • hypopg_14 geoip_14 rum_14 hll_14 ip4r_14 prefix_14 pguri_14 tdigest_14 topn_14 periods_14
    • bgw_replstatus_14 count_distinct_14 credcheck_14 ddlx_14 extra_window_functions_14 logerrors_14 mysqlcompat_14 orafce_14
    • repmgr_14 pg_auth_mon_14 pg_auto_failover_14 pg_background_14 pg_bulkload_14 pg_catcheck_14 pg_comparator_14
    • pg_cron_14 pg_fkpart_14 pg_jobmon_14 pg_partman_14 pg_permissions_14 pg_prioritize_14 pgagent_14
    • pgaudit16_14 pgauditlogtofile_14 pgcryptokey_14 pgexportdoc_14 pgfincore_14 pgimportdoc_14 powa_14 pgmp_14 pgq_14
    • pgquarrel-0.7.0-1 pgsql_tweaks_14 pgtap_14 pgtt_14 postgresql-unit_14 postgresql_anonymizer_14 postgresql_faker_14
    • safeupdate_14 semver_14 set_user_14 sslutils_14 table_version_14 # pgrouting_14 osm2pgrouting_14
    • clang coreutils diffutils rpm-build rpm-devel rpmlint rpmdevtools bison flex # gcc gcc-c++ # - build utils - #
    • docker-ce docker-compose kubelet kubectl kubeadm kubernetes-cni helm # - cloud native- #
    • ed mlocate parted krb5-devel apr apr-util audit parquet-libs-3.0.0 arrow-libs-3.0.0 # --- deps:gpsql -- #
  174. repo_url_packages: # extra packages from url

    • https://github.com/Vonng/loki-rpm/releases/download/v2.5.0/loki-2.5.0.x86_64.rpm
    • https://github.com/Vonng/loki-rpm/releases/download/v2.5.0/promtail-2.5.0.x86_64.rpm
    • https://github.com/Vonng/pg_exporter/releases/download/v0.5.0/pg_exporter-0.5.0.x86_64.rpm
    • https://github.com/cybertec-postgresql/vip-manager/releases/download/v1.0.2/vip-manager-1.0.2-1.x86_64.rpm
    • https://github.com/Vonng/haproxy-rpm/releases/download/v2.5.7/haproxy-2.5.7-1.el7.x86_64.rpm
    • https://github.com/Vonng/pigsty-pkg/releases/download/misc/redis-6.2.7-1.el7.remi.x86_64.rpm
    • https://github.com/dalibo/pev2/releases/download/v0.24.0/pev2.tar.gz
    • https://github.com/Vonng/pigsty-pkg/releases/download/misc/polysh-0.4-1.noarch.rpm
    • https://github.com/greenplum-db/gpdb/releases/download/6.20.3/open-source-greenplum-db-6.20.3-rhel7-x86_64.rpm # -- gpsql --#
    • https://github.com/Vonng/pigsty-pkg/releases/download/misc/matrixdb-4.4.0.community-1.el7.x86_64.rpm # - matrix - #
  175. -----------------------------------------------------------------

  176. NAMESERVER

  177. -----------------------------------------------------------------

  178. nameserver_enabled: false # setup dnsmasq
  179. dns_records: # dynamic dns record resolved by dnsmasq
    • 10.10.10.2 pg-meta # sandbox vip for pg-meta
    • 10.10.10.3 pg-test # sandbox vip for pg-test
    • 10.10.10.10 pg-meta-1 # sandbox instance pg-meta-1
    • 10.10.10.11 pg-test-1 # sandbox instance node-1
    • 10.10.10.12 pg-test-2 # sandbox instance node-2
    • 10.10.10.13 pg-test-3 # sandbox instance node-3
  180. -----------------------------------------------------------------

  181. PROMETHEUS

  182. -----------------------------------------------------------------

  183. prometheus_enabled: true # setup prometheus
  184. prometheus_data_dir: /data/prometheus/data
  185. prometheus_options: '--storage.tsdb.retention=15d'
  186. prometheus_reload: false # reload prometheus instead of recreate it?
  187. prometheus_sd_method: static # service discovery method: static|consul
  188. prometheus_sd_interval: 5s # service discovery refresh interval
  189. prometheus_scrape_interval: 10s # global scrape & evaluation interval
  190. prometheus_scrape_timeout: 8s # scrape timeout

  191. -----------------------------------------------------------------

  192. EXPORTER

  193. -----------------------------------------------------------------

  194. exporter_install: none # none|yum|binary, none by default
  195. exporter_repo_url: '' # if set, repo will be added to /etc/yum.repos.d/
  196. exporter_metrics_path: /metrics # default metric path for pg related exporter

  197. -----------------------------------------------------------------

  198. GRAFANA

  199. -----------------------------------------------------------------

  200. grafana_enabled: true # enable grafana? only works on meta nodes
  201. grafana_endpoint: http://10.10.10.10:3000 # grafana endpoint url
  202. grafana_admin_username: admin # default grafana admin username
  203. grafana_admin_password: pigsty # default grafana admin password
  204. grafana_database: sqlite3 # default grafana database type: sqlite3|postgres
  205. grafana_pgurl: postgres://dbuser_grafana:DBUser.Grafana@meta:5436/grafana

  206. grafana_plugin_method: install # none|install|always, none will skip plugin install

  207. grafana_plugin_cache: /www/pigsty/plugins.tgz # path to grafana plugins cache tarball
  208. grafana_plugin_list: # plugins that will be downloaded via grafana-cli
    • marcusolsson-csv-datasource
    • marcusolsson-json-datasource
    • marcusolsson-treemap-panel
  209. grafana_plugin_git: # plugins that will be downloaded via git
    • https://github.com/Vonng/vonng-echarts-panel
  210. -----------------------------------------------------------------

  211. LOKI

  212. -----------------------------------------------------------------

  213. loki_enabled: true # enable loki? only works on meta nodes
  214. loki_clean: false # whether remove existing loki data
  215. loki_endpoint: http://10.10.10.10:3100/loki/api/v1/push # where to push data
  216. loki_options: '-config.file=/etc/loki.yml -config.expand-env=true'
  217. loki_data_dir: /data/loki # default loki data dir
  218. loki_retention: 15d # log retention period

  219. -----------------------------------------------------------------

  220. DCS

  221. -----------------------------------------------------------------

  222. dcs_name: pigsty # consul dc name
  223. dcs_servers: # dcs server dict in name:ip format
  224. meta-1: 10.10.10.10 # using existing external dcs cluster is recommended for HA
  225. meta-2: 10.10.10.11 # node with ip in dcs_servers will be initialized as dcs servers

  226. meta-3: 10.10.10.12 # it's recommend to reuse meta nodes as dcs servers if no ad hoc cluster available

  227. dcs_registry: consul # where to register services: none | consul | etcd | both
  228. dcs_safeguard: false # if true, running dcs will NOT be removed
  229. dcs_clean: true # if true, running dcs will be purged during node init, DANGEROUS

  230. -----------------------------------------------------------------

  231. CONSUL

  232. -----------------------------------------------------------------

  233. consul_enabled: true # enable consul server/agent by default?
  234. consul_data_dir: /data/consul # consul data dir (/data/consul by default)

  235. -----------------------------------------------------------------

  236. ETCD

  237. -----------------------------------------------------------------

  238. etcd_enabled: true # enable etcd server by default?
  239. etcd_data_dir: /data/etcd # etcd data dir (/data/etcd by default)

  240. ================================================================

  241. VARS: NODES

  242. ================================================================

  243. global variables for nodes (including meta)

  244. -----------------------------------------------------------------

  245. NODE_IDENTITY

  246. -----------------------------------------------------------------

  247. meta_node: false # node with meta_node flag will be marked as admin node
  248. nodename: # [OPTIONAL] # node instance identity, used as ins, hostname by default

  249. node_cluster: nodes # [OPTIONAL] # node cluster identity, used as cls, 'nodes' by default
  250. nodename_overwrite: true # overwrite node's hostname with nodename?
  251. nodename_exchange: true # exchange nodename among play hosts?

  252. -----------------------------------------------------------------

  253. NODE_DNS

  254. -----------------------------------------------------------------

  255. node_etc_hosts_default: # static dns records in /etc/hosts
    • 10.10.10.10 meta pigsty p.pigsty g.pigsty a.pigsty c.pigsty l.pigsty
    • 10.10.10.10 api.pigsty adm.pigsty cli.pigsty ddl.pigsty lab.pigsty git.pigsty sss.pigsty
  256. node_etc_hosts: [] # extra static dns records in /etc/hosts

  257. node_dns_method: add # add (default) | none (skip) | overwrite (remove old settings)

  258. node_dns_servers: # dynamic nameserver in /etc/resolv.conf
    • 10.10.10.10
  259. node_dns_options: # dns resolv options
    • options single-request-reopen timeout:1 rotate
    • domain service.consul
  260. -----------------------------------------------------------------

  261. NODE_REPO

  262. -----------------------------------------------------------------

  263. node_repo_method: local # none|local: ad local repo|public: add upstream directly
  264. node_repo_remove: true # remove existing repo on nodes?
  265. node_repo_local_urls: # list local repo url, if node_repo_method = local
    • http://pigsty/pigsty.repo
    • http://pigsty/matrix.repo
  266. node_packages: [ ] # extra packages for all nodes

  267. node_packages_default: # common packages for all nodes
    • wget,sshpass,ntp,chrony,tuned,uuid,lz4,make,patch,bash,lsof,wget,unzip,git,ftp,vim-minimal,ca-certificates
    • numactl,grubby,sysstat,dstat,iotop,bind-utils,net-tools,tcpdump,socat,ipvsadm,telnet,tuned,nc,pv,jq,perf
    • readline,zlib,openssl,openssl-libs,openssh-clients,python3,python36-requests,node_exporter,consul,etcd,promtail
  268. node_packages_meta: # extra packages for meta nodes
    • grafana,prometheus2,alertmanager,loki,nginx_exporter,blackbox_exporter,pushgateway,redis,postgresql14
    • nginx,ansible,pgbadger,python-psycopg2,dnsmasq,coreutils,diffutils,polysh,docker-ce,docker-compose
  269. node_packages_meta_pip: jupyterlab

  270. -----------------------------------------------------------------

  271. NODE_TUNE

  272. -----------------------------------------------------------------

  273. node_disable_firewall: true # disable firewall
  274. node_disable_selinux: true # disable selinux
  275. node_disable_numa: false # disable numa (node reboot required)
  276. node_disable_swap: false # disable swap, use with caution
  277. node_static_network: true # keep dns resolver settings after reboot
  278. node_disk_prefetch: false # setup disk prefetch on HDD to increase performance
  279. node_kernel_modules: [ softdog, br_netfilter, ip_vs, ip_vs_rr, ip_vs_rr, ip_vs_wrr, ip_vs_sh ]
  280. node_tune: tiny # install and activate tuned profile: none|oltp|olap|crit|tiny
  281. node_sysctl_params: { } # set additional sysctl parameters, k:v format

  282. -----------------------------------------------------------------

  283. NODE_ADMIN

  284. -----------------------------------------------------------------

  285. node_data_dir: /data # main data directory
  286. node_admin_enabled: true # create a default admin user defined by node_admin_* ?
  287. node_admin_uid: 88 # uid and gid for this admin user
  288. node_admin_username: dba # name of this admin user, dba by default
  289. node_admin_ssh_exchange: true # exchange admin ssh key among each pgsql cluster ?
  290. node_admin_pk_current: true # add current user's ~/.ssh/id_rsa.pub to admin authorized_keys ?
  291. node_admin_pk_list: # ssh public keys to be added to admin user (REPLACE WITH YOURS!)
    • 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQC7IMAMNavYtWwzAJajKqwdn3ar5BhvcwCnBTxxEkXhGlCO2vfgosSAQMEflfgvkiI5nM1HIFQ8KINlx1XLO7SdL5KdInG5LIJjAFh0pujS4kNCT9a5IGvSq1BrzGqhbEcwWYdju1ZPYBcJm/MG+JD0dYCh8vfrYB/cYMD0SOmNkQ== vagrant@pigsty.com'
  292. -----------------------------------------------------------------

  293. NODE_TIME

  294. -----------------------------------------------------------------

  295. node_timezone: Asia/Hong_Kong # default node timezone, empty will not change
  296. node_ntp_enabled: true # enable ntp service? false will leave ntp service untouched
  297. node_ntp_service: ntp # ntp service provider: ntp|chrony
  298. node_ntp_servers: # default NTP servers
    • pool cn.pool.ntp.org iburst
    • pool pool.ntp.org iburst
    • pool time.pool.aliyun.com iburst
    • server 10.10.10.10 iburst
    • server ntp.tuna.tsinghua.edu.cn iburst
  299. node_crontab_overwrite: true # true will overwrite /etc/crontab, false will append crontab
  300. node_crontab: [ ] # crontab entries in /etc/crontab

  301. -----------------------------------------------------------------

  302. DOCKER

  303. -----------------------------------------------------------------

  304. docker_enabled: false # enable docker on all nodes? (you can enable them on meta nodes only)
  305. docker_cgroups_driver: systemd # docker cgroup fs driver
  306. docker_registry_mirrors: [] # docker registry mirror
  307. docker_image_cache: /tmp/docker.tgz # docker images tarball to be loaded if exists

  308. -----------------------------------------------------------------

  309. NODE_EXPORTER

  310. -----------------------------------------------------------------

  311. node_exporter_enabled: true # setup node_exporter on instance
  312. node_exporter_port: 9100 # default port for node exporter
  313. node_exporter_options: '--no-collector.softnet --no-collector.nvme --collector.ntp --collector.tcpstat --collector.processes'

  314. -----------------------------------------------------------------

  315. PROMTAIL

  316. -----------------------------------------------------------------

  317. promtail_enabled: true # enable promtail logging collector?
  318. promtail_clean: false # remove promtail status file? false by default
  319. promtail_port: 9080 # default listen address for promtail
  320. promtail_options: '-config.file=/etc/promtail.yml -config.expand-env=true'
  321. promtail_positions: /var/log/positions.yaml # position status for promtail

  322. ================================================================

  323. VARS: PGSQL

  324. ================================================================

  325. -----------------------------------------------------------------

  326. PG_IDENTITY

  327. -----------------------------------------------------------------

  328. pg_cluster: # <CLUSTER> <REQUIRED> : pgsql cluster name

  329. pg_role: replica # <INSTANCE> <REQUIRED> : pg role : primary, replica, offline

  330. pg_seq: 0 # <INSTANCE> <REQUIRED> : instance seq number

  331. pg_instances: {} # <INSTANCE> : define multiple pg instances on node, used by monly & gpsql

  332. pg_upstream: # <INSTANCE> : replication upstream ip addr

  333. pg_shard: # <CLUSTER> : pgsql shard name

  334. pg_sindex: 0 # <CLUSTER> : pgsql shard index

  335. gp_role: master # <CLUSTER> : gpsql role, master or segment

  336. pg_offline_query: false # <INSTANCE> [FLAG] set to true to enable offline query on this instance (instance level)

  337. pg_backup: false # <INSTANCE> [FLAG] store base backup on this node (instance level, reserved)
  338. pg_weight: 100 # <INSTANCE> [FLAG] default load balance weight (instance level)
  339. pg_hostname: true # [FLAG] reuse postgres identity name as node identity?
  340. pg_preflight_skip: false # [FLAG] skip preflight identity check

  341. -----------------------------------------------------------------

  342. PG_BUSINESS

  343. -----------------------------------------------------------------

  344. overwrite these variables on <CLUSTER> level

  345. pg_users: [] # business users
  346. pg_databases: [] # business databases
  347. pg_services_extra: [] # extra services
  348. pg_hba_rules_extra: [] # extra hba rules
  349. pgbouncer_hba_rules_extra: [] # extra pgbouncer hba rules

  350. WARNING: change these in production environment!

  351. pg_admin_username: mxadmin
  352. pg_admin_password: mxadmin
  353. pg_monitor_username: mxadmin
  354. pg_monitor_password: mxadmin
  355. pg_replication_username: mxadmin
  356. pg_replication_password: mxadmin

  357. -----------------------------------------------------------------

  358. PG_INSTALL

  359. -----------------------------------------------------------------

  360. pg_dbsu: postgres # os user for database, postgres by default (unwise to change it)
  361. pg_dbsu_uid: 26 # os dbsu uid and gid, 26 for default postgres users and groups
  362. pg_dbsu_sudo: limit # dbsu sudo privilege: none|limit|all|nopass, limit by default
  363. pg_dbsu_home: /var/lib/pgsql # postgresql home directory
  364. pg_dbsu_ssh_exchange: true # exchange postgres dbsu ssh key among same cluster ?
  365. pg_version: 14 # default postgresql version to be installed
  366. pgdg_repo: false # add pgdg official repo before install (in case of no local repo available)
  367. pg_add_repo: false # add postgres relate repo before install ?
  368. pg_bin_dir: /usr/pgsql/bin # postgres binary dir, default is /usr/pgsql/bin, which use /usr/pgsql -> /usr/pgsql-{ver}
  369. pg_packages: # postgresql related packages. ${pg_version} will be replaced bypg_version`
    • postgresql${pg_version}* # postgresql kernel packages
    • postgis32_${pg_version}* # postgis
    • citus_${pg_version}* # citus
    • timescaledb-2-postgresql-${pg_version} # timescaledb
    • pgbouncer pg_exporter pgbadger pg_activity node_exporter consul haproxy vip-manager
    • patroni patroni-consul patroni-etcd python3 python3-psycopg2 python36-requests python3-etcd
    • python3-consul python36-urllib3 python36-idna python36-pyOpenSSL python36-cryptography
  370. pg_extensions: # postgresql extensions, ${pg_version} will be replaced by actualpg_version`
    • pg_repack_${pg_version} pg_qualstats_${pg_version} pg_stat_kcache_${pg_version} pg_stat_monitor_${pg_version} wal2json_${pg_version}
  371. - ogr_fdw${pg_version} mysql_fdw_${pg_version} redis_fdw_${pg_version} mongo_fdw${pg_version} hdfs_fdw_${pg_version}

  372. - count_distinct${version} ddlx_${version} geoip${version} orafce${version}

  373. - hypopg_${version} ip4r${version} jsquery_${version} logerrors_${version} periods_${version} pg_auto_failover_${version} pg_catcheck${version}

  374. - pg_fkpart${version} pg_jobmon${version} pg_partman${version} pg_prioritize_${version} pg_track_settings${version} pgaudit15_${version}

  375. - pgcryptokey${version} pgexportdoc${version} pgimportdoc${version} pgmemcache-${version} pgmp${version} pgq-${version} pgquarrel pgrouting_${version}

  376. - pguint${version} pguri${version} prefix${version} safeupdate_${version} semver${version} table_version${version} tdigest${version}

  377. -----------------------------------------------------------------

  378. PG_BOOTSTRAP

  379. -----------------------------------------------------------------

  380. pg_safeguard: false # true will disable pg_clean at all, even for pgsql-remove.yml
  381. pg_clean: true # true will clean running postgres during pgsql init (DANGEROUS)
  382. pg_data: /pg/data # postgres data directory (soft link)
  383. pg_fs_main: /data # primary data disk mount point /pg -> {{ pg_fs_main }}/postgres/{{ pg_instance }}
  384. pg_fs_bkup: /data/backups # backup disk mount point /pg/ -> {{ pg_fs_bkup }}/postgres/{{ pg_instance }}/
  385. pg_dummy_filesize: 64MiB # /pg/dummy hold some disk space for emergency use
  386. pg_listen: '0.0.0.0' # postgres listen address, '0.0.0.0' (all ipv4 addr) by default
  387. pg_port: 5432 # postgres port, 5432 by default
  388. pg_localhost: /var/run/postgresql # localhost unix socket dir for connection
  389. patroni_enabled: true # if not enabled, no postgres cluster will be created
  390. patroni_mode: default # pause|default|remove
  391. pg_dcs_type: consul # which dcs to use: consul or etcd or raft
  392. pg_namespace: /pg # top level key namespace in dcs
  393. patroni_port: 8008 # default patroni port
  394. patroni_watchdog_mode: automatic # watchdog mode: off|automatic|required
  395. pg_conf: tiny.yml # pgsql template: {oltp|olap|crit|tiny}.yml
  396. pg_libs: 'timescaledb, pg_stat_statements, auto_explain' # extensions to be loaded
  397. pg_delay: 0 # apply delay for standby cluster leader
  398. pg_checksum: false # enable data checksum by default
  399. pg_encoding: UTF8 # database cluster encoding, UTF8 by default
  400. pg_locale: C # database cluster local, C by default
  401. pg_lc_collate: C # database cluster collate, C by default
  402. pg_lc_ctype: en_US.UTF8 # database character type, en_US.UTF8 by default (for i18n full-text search)
  403. pgbouncer_enabled: false # if not enabled, pgbouncer will not be created
  404. pgbouncer_port: 6432 # pgbouncer port, 6432 by default
  405. pgbouncer_poolmode: session # pooling mode: session|transaction|statement, transaction pooling by default
  406. pgbouncer_max_db_conn: 100 # max connection to single database, DO NOT set this larger than postgres max conn or db connlimit

  407. -----------------------------------------------------------------

  408. PG_PROVISION

  409. -----------------------------------------------------------------

  410. pg_provision: false # whether provisioning postgres cluster
  411. pg_init: pg-init # init script for cluster template

  412. pg_default_roles:

    • { name: dbrole_readonly , login: false , comment: role for global read-only access } # production read-only role
    • { name: dbrole_readwrite , login: false , roles: [dbrole_readonly], comment: role for global read-write access } # production read-write role
    • { name: dbrole_offline , login: false , comment: role for restricted read-only access (offline instance) } # restricted-read-only role
    • { name: dbrole_admin , login: false , roles: [pg_monitor, dbrole_readwrite] , comment: role for object creation } # production DDL change role
    • { name: postgres , superuser: true , comment: system superuser } # system dbsu, name is designated by pg_dbsu
    • { name: dbuser_dba , superuser: true , roles: [dbrole_admin] , comment: system admin user } # admin dbsu, name is designated by pg_admin_username
    • { name: replicator , replication: true , bypassrls: true , roles: [pg_monitor, dbrole_readonly] , comment: system replicator } # replicator
    • { name: dbuser_monitor , roles: [pg_monitor, dbrole_readonly] , comment: system monitor user , parameters: {log_min_duration_statement: 1000 } } # monitor user
    • { name: dbuser_stats , password: DBUser.Stats , roles: [dbrole_offline] , comment: business offline user for offline queries and ETL } # ETL user
  413. pg_default_privileges: # - privileges - #
    • GRANT USAGE ON SCHEMAS TO dbrole_readonly
    • GRANT SELECT ON TABLES TO dbrole_readonly
    • GRANT SELECT ON SEQUENCES TO dbrole_readonly
    • GRANT EXECUTE ON FUNCTIONS TO dbrole_readonly
    • GRANT USAGE ON SCHEMAS TO dbrole_offline
    • GRANT SELECT ON TABLES TO dbrole_offline
    • GRANT SELECT ON SEQUENCES TO dbrole_offline
    • GRANT EXECUTE ON FUNCTIONS TO dbrole_offline
    • GRANT INSERT, UPDATE, DELETE ON TABLES TO dbrole_readwrite
    • GRANT USAGE, UPDATE ON SEQUENCES TO dbrole_readwrite
    • GRANT TRUNCATE, REFERENCES, TRIGGER ON TABLES TO dbrole_admin
    • GRANT CREATE ON SCHEMAS TO dbrole_admin
  414. pg_default_schemas: [ monitor ] # default schemas to be created
  415. pg_default_extensions: # default extensions to be created
    • { name: 'pg_stat_statements', schema: 'monitor' }
    • { name: 'pgstattuple', schema: 'monitor' }
    • { name: 'pg_qualstats', schema: 'monitor' }
    • { name: 'pg_buffercache', schema: 'monitor' }
    • { name: 'pageinspect', schema: 'monitor' }
    • { name: 'pg_prewarm', schema: 'monitor' }
    • { name: 'pg_visibility', schema: 'monitor' }
    • { name: 'pg_freespacemap', schema: 'monitor' }
    • { name: 'pg_repack', schema: 'monitor' }
    • name: postgres_fdw
    • name: file_fdw
    • name: btree_gist
    • name: btree_gin
    • name: pg_trgm
    • name: intagg
    • name: intarray
  416. pg_reload: true # reload postgres after hba changes

  417. pg_hba_rules: # postgres host-based authentication rules
    • title: allow meta node password access
  418. role: common
  419. rules:
    • host all all 10.10.10.10/32 md5
    • title: allow intranet admin password access
  420. role: common
  421. rules:
    • host all +dbrole_admin 10.0.0.0/8 md5
    • host all +dbrole_admin 172.16.0.0/12 md5
    • host all +dbrole_admin 192.168.0.0/16 md5
    • title: allow intranet password access
  422. role: common
  423. rules:
    • host all all 10.0.0.0/8 md5
    • host all all 172.16.0.0/12 md5
    • host all all 192.168.0.0/16 md5
    • title: allow local read/write (local production user via pgbouncer)
  424. role: common
  425. rules:
    • local all +dbrole_readonly md5
    • host all +dbrole_readonly 127.0.0.1/32 md5
    • title: allow offline query (ETL,SAGA,Interactive) on offline instance
  426. role: offline
  427. rules:
    • host all +dbrole_offline 10.0.0.0/8 md5
    • host all +dbrole_offline 172.16.0.0/12 md5
    • host all +dbrole_offline 192.168.0.0/16 md5
  428. pgbouncer_hba_rules: # pgbouncer host-based authentication rules

    • title: local password access
  429. role: common
  430. rules:
    • local all all md5
    • host all all 127.0.0.1/32 md5
    • title: intranet password access
  431. role: common
  432. rules:
    • host all all 10.0.0.0/8 md5
    • host all all 172.16.0.0/12 md5
    • host all all 192.168.0.0/16 md5
  433. -----------------------------------------------------------------

  434. PG_EXPORTER

  435. -----------------------------------------------------------------

  436. pg_exporter_enabled: true # setup pg_exporter on instance
  437. pg_exporter_config: pg_exporter.yml # use fast cache exporter for demo
  438. pg_exporter_port: 9630 # pg_exporter listen port
  439. pg_exporter_params: 'sslmode=disable' # url query parameters for pg_exporter
  440. pg_exporter_url: '' # optional, overwrite auto-generate postgres connstr
  441. pg_exporter_auto_discovery: true # optional, discovery available database on target instance ?
  442. pg_exporter_exclude_database: 'template0,template1,postgres,matrixmgr' # optional, comma separated list of database that WILL NOT be monitored when auto-discovery enabled
  443. pg_exporter_include_database: '' # optional, comma separated list of database that WILL BE monitored when auto-discovery enabled, empty string will disable include mode
  444. pg_exporter_options: '--log.level=info --log.format="logger

(本文超出站点单文档体积上限,已截断)