暂无图片
PostgreSQL高可用之Repmgr两节点搭建及switchover操作
最近更新:2022-03-11 14:21:05

环境 虚拟机centos7.6 HA1:192.168.99.200 HA2:192.168.99.202 PostgreSQL 12.1 repmgr 5.0.0

1.源码编译安装pg12

$ su root
--创建系统用户和组
# groupadd postgres -g 1001
# useradd postgres -g 1001 -u 1001
# id postgres
uid=1001(postgres) gid=1001(postgres) groups=1001(postgres)

# cd /opt
--源文件解压目录
# mkdir -p /opt/postgresql-12.1
# chown postgres:postgres postgresql-12.1

--安装文件目录
# mkdir -p /opt/pg12
# chown -R postgres:postgres pg12
# chmod 0700 pg12
# ln -s /opt/pg12 /opt/pgsql

--数据目录
# mkdir -p /opt/data6000
# chown -R postgres:postgres data6000
# chmod 0700 data6000
 
--归档目录
# mkdir -p /opt/archive6000
# chown -R postgres:postgres archive6000
# chmod 0700 archive6000

# su postgres
$ wget https://ftp.postgresql.org/pub/source/v12.1/postgresql-12.1.tar.gz
$ chmod 750 postgresql-12.1.tar.gz
$ tar zxvf postgresql-12.1.tar.gz
$ cd postgresql-12.1/
--编译
$ ./configure --prefix=/opt/pg12 --with-pgport=6000
--安装
$ gmake world && gmake install-world

--配置开机自启动
$ su root
# cp /opt/postgresql-12.1/contrib/start-scripts/linux /etc/init.d/postgres-12
# chmod +x /etc/init.d/postgres-12
# chkconfig postgres-12 on
# vi /etc/init.d/postgres-12
#! /bin/sh

## EDIT FROM HERE
prefix=/opt/pgsql
PGDATA="/opt/data6000"
PGUSER=postgres
## STOP EDITING HERE

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON="$prefix/bin/postmaster"
PGCTL="$prefix/bin/pg_ctl"

set -e

# Only start if we can find the postmaster.
test -x $DAEMON ||
{
	echo "$DAEMON not found"
	if [ "$1" = "stop" ]
	then exit 0
	else exit 5
	fi
}

# Parse command line parameters.
case $1 in
  start)
	echo -n "Starting PostgreSQL: "
        su - $PGUSER -c "$PGCTL -D '$PGDATA' start >>/dev/null &"	
echo "ok"
	;;
  stop)
	echo -n "Stopping PostgreSQL: "
	su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s"
	echo "ok"
	;;
  restart)
	echo -n "Restarting PostgreSQL: "
    su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s"
    su - $PGUSER -c "$PGCTL -D '$PGDATA' start >>/dev/null &"	
       echo "ok"
	;;
  reload)
	echo -n "Reload PostgreSQL: "
	su - $PGUSER -c "$PGCTL reload -D '$PGDATA' -s"
	echo "ok"
	;;
  status)
	su - $PGUSER -c "$PGCTL status -D '$PGDATA'"
	;;
  *)
	# Print help
	echo "Usage: $0 {start|stop|restart|reload|status}" 1>&2
	exit 1
	;;
esac

exit 0

--删除源文件
# cd /opt
# rm -rf postgresql-12.1/

--初始化数据目录
# su postgres
$ /opt/pgsql/bin/initdb \
-D/opt/data6000 \
-EUTF8 \
-Upostgres \
-W

--服务启停
# service postgres-12 start | stop
$ /opt/pgsql/bin/pg_ctl -D /opt/data6000 start |stop

2.异步流复制搭建

$ vi postgresql.conf
listen_addresses = '*'
port=6000
wal_level=replica
archive_mode=on
archive_command='cp %p /opt/archive6000/%f'
max_wal_senders=10
wal_keep_segments=512
hot_standby=on
primary_conninfo='host=192.168.99.202 port=6000 user=repuser'

logging_collector=on
log_destination=csvlog
log_directory='/opt/data6000/pg_log'
log_filename='pg_log_%Y-%m-%d_%H%M%S.log'
log_file_mode=0600
log_truncate_on_rotation=on
log_rotation_age=1d
log_rotation_size=10MB
......