霞的云原生之旅: 部署高可用数据库集群

集群高可用读写分, 同步主备

说明

本文是根据Pigsty开源库进行的数据库配置

先决条件

  1. 系统环境要求和缺陷 参考 pigsty.cc/doc/#/zh/IN...
代码 OS发行版 局限性
EL7 RHEL7 / CentOS7 PG16, supabase, pgml, pg_graphql, pg_net 不可用
EL8 RHEL8 / Rocky8 / Alma8 / Anolis8 EL功能基准
EL9 RHEL9 / Rocky9 / Alma9 pgxnclient缺失,perf 依赖冲突
D11 Debian 11 (bullseye) supabase,pgml, RDKit 不可用
D12 Debian 12 (bookworm) supabase, pgml 不可用
U20 Ubuntu 20.04 (focal) supabase, PostGIS3, RDKit, pgml 不可用
U22 Ubuntu 22.04 (jammy) DEB功能基准 (supabase不可用)
  1. 机器配置 机器配置的要求最小是2G2C配置, 本文使用以下配置安装:
OS发行版 IP CPU Memory
Ubuntu 22.04 192.168.2.152 16C 32G
Ubuntu 22.04 192.168.2.101 16C 32G
Ubuntu 22.04 192.168.2.102 16C 32G

下载

下载源码包

shell 复制代码
bash -c "$(curl -fsSL https://get.pigsty.cc/latest)" 

node/infra/pgsql 软件包安装过程中,可能会发生轻微的 rpm 冲突。 解决此问题的最简单方法是在不使用脱机包的情况下进行安装,脱机包将直接从上游存储库下载。 如果只有少数有问题的 RPM/DEB 包,您可以使用一个技巧来快速修复 yum/apt 存储库:

shell 复制代码
rm -rf /www/pigsty/repo_complete    # delete the repo_complete flag file to mark this repo incomplete
rm -rf SomeBrokenPackages           # delete problematic RPM/DEB packages
./infra.yml -t repo_upstream        # write upstream repos. you can also use /etc/yum.repos.d/backup/*
./infra.yml -t repo_pkg             # download rpms according to your current OS

然后重新安装:

shell 复制代码
./install.yml

准备源码包

分两种情况:

  1. 离线安装包
  2. 在线安装

离线包

下载

shell 复制代码
VERSION=v2.5.1
cd /tmp && wget https://get.pigsty.cc/${VERSION}/pigsty-pkg-${VERSION}.ubuntu22.x86_64.tgz

安装ansible 可用,并尽最大努力使用离线软件包搭建本地软件源

shell 复制代码
./boostrap -p <离线包路径>

在线安装

Bootstrap 的详细逻辑如下:

  1. 检查安装的前提条件是否满足

  2. 检查本地离线安装包(/tmp/pkg.tgz)是否存在?

  • 是 -> 解压到 /www/pigsty 并配置本地FS软件源启用它。
  • 否 -> 进一步决定是否从互联网下载离线软件包?
    • 是 -> 从 GitHub 或 CDN 下载离线软件包并解压
    • 否 -> 是否添加操作系统基础的上游源地址以供从互联网下载 ?
      • 是 -> 根据地区与操作系统版本写入对应的上游源:/etc/yum.repos.d//etc/apt/source.list.d
      • 否 -> 用户自己搞定,或者当前系统的默认配置就带有 Ansible
    • 现在,我们有了一个可用的本地软件源,可用来安装 Pigsty 所需的软件包,特别是 Ansible。
    • 优先级顺序: 本地的 pkg.tgz > 下载的 pkg.tgz > 原始上游 > 默认配置
  1. 从上一步配置的软件源中,安装一些基本的重要软件,不同版本的软件略有不同:
  • el7: ansible createrepo_c unzip wget yum-utils sshpass EL7: ansible createrepo_c unzip wget yum-utils sshpass
  • el8: ansible python3.11-jmespath createrepo_c unzip wget dnf-utils sshpass modulemd-tools EL8: ansible python3.11-jmespath createrepo_c unzip wget dnf-utils sshpass modulemd-tools
  • el9: ansible python3.11-jmespath createrepo_c unzip wget dnf-utils sshpass modulemd-tools EL9: ansible python3.11-jmespath createrepo_c unzip wget dnf-utils sshpass modulemd-tools
  • ubuntu/debian: ansible python3-jmespath dpkg-dev unzip wget sshpass acl Ubuntu/Debian的: ansible python3-jmespath dpkg-dev unzip wget sshpass acl
  1. 检查 ansible 是否成功安装。
