Ubuntu 20 环境下 patroni 自动化安装,一分钟快速搭建 patroni 集群
1,前提是要对patroni的架构和工作原理有着非常清晰的认识,至少手动搭建过3次以上,自动化只是手段不是目的
2,该脚本在Ubuntu 20 下做过详尽的测试,pg17+ etcd v3.6.5+ patroni 4.1.3,可极大简化patroni 的安装过程,全程自动完成patroni 的搭建
3,欢迎试用,有建议或者问题请留言
0,环境
1,先编译好PostgreSQL服务,然后停止相关实例,因为patroni初始化的时候会自动重新初始化数据
2,Ubuntu 20,PostgreSQL 17.6,etcd v3.6.5,patroni 4.1.3,patroni启动的是会创建数据目录,因此需要关闭各节点已有的PostgreSQL实例(如果有)。
3,先自动安装etcd集群,安装脚本依次再三台机器上执行,然后然后patroni集群,同样是安装脚本依次再三台机器上执行。
该脚本可以在一分钟之内可以搭建一个完整的patroni集群,展开数据库的下一步工作,而不是浪费大量时间在环境的搭建上。
root@ubuntu11:/usr/local/pg_install_package# cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 ubuntu11
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.152.121 ubuntu11
192.168.152.122 ubuntu12
192.168.152.123 ubuntu13
192.168.152.124 ubuntu14
1,环境配置脚本:00_cluster_config.sh
该脚本不需要单独执行,需要修改各个路径等信息,比较简单不详述,改脚本会加载再后面两个脚本里
#!/bin/bash
# 00_cluster_config.sh - 集群全局配置文件
# 此文件在所有节点上内容相同
# ==================== 集群节点信息 ====================
# 节点1
export NODE1_NAME="ubuntu11"
export NODE1_IP="192.168.152.121"
# 节点2
export NODE2_NAME="ubuntu12"
export NODE2_IP="192.168.152.122"
# 节点3
export NODE3_NAME="ubuntu13"
export NODE3_IP="192.168.152.123"
# 当前节点名称(在每个节点上手动设置或自动检测)
# 方法1: 自动检测主机名
export CURRENT_NODE_NAME=$(hostname)
# 方法2: 手动设置(取消注释并修改)
# export CURRENT_NODE_NAME="ubuntu11"
# 根据当前节点名获取IP
case ${CURRENT_NODE_NAME} in
ubuntu11)
export CURRENT_NODE_IP="${NODE1_IP}"
export ETCD_NAME="etcd01"
;;
ubuntu12)
export CURRENT_NODE_IP="${NODE2_IP}"
export ETCD_NAME="etcd02"
;;
ubuntu13)
export CURRENT_NODE_IP="${NODE3_IP}"
export ETCD_NAME="etcd03"
;;
*)
echo "Error: Unknown node name ${CURRENT_NODE_NAME}"
exit 1
;;
esac
# ==================== 统一路径配置 ====================
# etcd相关目录
export ETCD_VERSION="v3.6.5"
export ETCD_INSTALL_DIR="/usr/local/etcd"
export ETCD_DATA_DIR="/usr/local/etcd/default"
export ETCD_CONF_DIR="/usr/local/etcd"
# PostgreSQL相关目录
export PG_BASE="/usr/local/pgsql17"
export PG_PORT="9000"
export PG_DATA_DIR="${PG_BASE}/pg9000/data"
export PG_BIN_DIR="${PG_BASE}/server/bin"
export PG_WAL_ARCH_DIR="/usr/local/pg9000_wal_arch"
# patroni相关目录
export PATRONI_DIR="${PG_BASE}/patroni"
export PATRONI_CONFIG_FILE="${PATRONI_DIR}/patroni.yml"
export SCOPE_NAME="pg_cluster_wy_prod"
export NAMESPACE="/service/"
# ==================== PostgreSQL 统一密码 ====================
export SUPERUSER_PASSWORD="your_strong_postgres_pwd"
export REPL_PASSWORD="your_strong_repl_pwd"
export REWIND_PASSWORD="your_strong_rewind_pwd"
# ==================== etcd 集群配置 ====================
export ETCD_CLUSTER="etcd01=http://${NODE1_IP}:2380,etcd02=http://${NODE2_IP}:2380,etcd03=http://${NODE3_IP}:2380"
export ETCD_CLUSTER_TOKEN="etcd-cluster"
# ==================== 其他 ====================
export ETCDCTL_API=3
# ==================== 创建必要的目录 ====================
create_required_dirs() {
local dirs_to_create=(
"${ETCD_INSTALL_DIR}"
"${ETCD_DATA_DIR}"
"${ETCD_CONF_DIR}"
"${PG_BASE}"
"${PG_DATA_DIR}"
"${PATRONI_DIR}"
"${PG_BIN_DIR}"
"${PG_