马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
1,该脚本在Ubuntu 20 下做过细致的测试,pg17+ etcd v3.6.5+ patroni 4.1.3,可极大简化patroni 的安装过程,全程自动完成patroni 的搭建
2,欢迎试用,有发起大概标题请留言
0,情况
1,先编译好PostgreSQL服务,然后克制相干实例,由于patroni初始化的时间会自动重新初始化数据
2,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
改脚本不必要单独实验,加载再背面两个脚本里
2,etcd集群安装脚本 01_install_etcd.sh
依次在 ubuntu11,ubuntu12,ubuntu13上实验,创建etcd集群
[code]#!/bin/bashset -euo pipefail# 加载设置source ./00_cluster_config.shecho "=== Installing etcd on ${CURRENT_NODE_NAME} ==="# 1. 创建etcd工作目次并切换echo "Step 1: Creating etcd working directory..."mkdir -p /usr/local/etcdcd /usr/local/etcd# 2. 下载etcdecho "Step 2: Downloading etcd..."if [ ! -f "etcd-${ETCD_VERSION}-linux-amd64.tar.gz" ]; then wget -q https://github.com/etcd-io/etcd/releases/download/${ETCD_VERSION}/etcd-${ETCD_VERSION}-linux-amd64.tar.gzfi# 3. 解压etcdecho "Step 3: Extracting etcd..."# 如果解压目次已存在,先删除if [ -d "etcd-${ETCD_VERSION}-linux-amd64" ]; then echo "Removing existing etcd directory..." rm -rf "etcd-${ETCD_VERSION}-linux-amd64"fitar -xzf etcd-${ETCD_VERSION}-linux-amd64.tar.gz# 4. 删除已存在的二进制文件或软链接echo "Step 4: Removing existing etcd binaries..."rm -f /usr/bin/etcd /usr/bin/etcdctl# 5. 复制二进制文件到体系路径echo "Step 5: Copying etcd binaries to /usr/bin..."cp etcd-${ETCD_VERSION}-linux-amd64/etcd /usr/bin/etcdcp etcd-${ETCD_VERSION}-linux-amd64/etcdctl /usr/bin/etcdctlchmod +x /usr/bin/etcd /usr/bin/etcdctl# 6. 创建数据目次echo "Step 6: Creating data directory..."mkdir -p ${ETCD_DATA_DIR}# 7. 天生etcd设置文件echo "Step 7: Generating etcd configuration..."mkdir -p ${ETCD_CONF_DIR}cat > ${ETCD_CONF_DIR}/etcd.conf /dev/null; then echo "ERROR: Patroni service is currently running on this node." echo " lease stop Patroni service before reinstalling:" echo " systemctl stop patroni" echo " systemctl disable patroni" echo "Exiting installation to avoid conflicts." exit 1fi# 查抄数据目次是否存在且非空if [ -d "${PG_DATA_DIR}" ] && [ "$(ls -A ${PG_DATA_DIR} 2>/dev/null)" ]; then echo "WARNING: Data directory ${PG_DATA_DIR} is not empty but Patroni is not running." read -p "Do you want to clear this directory and continue installation? (yes/no): " choice if [ "$choice" = "yes" ] || [ "$choice" = "y" ]; then echo "Cleaning up data directory contents..." rm -rf ${PG_DATA_DIR}/* rm -rf ${PG_DATA_DIR}/.[!.]* 2>/dev/null || true echo "Data directory contents cleared successfully." else echo "Exiting installation." exit 1 fielse echo "Data directory is empty or does not exist. No cleanup needed."fi# 1. 安装依靠包echo "Step 1: Installing dependencies..."apt updateapt install -y python3 python3-pip libpq-dev gcc# 2. 先升级须要的Python包echo "Step 2: Upgrading Python packages..."pip3 install --upgrade pip setuptools wheel importlib_metadata# 3. 安装Patroniecho "Step 3: Installing Patroni..."pip3 install psycopg2-binarypip3 install patroni[etcd]# 4. 创建目次echo "Step 4: Creating directories..."mkdir -p ${PATRONI_DIR}mkdir -p ${PG_WAL_ARCH_DIR}chown -R postgres:postgres ${PG_BASE}chmod 700 ${PATRONI_DIR}# 授权数据目次,测试过过程中发现只有一台实例patroni无法拉起PostgreSQL进程,授权之后就可以了,希奇,以是这里再次授权chmod 0700 ${PG_DATA_DIR}chown -R postgres:postgres ${PG_DATA_DIR}chmod 0700 ${PG_WAL_ARCH_DIR}chown -R postgres:postgres ${PG_WAL_ARCH_DIR}# 5. 天生Patroni设置文件echo "Step 5: Generating Patroni configuration..."cat > ${PATRONI_CONFIG_FILE} |