shell 复制代码
./boostrap -y

该操作会将离线包默认是/tmp/pkg.tgz,通常不需修改

配置

单台实例

高可用

主节点必须是可以直接通过ssh访问从节点的,如果需要密码, 则需要添加如下, 修改以下命令替换为你的物理机参数 示例:

shell 复制代码
export SSH_FILE_PATH=~/.ssh/id_rsa.pub
export HOST_MASTER="192.168.2.152"
export HOST_NODE1="192.168.2.101"
export HOST_NODE2="192.168.2.102"
shell 复制代码
cat $SSH_FILE_PATH | ssh root@$HOST_NODE1 'cat >> ~/.ssh/authorized_keys'
cat $SSH_FILE_PATH | ssh root@$HOST_NODE2 'cat >> ~/.ssh/authorized_keys'

配置信息:

  1. 部署grafana,prometheus,alertmanager,blackbox,loki基础设施模块在三台机器中
  2. 3个etcd节点组成的etcd集群
  3. 3个Postgres节点组成的Postgres高可用集群, 使用同步主备,即在主节点写的同时同步写到从节点数据库中,
  4. 3主 x 3从 组成的redis原生高可用集群
  5. nginx_port的http端口为5011,https为5443

集群信息,在182行开始编辑这些账密, 这是默认值: pg-master: 账号: lisa 密码: msdnmm

pg-replication 账号: lisa 密码: msdnmm

redis: 账号: 密码: 263393

grafana: 账号: admin 密码: msdnmm

pg_monitor: 账号: dbuser_monitor 密码: msdnmm

haproxy: 账号: admin 密码: msdnmm

这个模板必须存放在 ~/pigsty/files/pigsty/ 中, 默认就是从这里读取

cat > ~/pigsty/files/pigsty/pg-config.yaml <<EOF

all: children:

yaml 复制代码
# infra cluster for proxy, monitor, alert, etc..
infra:
  hosts:
    10.10.10.10: { infra_seq: 1 }
    $HOST_NODE1: { infra_seq: 2 }
    $HOST_NODE2: { infra_seq: 3 }

# etcd cluster for ha postgres
# https://pigsty.cc/doc/#/zh/ETCD
etcd:
  hosts:
    10.10.10.10: { etcd_seq: 1 } # etcd_seq (etcd实例号)是必须指定的身份参数
    NODE: { etcd_seq: 2 } # 实例号是正整数,一般从 0 或 1 开始依次分配
    $HOST_NODE2: { etcd_seq: 3 } # 实例号应当终生不可变,一旦分配就不再回收使用。
  vars: # 集群层面的参数
    etcd_cluster: etcd    # 默认情况下,etcd集群名就叫 etcd, 除非您想要部署多套 etcd 集群,否则不要改这个名字
    etcd_safeguard: false # 是否打开 etcd 的防误删安全保险? 在生产环境初始化完成后,可以考虑打开这个选项,避免误删。
    etcd_clean: true      # 在初始化过程中,是否强制移除现有的 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:
    10.10.10.10: { pg_seq: 1, pg_role: primary }
    $HOST_NODE1: { pg_seq: 2, pg_role: replica }
    $HOST_NODE2: { pg_seq: 3, pg_role: replica }
  vars:
    pg_cluster: pg-meta
    pg_conf: crit.yml   # <--- 使用 crit 模板 同步备库
    pg_databases: [ { name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [ pigsty ] ,extensions: [{name: postgis, schema: public}] } ]
    pg_users:
      - { name: lisa ,password: 263393   ,pgbouncer: true ,roles: [ dbrole_admin ]    ,comment: pigsty admin user }
      - { 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 }
    pg_libs: 'pg_stat_statements, auto_explain' # add extra extensions to shared_preload_libraries
    node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ] # make a full backup every 1am

