repmgr+PostgreSQL故障自动转移
镜像制作
Dockerfile
# 使用 CentOS 7 作为基础镜像
FROM centos:7
# 设置环境变量
ENV PG_MODE=primary \
PG_USER=postgres \
PG_PASSWORD=postgres \
NODE_ROLE=master \
MASTER_NAME=master \
MASTER_PORT=5432 \
RE_USER=repmgr \
NODE_ID=1 \
#NET_SEGMENT=192.168.0 \
NODE_NAME=master1 \
PG_DATADIR=/home/postgres/pgdata \
PG_REPMGR_CONF=/home/postgres/repmgr.conf \
PG_BINDIR=/usr/pgsql-12/bin \
PG_CONFIGDIR=/home/postgres/pgdata/postgresql.conf \
PRIORITY=1 \
CONNINFO_HOST=master \
CONNINFO_PORT=5432 \
PATH="/usr/pgsql-12/bin:${PATH}"
# 创建postgres用户和组
RUN groupadd -r postgres \
&& useradd -r -g postgres postgres
# 安装所需的软件和工具
RUN yum -y install epel-release \
&& yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm \
&& yum -y install postgresql12 postgresql12-server postgresql12-contrib repmgr12 \
&& yum -y install which sudo iproute hostname \
&& yum -y clean all
# 创建脚本存放目录
RUN mkdir -p /home/runtime/ \
&& chown -R postgres:postgres /home/runtime/
# 将 functions 文件和 entrypoint.sh 添加到镜像中
#COPY functions /home/postgres/runtime/functions
COPY functions /home/runtime/functions
#COPY entrypoint.sh /home/postgres/runtime/entrypoint.sh
COPY entrypoint.sh /home/runtime/entrypoint.sh
# 修改文件权限与属性
RUN mkdir -p /home/postgres/pgdata \
&& chown -R postgres:postgres /home/postgres \
#&& chown -R postgres:postgres /home/postgres/pgdata \
#&& chown 777 /home/postgres/pgdata \
#&& chmod +x /home/postgres/runtime/entrypoint.sh \
&& chmod +x /home/runtime/entrypoint.sh \
#&& chmod +x /home/postgres/runtime/functions
&& chmod +x /home/runtime/functions
#&& usermod -a -G root postgres \
#&& chmod 770 /home/postgres
RUN echo 'postgres ALL=(ALL) NOPASSWD: /bin/chown' >> /etc/sudoers
# 切换到 postgres 用户
USER postgres
# 初始化 PostgreSQL 数据目录
#RUN initdb -D ${PG_DATADIR} -U${PG_USER}
# 暴露 PostgreSQL 端口
EXPOSE 5432
# 设置启动脚本
#ENTRYPOINT ["/home/postgres/runtime/entrypoint.sh"]
ENTRYPOINT ["/home/runtime/entrypoint.sh"]
生成镜像
在dockerfile文件所在目录执行
docker build -t "centos7-pgsql-repmgr" .