MXDB:MatrixDB演示

4节点的MatrixDB部署配置文件,使用一个Master与3对数据节点
---
######################################################################
# File      :   pigsty.yml
# Desc      :   Pigsty matrixdb 4-node exmaple file
# Link      :   https://pigsty.cc/#/v-config
# Ctime     :   2020-05-22
# Mtime     :   2022-05-22
# Copyright (C) 2018-2022 Ruohang Feng (rh@vonng.com)
######################################################################

######################################################################
# 1. mx-mdw-1 : 10.10.10.10 (2 Core | 4GB)  mx-mdw-1(m)
# 2. mx-sdw-1 : 10.10.10.11 (1 Core | 1GB)  mx-seg1-1(p) mx-seg2-2(r)
# 3. mx-sdw-2 : 10.10.10.12 (1 Core | 1GB)  mx-seg2-1(p) mx-seg3-2(r)
# 4. mx-sdw-3 : 10.10.10.13 (1 Core | 1GB)  mx-seg3-1(p) mx-seg1-2(r)
######################################################################

all:

  ##################################################################
  #                            CLUSTERS                            #
  ##################################################################
  # meta nodes, nodes, pgsql, redis, pgsql clusters are defined as
  # k:v pair inside `all.children`. Where the key is cluster name
  # and value is cluster definition consist of two parts:
  # `hosts`: cluster members ip and instance level variables
  # `vars` : cluster level variables
  ##################################################################
  children:                           # groups definition


    #================================================================#
    #                  Meta Nodes: Admin Controller                  #
    #================================================================#
    meta:   # meta nodes are defined in this special group "meta"
      vars:
        meta_node: true               # mark this group as meta nodes
        ansible_group_priority: 99    # overwrite with the highest priority

        nginx_enabled:       true     # setup repo & underlying nginx
        nameserver_enabled:  false    # setup dnsmasq
        prometheus_enabled:  true     # setup prometheus
        grafana_enabled:     true     # setup grafana
        loki_enabled:        true     # setup loki
        docker_enabled:      true     # setup docker
        dcs_safeguard:       false    # protect dcs server from fat fingers

      hosts:                          # add nodes to group 'meta'
        10.10.10.10: { }
        # 10.10.10.11: { nginx_enabled: false }
        # 10.10.10.12: { nginx_enabled: false  }
    #================================================================#


    #================================================================#
    #                        GPSQL Clusters                          #
    #================================================================#

    #----------------------------------#
    # cluster: mx-mdw (gp master)
    #----------------------------------#
    mx-mdw:
      hosts:
        10.10.10.10: { pg_seq: 1, pg_role: primary , nodename: mx-mdw-1 }
      vars:
        gp_role: master          # this cluster is used as greenplum master
        pg_shard: mx             # pgsql sharding name & gpsql deployment name
        pg_cluster: mx-mdw       # this master cluster name is mx-mdw
        pg_databases:
          - { name: matrixmgr , extensions: [ { name: matrixdbts } ] }
          - { name: meta }
        pg_users:
          - { name: meta , password: DBUser.Meta , pgbouncer: true }
          - { name: dbuser_monitor , password: DBUser.Monitor , roles: [ dbrole_readonly ], superuser: true }

        pgbouncer_enabled: true                # enable pgbouncer for greenplum master
        pgbouncer_exporter_enabled: false      # enable pgbouncer_exporter for greenplum master
        pg_exporter_params: 'host=127.0.0.1&sslmode=disable'  # use 127.0.0.1 as local monitor host

    #----------------------------------#
    # cluster: mx-sdw (gp master)
    #----------------------------------#
    mx-sdw:
      hosts:
        10.10.10.11:
          nodename: mx-sdw-1        # greenplum segment node
          pg_instances:             # greenplum segment instances
            6000: { pg_cluster: mx-seg1, pg_seq: 1, pg_role: primary , pg_exporter_port: 9633 }
            6001: { pg_cluster: mx-seg2, pg_seq: 2, pg_role: replica , pg_exporter_port: 9634 }
        10.10.10.12:
          nodename: mx-sdw-2
          pg_instances:
            6000: { pg_cluster: mx-seg2, pg_seq: 1, pg_role: primary , pg_exporter_port: 9633  }
            6001: { pg_cluster: mx-seg3, pg_seq: 2, pg_role: replica , pg_exporter_port: 9634  }
        10.10.10.13:
          nodename: mx-sdw-3
          pg_instances:
            6000: { pg_cluster: mx-seg3, pg_seq: 1, pg_role: primary , pg_exporter_port: 9633 }
            6001: { pg_cluster: mx-seg1, pg_seq: 2, pg_role: replica , pg_exporter_port: 9634 }
      vars:
        gp_role: segment               # these are nodes for gp segments
        pg_shard: mx                   # pgsql sharding name & gpsql deployment name
        pg_cluster: mx-sdw             # these segment clusters name is mx-sdw
        pg_preflight_skip: true        # skip preflight check (since pg_seq & pg_role & pg_cluster not exists)
        pg_exporter_config: pg_exporter_basic.yml                             # use basic config to avoid segment server crash
        pg_exporter_params: 'options=-c%20gp_role%3Dutility&sslmode=disable'  # use gp_role = utility to connect to segments



  ####################################################################
  #                             VARS                                 #
  ####################################################################
  vars:                               # global variables
    version: v1.5.1                # pigsty version string

    #================================================================#
    #                         VARS: INFRA                            #
    #================================================================#

    #-----------------------------------------------------------------
    # CONNECT
    #-----------------------------------------------------------------
    # INSTANCE level ansible connect parameters
    # ansible_user: vagrant           # which user to be used (when connecting to remote nodes)
    # ansible_port: 22                # which port to be used (when connecting to remote nodes)
    # ansible_host: meta              # ssh alias host name (when connecting to remote nodes)
    # ansible_ssh_private_key_file: ~/.ssh/id_rsa            # ssh private key file
    # ansible_ssh_common_args: '-o StrictHostKeyChecking=no' # ssh common args

    proxy_env:                        # global proxy env when downloading packages
      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"
      # http_proxy:  # set your proxy here: e.g http://user:pass@proxy.xxx.com
      # https_proxy: # set your proxy here: e.g http://user:pass@proxy.xxx.com
      # all_proxy:   # set your proxy here: e.g http://user:pass@proxy.xxx.com

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

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

    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"   }

    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'     }

    #-----------------------------------------------------------------
    # REPO
    #-----------------------------------------------------------------
    repo_name: pigsty                 # repo name, pigsty by default
    repo_address: pigsty              # external address to this repo (ip:port or url)
    repo_rebuild: false               # force re-download packages
    repo_remove: true                 # remove existing upstream repo
    repo_upstreams:                   # where to download packages?
      - name: base
        description: CentOS-$releasever - Base
        gpgcheck: no
        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
        description: CentOS-$releasever - Updates
        gpgcheck: no
        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
        description: CentOS-$releasever - Extras
        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/
        gpgcheck: no
      - name: epel
        description: CentOS $releasever - epel
        gpgcheck: no
        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
        description: Grafana Official Yum Repo
        enabled: yes
        gpgcheck: no
        baseurl:
          - https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm
          - https://packages.grafana.com/oss/rpm
      - name: prometheus
        description: Prometheus and exporters
        gpgcheck: no
        baseurl: https://packagecloud.io/prometheus-rpm/release/el/$releasever/$basearch
      - name: pgdg-common
        description: PostgreSQL common RPMs for RHEL/CentOS $releasever - $basearch
        gpgcheck: no
        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
        description: PostgreSQL 14 for RHEL/CentOS $releasever - $basearch
        gpgcheck: no
        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
        description: TimescaleDB for RHEL/CentOS $releasever - $basearch
        gpgcheck: no
        baseurl:
          - https://packagecloud.io/timescale/timescaledb/el/7/$basearch
      - name: centos-sclo
        description: CentOS-$releasever - SCLo
        gpgcheck: no
        #mirrorlist: http://mirrorlist.centos.org?arch=$basearch&release=$releasever&repo=sclo-sclo
        baseurl: http://mirrors.aliyun.com/centos/$releasever/sclo/$basearch/sclo/
      - name: centos-sclo-rh
        description: CentOS-$releasever - SCLo rh
        gpgcheck: no
        #mirrorlist: http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-rh
        baseurl: http://mirrors.aliyun.com/centos/$releasever/sclo/$basearch/rh/
      - name: nginx
        description: Nginx Official Yum Repo
        skip_if_unavailable: true
        gpgcheck: no
        baseurl: http://nginx.org/packages/centos/$releasever/$basearch/
      - name: harbottle               # for latest consul & kubernetes
        description: Copr repo for main owned by harbottle
        skip_if_unavailable: true
        gpgcheck: no
        baseurl: https://download.copr.fedorainfracloud.org/results/harbottle/main/epel-$releasever-$basearch/
      - name: pg_probackup            # for pg_probackup
        description: PG_PROBACKUP Centos packages for PostgresPro Standard and Enterprise - $basearch
        skip_if_unavailable: true
        gpgcheck: no
        baseurl: https://repo.postgrespro.ru/pg_probackup-forks/rpm/latest/centos-$releasever-$basearch
      - name: docker-ce               # for latest docker
        description: Docker CE Stable - $basearch
        skip_if_unavailable: true
        gpgcheck: no
        baseurl:
          - https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable
          - https://download.docker.com/linux/centos/$releasever/$basearch/stable

    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