#----------------------------------#
# redis ms, sentinel, native cluster
#----------------------------------#
redis-test: # redis 原生集群: 3主 x 3从
  hosts:
    $HOST_NODE1: { redis_node: 1 ,redis_instances: { 6380: { } ,6381: { } ,6382: { } } }
    $HOST_NODE2: { redis_node: 2 ,redis_instances: { 6380: { } ,6381: { } ,6382: { } } }
  vars: { redis_cluster: redis-native-cluster ,redis_password: '263393' ,redis_mode: cluster, redis_max_memory: 32MB }

vars: # global parameters version: v2.5.1 # pigsty version string admin_ip: 10.10.10.10 # 管理节点的 IP 地址,该节点只有一个值, 为控制节点的IP. 默认为占位符 IP 地址:10.10.10.10 region: default # upstream mirror region: default,china,europe

yaml 复制代码
infra_portal:                     # domain names and upstream servers
  # 参考: https://doc.pigsty.cc/#/zh/PARAM?id=nginx
  # 每个记录包含三个子部分:name 作为键,代表组件名称,外部访问域名和内部TCP端口。 值包含 domain 和 endpoint,以及其他可选字段:
  # 默认记录的 name 定义是固定的,其他模块会引用它,所以不要修改默认条目名称。
  # domain 是用于外部访问此上游服务器的域名。域名将被添加到Nginx SSL证书的 SAN 字段中。
  # endpoint 是一个可以内部访问的TCP端口。如果包含 ${admin_ip} ,则将在运行时被实际的 admin_ip 替换。
  # 如果 websocket 设置为 true,http协议将自动为 Websocket 连接升级。
  # 如果给定了 scheme(http 或 https),它将被用作 proxy_pass URL的一部分。
  home         : { domain: h.rcc.com }
  grafana      : { domain: g.rcc.com , endpoint: "${admin_ip}:3000", websocket: true }
  prometheus   : { domain: p.rcc.com , endpoint: "${admin_ip}:9090" }
  alertmanager : { domain: a.rcc.com , endpoint: "${admin_ip}:9093" }
  blackbox     : { endpoint: "${admin_ip}:9115" }
  loki         : { endpoint: "${admin_ip}:3100" }
  #minio        : { domain: sss.pigsty  ,endpoint: "${admin_ip}:9001" ,scheme: https ,websocket: true }

