我正在尝试用repmgr安装postgre,下面是rsult

情况是,
postgres-2升职了。postgres-3被断开了连接,但是下面是错误日志
看起来它能连接起来,但是postgres号恢复了,没有回来。4.我抛出了另一个备用,但是它所指向的主程序是旧的postgres-1,这可能是它说!running的原因,即使实际的主服务器是postgres-2,它仍然是主的。
我的问题是,我如何使其他待机,而不是每次我升职(自动由于故障等)断开。新的初选?
这是我的repmgr.conf
NET_IF=`netstat -rn | awk '/^0.0.0.0/ {thif=substr($0,74,10); print thif;} /^default.*UG/ {thif=substr($0,65,10); print thif;}'`
NET_IP=`ifconfig ${NET_IF} | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'`
HOSTNAME='postgres-'${my_node}
cat< /etc/repmgr.conf
node_id=${my_node}
node_name=$HOSTNAME
conninfo='host=${NET_IP} user=repmgr password=repmgr dbname=repmgr connect_timeout=2'
data_directory='${PGDATA}'
log_level=INFO
log_facility=STDERR
log_status_interval=300
pg_bindir='/usr/lib/postgresql/10/bin'
use_replication_slots=1
failover=automatic
promote_command='repmgr standby promote'
follow_command='repmgr standby follow -W'
EOF另外,我正在使用docker扩展官方postgres对接图像。
FROM postgres:10
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main 10" \
>> /etc/apt/sources.list.d/pgdg.list
# RUN ln -s /home/postgres/repmgr.conf /etc/repmgr.conf
RUN apt-get update && apt-get install wget -y
RUN apt-get install net-tools -y
RUN apt-get update; apt-get install -y git make postgresql-server-dev-10 libpq-dev postgresql-10-repmgr repmgr-common
#RUN wget -c https://repmgr.org/download/repmgr-5.1.tar.gz -O - | tar -xz
RUN touch /etc/repmgr.conf; \
chown postgres:postgres /etc/repmgr.conf
ENV PRIMARY_NAME=localhost
ENV REPMGR_USER=repmgr
ENV REPMGR_DB=repmgr
ENV REPMGR_PASSWORD=repmgr
COPY postgresql.replication.conf /tmp/postgresql.replication.conf
COPY scripts/*.sh /docker-entrypoint-initdb.d/最后,下面是我如何检查是否应该注册为主或备用的
PGHOST=${PRIMARY_NAME}
installed=$(psql -qAt -h ${PGHOST} repmgr -c "SELECT 1 FROM pg_tables WHERE tablename='nodes'")
if [ "${installed}" != "1" ]; then
echo "Registering as PRIMARY SERVER"
repmgr primary register
else
my_node=$(grep node_id /etc/repmgr.conf | cut -d= -f 2)
is_reg=$(psql -qAt -h ${PGHOST} repmgr -c "SELECT 1 FROM repmgr.nodes WHERE node_id=${my_node}")
if [ "${is_reg}" != "1" ] && [ ${my_node} -gt 1 ]; then
echo "Registering as STANDBY SERVER"
pg_ctl -D ${PGDATA} stop -m fast
rm -Rf ${PGDATA}/*
repmgr -h ${PRIMARY_NAME} -d repmgr standby clone --fast-checkpoint
pg_ctl -D ${PGDATA} start &
sleep 1
repmgr -h ${PRIMARY_NAME} -d repmgr standby register
fi
fi这是我对postgres.conf的更新
sed -i "s/#*\(shared_preload_libraries\).*/\1='repmgr'/;" ${PGDATA}/postgresql.conf
sed -i "s/#port = 5432/port = 5432/g" ${PGDATA}/postgresql.conf
sed -i "s/#max_wal_senders/max_wal_senders/g" ${PGDATA}/postgresql.conf
sed -i "s/#wal_level/wal_level/g" ${PGDATA}/postgresql.conf
sed -i "s/#max_replication_slots/max_replication_slots/g" ${PGDATA}/postgresql.conf
sed -i "s/#hot_standby/hot_standby/g" ${PGDATA}/postgresql.conf
sed -i "s/#archive_mode = off/archive_mode = on/g" ${PGDATA}/postgresql.conf
echo "archive_command = '/bin/true'" >> ${PGDATA}/postgresql.conf我用的是postgres:10和repmgr-5.0
希望有人能帮我这个忙。谢谢,
发布于 2020-10-06 01:10:50
我发布了这个对GitHub的响应:
到目前为止,我们还没有为在Docker中运行repmgr做任何特别的准备,所以可能会出现这样或那样的问题。
我还尝试添加这个#service_start_ -D =‘pg_ctl -D ${PGDATA} start’#service_ctl_ -D =‘pg_ctl -D ${PGDATA}停止-m’# service_reload_command='pg_ctl -D ${PGDATA} reload‘#service_ restart _command='pg_ctl -D ${PGDATA}重新启动-m’,但结果相同。
您是否尝试过添加这些项目而没有前面的#?也就是说。
service_start_command='pg_ctl -D ${PGDATA} start'
service_stop_command='pg_ctl -D ${PGDATA} stop -m fast'
service_reload_command='pg_ctl -D ${PGDATA} reload'
service_restart_command='pg_ctl -D ${PGDATA} restart -m fast'默认情况下,当为standby follow操作重新启动节点时,repmgr将停止,然后使用pg_ctl启动服务器,因为在某些环境中pg_ctl restart被证明是有问题的。然而,情况可能正好相反。无论哪种方式,我们都强烈建议在可用的地方使用OS级别的服务命令,以避免出现类似的问题(不确定这些命令在这里是否可用)。
https://dba.stackexchange.com/questions/276557
复制相似问题