#-----------------------------------------------------------------
# NGINX
#-----------------------------------------------------------------
nginx_enabled: true               # 是否在当前的 Infra 节点上启用 Nginx?默认值为: true。
nginx_exporter_enabled: true      # 在此基础设施节点上启用 nginx_exporter ?默认值为: true 如果禁用此选项,还会一并禁用 /nginx 健康检查 stub,当您安装使用的 Nginx 版本不支持此功能是可以考虑关闭此开关
# Nginx 的 SSL工作模式?有三种选择:disable , enable , enforce, 默认值为 enable,即启用 SSL,但不强制使用。
# disable:只监听 nginx_port 指定的端口服务 HTTP 请求。
# enable:同时会监听 nginx_ssl_port 指定的端口服务 HTTPS 请求。
# enforce:所有链接都会被渲染为默认使用 https://
nginx_sslmode: enable             # nginx ssl mode? disable,enable,enforce
# Nginx服务器静态文件目录,默认为: /www
# Nginx服务器的根目录,包含静态资源和软件仓库文件。最好不要随意修改此参数,修改时需要与 repo_home 参数保持一致。
nginx_home: /www                  # nginx content dir, `/www` by default
# Nginx 默认监听的端口(提供HTTP服务),默认为 80 端口,最好不要修改这个参数。
# 当您的服务器 80 端口被占用时,可以考虑修改此参数,但是需要同时修改[repo_endpoint](https://doc.pigsty.cc/#/zh/PARAM?id=repo_endpoint) ,
# 以及 [node_repo_local_urls]() 所使用的端口并与这里保持一致
nginx_port: 5011                    # nginx listen port, 80 by default
nginx_ssl_port: 5443               # nginx ssl listen port, 443 by default
nginx_navbar: # Nginx 首页上的导航栏内容,默认值
  #  每一条记录都会被渲染为一个导航链接,链接到 Pigsty 首页的 App 下拉菜单,所有的 App 都是可选的,默认挂载在 Pigsty 默认服务器下的 http://pigsty/ 。
  # url 参数指定了 App 的 URL PATH,但是如果 URL 中包含 ${grafana} 字符串,它会被自动替换为 infra_portal 中定义的 Grafana 域名。
  # 所以您可以将一些使用 Grafana 的数据应用挂载到 Pigsty 的首页导航栏中。
  # TODO
  - { name: CA Cert ,url: '/ca.crt'   ,desc: 'pigsty self-signed ca.crt' }
  - { name: Package ,url: '/pigsty'   ,desc: 'local yum repo packages' }
  - { name: PG Logs ,url: '/logs'     ,desc: 'postgres raw csv logs' }
  - { name: Reports ,url: '/report'   ,desc: 'pgbadger summary report' }
  - { name: Explain ,url: '/pigsty/pev.html' ,desc: 'postgres explain visualizer' }
  - { name: Grafana ,url: '${grafana}.com' ,desc: 'Grafana Index' }
  - { name: Prometheus ,url: '${prometheus}.com' ,desc: 'Prometheus Index' }
  - { name: alertmanager ,url: '${alertmanager}.com' ,desc: 'alertmanager Index' }
  - { name: loki ,url: '${loki}.com' ,desc: 'loki Index' }

#================================================================#
#                         VARS: REDIS                            #
#================================================================#
redis_cluster: 'redis-native-cluster'             #<集群> # Redis数据库集群名称,必选身份参数
redis_node: 1              # <节点> Redis节点上的实例定义
redis_instances: {}        # <节点> Redis节点编号,正整数,集群内唯一,必选身份参数
redis_fs_main: /data              # Redis主数据目录,默认为 `/data`
redis_exporter_enabled: true      # Redis Exporter 是否启用?
redis_exporter_port: 9121         # Redis Exporter监听端口
redis_exporter_options: ''        # Redis Exporter命令参数
redis_safeguard: false            # 禁止抹除现存的Redis
redis_clean: true                 # 初始化Redis是否抹除现存实例
redis_rmdata: true                # 移除Redis实例时是否一并移除数据?
redis_mode: standalone            # Redis集群模式:sentinel,cluster,standalone
redis_conf: redis.conf            # Redis配置文件模板,sentinel 除外
redis_bind_address: '0.0.0.0'     # Redis监听地址,默认留空则会绑定主机IP
redis_max_memory: 1GB             # Redis可用的最大内存
# Redis内存逐出策略: 以下是可能的值
# noeviction:内存达限时不保存新值:当使用主从复制时仅适用于主库
# allkeys-lru:保持最近使用的键;删除最近最少使用的键(LRU)
# allkeys-lfu:保持频繁使用的键;删除最少频繁使用的键(LFU)
# volatile-lru:删除带有真实过期字段的最近最少使用的键
# volatile-lfu:删除带有真实过期字段的最少频繁使用的键
# allkeys-random:随机删除键以为新添加的数据腾出空间
# volatile-random:随机删除带有过期字段的键
# volatile-ttl:删除带有真实过期字段和最短剩余生存时间(TTL)值的键
redis_mem_policy: allkeys-lru
redis_password: '263393'                # Redis密码,默认留空则禁用密码
redis_rdb_save: ['1200 1']        # Redis RDB 保存指令,字符串列表,空数组则禁用RDB
redis_aof_enabled: false          # Redis AOF 是否启用?
redis_rename_commands: {}         # Redis危险命令重命名列表
redis_cluster_replicas: 1         # Redis原生集群中每个主库配几个从库?

#-----------------------------------------------------------------
# REPO
#-----------------------------------------------------------------
# 其他节点访问此仓库时使用的端点,默认值为:http://${admin_ip}:80。
#
#Pigsty 默认会在基础设施节点 80/443 端口启动 Nginx,对外提供本地软件源(静态文件)服务。
#
#如果您修改了 nginx_port 与 nginx_ssl_port,或者使用了不同于中控节点的基础设施节点,请相应调整此参数。
#
#如果您使用了域名,可以在 node_default_etc_hosts、node_etc_hosts、或者 dns_records 中添加解析。
# access point to this repo by domain or ip:port
repo_endpoint: http://${admin_ip}:5011
# if disabled, original /etc/yum.repos.d/ will be kept
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

# if you want to use minio as backup repo instead of local fs, uncomment minio related lines
# don't forget to configure pgbackrest_repo and change credentials there!
#pgbackrest_method: minio
#minio_users:
#  - { access_key: dba , secret_key: S3User.DBA, policy: consoleAdmin }
#  - { access_key: pgbackrest , secret_key: S3User.Backup, policy: readwrite }

# WARNING: CHANGE THESE PASSWORDS
#grafana_admin_username: admin
grafana_admin_password: msdnmm
#pg_admin_username: dbuser_dba
pg_admin_password: msdnmm
#pg_monitor_username: dbuser_monitor
pg_monitor_password: msdnmm
#pg_replication_username: replicator
pg_replication_password: msdnmm
#patroni_username: postgres
patroni_password: msdnmm
#haproxy_admin_username: admin
haproxy_admin_password: msdnmm

# repo_xxx are used if you want to build your own yum repo from upstream directly
repo_modules: node,pgsql,infra,minio,redis    # which repo modules are installed in repo_upstream

repo_upstream:                    # where to download (ubuntu version)
  - { name: base        ,description: 'Ubuntu Basic'     ,module: node  ,releases: [20,22] ,baseurl: { default: 'https://mirrors.edge.kernel.org/${distro_name}/ ${distro_codename}           main universe multiverse restricted' ,china: 'https://mirrors.aliyun.com/${distro_name}/ ${distro_codename}           main restricted universe multiverse' }}
  - { name: updates     ,description: 'Ubuntu Updates'   ,module: node  ,releases: [20,22] ,baseurl: { default: 'https://mirrors.edge.kernel.org/${distro_name}/ ${distro_codename}-backports main restricted universe multiverse' ,china: 'https://mirrors.aliyun.com/${distro_name}/ ${distro_codename}-updates   main restricted universe multiverse' }}
  - { name: backports   ,description: 'Ubuntu Backports' ,module: node  ,releases: [20,22] ,baseurl: { default: 'https://mirrors.edge.kernel.org/${distro_name}/ ${distro_codename}-security  main restricted universe multiverse' ,china: 'https://mirrors.aliyun.com/${distro_name}/ ${distro_codename}-backports main restricted universe multiverse' }}
  - { name: security    ,description: 'Ubuntu Security'  ,module: node  ,releases: [20,22] ,baseurl: { default: 'https://mirrors.edge.kernel.org/${distro_name}/ ${distro_codename}-updates   main restricted universe multiverse' ,china: 'https://mirrors.aliyun.com/${distro_name}/ ${distro_codename}-security  main restricted universe multiverse' }}
  - { name: haproxy     ,description: 'HAProxy'          ,module: node  ,releases: [20,22] ,baseurl: { default: 'https://ppa.launchpadcontent.net/vbernat/haproxy-2.8/${distro_name}/ ${distro_codename} main'  }}
  - { name: nginx       ,description: 'Nginx'            ,module: infra ,releases: [20,22] ,baseurl: { default: 'http://nginx.org/packages/${distro_name}/  ${distro_codename} nginx' }}

- { name: docker-ce ,description: 'Docker' ,module: infra ,releases: [20,22] ,baseurl: { default: '[download.docker.com/linux/{dis...](https://link.juejin.cn?target=https%3A%2F%2Fdownload.docker.com%2Flinux%2F%24%257Bdistro_name%257D%2F "https://download.docker.com/linux/%7Bdistro_name%7D/") <math xmlns="http://www.w3.org/1998/Math/MathML"> d i s t r o c o d e n a m e s t a b l e ′ , c h i n a : ′ h t t p s : / / m i r r o r s . t u n a . t s i n g h u a . e d u . c n / d o c k e r − c e / l i n u x / {distro_codename} stable' ,china: 'https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ </math>distrocodenamestable′,china:′https://mirrors.tuna.tsinghua.edu.cn/docker−ce/linux/{distro_name}/ ${distro_codename} stable' }}

yaml 复制代码
  - { name: grafana     ,description: 'Grafana'          ,module: infra ,releases: [20,22] ,baseurl: { default: 'https://apt.grafana.com stable main' ,china: 'https://mirrors.tuna.tsinghua.edu.cn/grafana/apt/ stable main' }}
  - { name: infra       ,description: 'Pigsty Infra'     ,module: infra ,releases: [20,22] ,baseurl: { default: 'https://repo.pigsty.cc/deb/infra/amd64/ ./' }} # prometheus-deb packages
  - { name: pgdg        ,description: 'PGDG'             ,module: pgsql ,releases: [20,22] ,baseurl: { default: 'http://apt.postgresql.org/pub/repos/apt/ ${distro_codename}-pgdg main' ,china: 'https://mirrors.tuna.tsinghua.edu.cn/postgresql/repos/apt/ ${distro_codename}-pgdg main' }}
  - { name: citus       ,description: 'Citus'            ,module: pgsql ,releases: [20,22] ,baseurl: { default: 'https://packagecloud.io/citusdata/community/${distro_name}/ ${distro_codename} main'   }}
  - { name: timescaledb ,description: 'Timescaledb'      ,module: pgsql ,releases: [20,22] ,baseurl: { default: 'https://packagecloud.io/timescale/timescaledb/${distro_name}/ ${distro_codename} main' }}
  - { name: pgsql       ,description: 'Pigsty PgSQL'     ,module: pgsql ,releases: [20,22] ,baseurl: { default: 'https://repo.pigsty.cc/deb/pgsql/${distro_codename}.amd64/ ./' }}
  - { name: redis       ,description: 'Pigsty Redis'     ,module: redis ,releases: [20,22] ,baseurl: { default: 'https://packages.redis.io/deb ${distro_codename} main' }}
  - { name: minio       ,description: 'Pigsty MinIO'     ,module: minio ,releases: [20,22] ,baseurl: { default: 'https://repo.pigsty.cc/deb/minio/amd64/ ./' ,europe: 'https://packagecloud.io/pigsty/minio/ubuntu/ jammy main' }}
repo_packages:                    # which packages to be included
  - ansible python3 python3-pip python3-venv python3-jmespath dpkg-dev
  - grafana loki logcli promtail prometheus2 alertmanager pushgateway blackbox-exporter
  - node-exporter pg-exporter nginx-exporter redis-exporter mysqld-exporter mongodb-exporter kafka-exporter keepalived-exporter
  - lz4 unzip bzip2 zlib1g pv jq git ncdu make patch bash lsof wget uuid tuned nvme-cli numactl sysstat iotop htop rsync tcpdump linux-tools-generic
  - netcat socat ftp lrzsz net-tools ipvsadm dnsutils telnet ca-certificates openssl openssh-client libreadline-dev vim-tiny keepalived acl
  - redis minio mcli etcd haproxy vip-manager nginx sshpass chrony dnsmasq docker-ce docker-compose-plugin ferretdb sealos
  - patroni pgbouncer pgbackrest pgbadger pgloader pg-activity pgloader pg-activity postgresql-filedump pgxnclient pgformatter
  - postgresql-client-16 postgresql-16 postgresql-server-dev-16 postgresql-plpython3-16 postgresql-plperl-16 postgresql-pltcl-16 postgresql-16-wal2json postgresql-16-repack
  - postgresql-client-15 postgresql-15 postgresql-server-dev-15 postgresql-plpython3-15 postgresql-plperl-15 postgresql-pltcl-15 postgresql-15-wal2json postgresql-15-repack
  - postgresql-client-14 postgresql-14 postgresql-server-dev-14 postgresql-plpython3-14 postgresql-plperl-14 postgresql-pltcl-14 postgresql-14-wal2json postgresql-14-repack
  - postgresql-client-13 postgresql-13 postgresql-server-dev-13 postgresql-plpython3-13 postgresql-plperl-13 postgresql-pltcl-13 postgresql-13-wal2json postgresql-13-repack
  - postgresql-client-12 postgresql-12 postgresql-server-dev-12 postgresql-plpython3-12 postgresql-plperl-12 postgresql-pltcl-12 postgresql-12-wal2json postgresql-12-repack
  - postgresql-15-postgis-3 postgresql-15-postgis-3-scripts postgresql-15-citus-12.1 postgresql-15-pgvector timescaledb-2-postgresql-15 pg-graphql pg-net postgresql-pgml-15  # pgml-15 not available in ubuntu20
  - postgresql-16-postgis-3 postgresql-16-postgis-3-scripts postgresql-16-citus-12.1 postgresql-16-pgvector timescaledb-2-postgresql-16
  - postgresql-15-credcheck postgresql-15-cron postgresql-15-debversion postgresql-15-decoderbufs postgresql-15-dirtyread postgresql-15-extra-window-functions postgresql-15-first-last-agg
  - postgresql-15-hll postgresql-15-hypopg postgresql-15-icu-ext postgresql-15-ip4r postgresql-15-jsquery postgresql-15-londiste-sql postgresql-15-mimeo postgresql-15-mysql-fdw postgresql-15-numeral
  - postgresql-15-ogr-fdw postgresql-15-omnidb postgresql-15-oracle-fdw postgresql-15-orafce postgresql-15-partman postgresql-15-periods postgresql-15-pg-catcheck postgresql-15-pg-checksums
  - postgresql-15-pg-fact-loader postgresql-15-pg-qualstats postgresql-15-pg-stat-kcache postgresql-15-pg-track-settings postgresql-15-pg-wait-sampling postgresql-15-pgaudit postgresql-15-pgauditlogtofile
  - postgresql-15-pgextwlist postgresql-15-pgfincore postgresql-15-pgl-ddl-deploy postgresql-15-pglogical postgresql-15-pglogical-ticker postgresql-15-pgmemcache postgresql-15-pgmp
  - postgresql-15-pgpcre postgresql-15-pgq-node postgresql-15-pgq3 postgresql-15-pgsphere postgresql-15-pgtap postgresql-15-pldebugger postgresql-15-pllua postgresql-15-plpgsql-check
  - postgresql-15-plprofiler postgresql-15-plproxy postgresql-15-plsh postgresql-15-pointcloud postgresql-15-powa postgresql-15-prefix postgresql-15-preprepare postgresql-15-prioritize
  - postgresql-15-q3c postgresql-15-rational postgresql-15-rum postgresql-15-semver postgresql-15-set-user postgresql-15-show-plans postgresql-15-similarity postgresql-15-squeeze
  - postgresql-15-tablelog postgresql-15-tdigest postgresql-15-tds-fdw postgresql-15-toastinfo postgresql-15-topn postgresql-15-unit postgresql-15-rdkit # 15-rdkit not available in ubuntu20
pg_dbsu_uid: 543
node_repo_local_urls:
  - 'deb [trusted=yes] http://${admin_ip}:5011/pigsty ./'
infra_packages:                   # packages to be installed on infra nodes
  - grafana,loki,logcli,promtail,prometheus2,alertmanager,pushgateway,blackbox-exporter
  - node-exporter,blackbox-exporter,nginx-exporter,redis-exporter,pg-exporter
  - nginx,dnsmasq,ansible,postgresql-client-16,redis,mcli,etcd,python3-requests
node_default_packages:            # default node packages to be installed on ubuntu22 node
  - lz4,unzip,bzip2,zlib1g,pv,jq,git,ncdu,make,patch,bash,lsof,wget,uuid,tuned,linux-tools-generic,nvme-cli,numactl,sysstat,iotop,htop,rsync,tcpdump,acl,python3,python3-pip
  - netcat,socat,ftp,lrzsz,net-tools,ipvsadm,dnsutils,telnet,ca-certificates,openssl,openssh-client,libreadline-dev,vim-tiny,keepalived,node-exporter,etcd,haproxy
pg_packages:                      # pg packages to be installed, `${pg_version}` will be replaced
  - postgresql-*-${pg_version}
  - patroni pgbouncer pgbackrest pg-exporter pgbadger vip-manager
pg_extensions:                    # pg extensions to be installed, `${pg_version}` will be replaced
  - postgresql-${pg_version}-wal2json postgresql-${pg_version}-repack
  - timescaledb-2-postgresql-${pg_version} postgresql-${pg_version}-pgvector
  - postgresql-${pg_version}-postgis-3 # postgis-3 broken in ubuntu20

... EOF

生成最终的配置文件: 参数:

  • -m|--mode: 直接指定配置模板 : (auto|demo|sec|citus|el8|el9|prod...)
  • -i|--ip: 用于替换IP地址占位符 10.10.10.10 的IP地址,即当前主机的首要内网IP地址(特别是在有多块网卡与多个IP地址时)
  • -r|--region: 用于指定上游源的区域: (default|china|europe)
  • -n|--non-interactive: 直接使用命令行参数提供首要IP地址,跳过交互式向导。 当使用 -n|--non-interactive 参数时,您需要使用 -i|--ip 指定当前节点的首要IP地址,特别是在有多块网卡与多个IP地址时
shell 复制代码
cd ~/pigsty
./configure  -r china -i $HOST_MASTER -m pg-config

安装: 这个运行过程漫长, 与你机器配置息息相关

shell 复制代码
cd ~/pigsty
./install.yml

监控外部PG

yaml 复制代码
pg_exporters: # list all remote instances here, alloc a unique unused local port as k 
	20001: { pg_cluster: pg-foo, pg_seq: 1, pg_host: 10.10.10.10 } 
	20004: { pg_cluster: pg-foo, pg_seq: 2, pg_host: 10.10.10.11 } 
	20002: { pg_cluster: pg-bar, pg_seq: 1, pg_host: 10.10.10.12 } 
	20003: { pg_cluster: pg-bar, pg_seq: 1, pg_host: 10.10.10.13 }

删除

shell 复制代码
rm -rf /www/pigsty # www的包
rm -rf /etc/apt/sources.list.d/pigsty.list #源
rm -rf /tmp/pgbackrest
rm -rf /tmp/pigsty-v2.5.1.tgz # 软件包
rm -rf ~/pigsty # 源码包
rm -rf /var/lib/postgresql/
systemctl stop postgresql
rm -rf /etc/init.d/postgresql
rm -rf /run/systemd/generator.late/postgresql.service

资料

  1. doc.pigsty.cc/#/INSTALL?i...
  2. pigsty.cc/zh/docs/ref...
  3. doc.pigsty.cc/#/FAQ
相关推荐
小爬虫程序猿3 分钟前
如何利用Python解析API返回的数据结构?
数据结构·数据库·python
wowocpp1 小时前
查看 磁盘文件系统格式 linux ubuntu blkid ext4
linux·数据库·ubuntu
_.Switch4 小时前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
心灵彼岸-诗和远方6 小时前
DevOps业务价值流:架构设计最佳实践
运维·产品经理·devops
Ai 编码助手7 小时前
MySQL中distinct与group by之间的性能进行比较
数据库·mysql
陈燚_重生之又为程序员7 小时前
基于梧桐数据库的实时数据分析解决方案
数据库·数据挖掘·数据分析
caridle7 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
白云如幻7 小时前
MySQL排序查询
数据库·mysql
萧鼎7 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
^velpro^7 小时前
数据库连接池的创建
java·开发语言·数据库