首页 > 其他分享 >postgres repmgr 自动故障转移 手动故障转移

postgres repmgr 自动故障转移 手动故障转移

时间:2024-05-10 10:44:39浏览次数:22  
标签:postgresql postgres pg16 故障 repmgrd conf repmgr 转移

yum源

rm -f /etc/yum.repos.d
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

yum clean all
yum makecache

安装部分常用工具

yum -y groupinstall "Development Tools"
yum -y install coreutils glib2 lrzsz dstat sysstat e4fsprogs xfsprogs readline-devel zlib-devel gcc gcc-c++ make 
yum -y install cmake smartmontools flex bison perl-devel perl-ExtUtils-* openldap-devel jadetex bzip2 openssl-devel 
yum -y install pam-devel libxml2-devel libxslt-devel tcl-devel lz4 clang-devel libicu-devel llvm-devel 

yum -y install systemtap-sdt-devel perl krb5-devel pam libuuid libuuid-devel systemd-devel tcl lz4-devel 

yum -y install python3 python3-devel libzstd-devel libselinux-devel pcre-devel tree psmisc  yum-utils libffi-devel ncurses-devel

创建postgres用户和组

groupadd -g 60000 postgres
useradd -u 60000 -g postgres postgres
echo "postgres" |passwd --stdin postgres

目录结构创建与权限调整

mkdir -p /postgresql/pg16 /pgdata/data /backup /arch
chmod -R 775 /postgresql
chown -R postgres:postgres /postgresql
chmod -R 775 /backup
chown -R postgres:postgres /backup
chmod -R 775 /pgdata
chown -R postgres:postgres /pgdata
chmod -R 775 /arch
chown -R postgres:postgres /arch

数据库源码编译与安装

下载地址 https://www.postgresql.org/ftp/source/v16.2/

cd /postgresql/pg16/
wget https://ftp.postgresql.org/pub/source/v16.2/postgresql-16.2.tar.gz
tar -zxvf postgresql-16.2.tar.gz
cd postgresql-16.2/
chmod +x configure
./configure --prefix=/postgresql/pg16 --with-pgport=5432 --with-openssl --with-perl  --with-blocksize=8 
make world && make install-world

更改软件目录和数据目录的所有权

chown -R postgres. /postgresql/pg16 /pgdata /backup /arch

设置环境变量

su - postgres
vi .bashrc
# 添加如下内容至.bashrc
if [ -f /etc/bashrc ]; then
 . /etc/bashrc
fi
export PATH=/postgresql/pg16/bin/:$PATH
export PGDATA=/pgdata/data
export PGDATABASE=postgres
export PGUSER=postgres
export PGPORT=6543
export PGLOCALEDIR=/postgresql/pg16/share/locale
alias pg_ctl='LD_LIBRARY_PATH=/postgresql/pg16/lib pg_ctl'





#重新编译
source ~/.bashrc

初始化主节点

su - postgres
initdb -D /pgdata/data -E UTF8 --locale=zh_CN.utf8

# 创建用户(随后根据提示输入密码)
/postgresql/pg16/bin/createuser -P -s -e postgres
/postgresql/pg16/bin/createuser -P -s -e repl

编辑pg_hba.conf文件以启用信任或scram-sha-256认证方式:

su - postgres
vi $PGDATA/pg_hba.conf
host    replication     all             192.168.0.92            trust
host    replication     all             192.168.0.93            trust
host    replication     all             192.168.0.94            trust
host    replication     all             192.168.0.95            trust

postgresql.conf

shared_preload_libraries = 'pg_stat_statements,passwordcheck,repmgr'
listen_addresses = '*'
port = 6543
wal_level = replica
wal_log_hints = on

启动服务

su - postgres
pg_ctl start

获取最新repmgr

https://www.repmgr.org/

yum install curl-devel
yum install json-c-devel



mkdir /repmgr
chown -R postgres:postgres /repmgr
su - postgres
cd /repmgr
tar -zxvf repmgr-5.4.1.tar.gz
cd repmgr-5.4.1/
./configure USE_PGXS=1 PG_CONFIG=/postgresql/pg16/bin/pg_config
make && make install

配置免密登录

su - postgres
ssh-keygen -t rsa
一路回车直到完成
--配置所有节点
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 [email protected]

创建repmgr目录

su - postgres
mkdir /postgresql/pg16/repmgr /pgdata/repmgr_log

repmgr主节点

su - postgres
mkdir /postgresql/pg16/repmgr /pgdata/repmgr_log

vim /postgresql/pg16/repmgr/repmgr.conf
注意修改ip
添加内容

# 节点标识设置
node_id = 1
node_name = pg01
# 数据库连接信息
conninfo = 'host=192.168.0.92 user=postgres dbname=repmgr port=6543 connect_timeout=2'
# 数据目录路径
data_directory = '/pgdata/data'
# PostgreSQL二进制目录路径
pg_bindir = '/postgresql/pg16/bin'
# 日志级别与日志文件位置
log_level = info
log_file = '/pgdata/repmgr_log/repmgr.log'
# 故障切换策略设定
failover = automatic
# 提升从库为新主库的命令
promote_command = '/postgresql/pg16/bin/repmgr standby promote -f /postgresql/pg16/repmgr/repmgr.conf --log-to-file'
# 从库跟随主库命令
follow_command = '/postgresql/pg16/bin/repmgr standby follow -f /postgresql/pg16/repmgr/repmgr.conf --log-to-file --upstream-node-id=%n'
# 监控历史记录存储选项
monitoring_history = true
# 监控间隔时间(秒)
monitor_interval_secs = 5
# 重连尝试次数
reconnect_attempts = 3
# 两次重连之间的间隔时间(秒)
reconnect_interval = 5
# repmgrd服务启动命令
repmgrd_service_start_command = '/postgresql/pg16/bin/repmgrd repmgrd -f /postgresql/pg16/repmgr/repmgr.conf --pid-file /tmp/repmgrd.pid'
# repmgrd服务停止命令
repmgrd_service_stop_command = 'kill cat /tmp/repmgrd.pid'

从节点配置(/postgresql/pg16/repmgr/repmgr.conf)

# 节点标识设置
node_id = 2
node_name = pg02
# 数据库连接信息
conninfo = 'host=192.168.0.93 user=postgres dbname=repmgr port=6543 connect_timeout=2'
# 数据目录路径
data_directory = '/pgdata/data'
# PostgreSQL二进制目录路径
pg_bindir = '/postgresql/pg16/bin'
# 日志级别与日志文件位置
log_level = info
log_file = '/pgdata/repmgr_log/repmgr.log'
# 故障切换策略设定
failover = automatic
# 提升从库为新主库的命令
promote_command = '/postgresql/pg16/bin/repmgr standby promote -f /postgresql/pg16/repmgr/repmgr.conf --log-to-file'
# 从库跟随主库命令
follow_command = '/postgresql/pg16/bin/repmgr standby follow -f /postgresql/pg16/repmgr/repmgr.conf --log-to-file --upstream-node-id=%n'
# 监控历史记录存储选项
monitoring_history = true
# 监控间隔时间(秒)
monitor_interval_secs = 5
# 重连尝试次数
reconnect_attempts = 3
# 两次重连之间的间隔时间(秒)
reconnect_interval = 5
# repmgrd服务启动命令
repmgrd_service_start_command = '/postgresql/pg16/bin/repmgrd repmgrd -f /postgresql/pg16/repmgr/repmgr.conf --pid-file /tmp/repmgrd.pid'
# repmgrd服务停止命令
repmgrd_service_stop_command = 'kill cat /tmp/repmgrd.pid'

添加repmgr所需要的数据库(postgre主数据库操作)

su - postgres
createdb repmgr;

repmgr注册主节点(repmgr主操作)

su - postgres
# 注册主节点
repmgr -f /postgresql/pg16/repmgr/repmgr.conf master register
# 显示集群状态信息
repmgr -f /postgresql/pg16/repmgr/repmgr.conf cluster show

从库克隆数据

su - postgres
pg_ctl stop
rm -rf /pgdata/data/
repmgr -h 192.168.0.92 --replication-user=postgres -d repmgr -D /pgdata/data -f /postgresql/pg16/repmgr/repmgr.conf standby clone --upstream-node-id=1

启动从库

pg_ctl start

注册从库到集群并验证集群状态

su - postgres
repmgr -f /postgresql/pg16/repmgr/repmgr.conf standby register -F
repmgr -f /postgresql/pg16/repmgr/repmgr.conf cluster show

repmgr守护进程(所有节点)

su - postgres
repmgr daemon start

查询repmgr守护进程(repmgrd)的状态确认其正常运行:

repmgr -f /postgresql/pg16/repmgr/repmgr.conf daemon status -v

手动故障转移

主从角色切换

repmgr -f /postgresql/pg16/repmgr/repmgr.conf standby switchover -U postgres

其他从节点从跟随新主

repmgr -f /postgresql/pg16/repmgr/repmgr.conf standby follow

原主节点重新加入集群

# 连接新主节点的数据库
# 需要先停止故障的主节点
pg_ctl stop
# 此命令会自动尝试启动并在启动过程中持续ping服务,此过程中可能会提示无法ping通服务,耐心等待即可
repmgr -f /postgresql/pg16/repmgr/repmgr.conf node rejoin -d "host=192.168.0.92 user=postgres dbname=repmgr port=6543 connect_timeout=2" --force-rewind

自动故障转移

初始化一个新的主数据库

su - postgres
initdb -D /pgdata/data -E UTF8 --locale=zh_CN.utf8

postgresql.conf添加
shared_preload_libraries = 'repmgr'


pg_ctl start

# 创建用户(随后根据提示输入密码)
/postgresql/pg16/bin/createuser -P -s -e postgres
/postgresql/pg16/bin/createuser -P -s -e repl

createdb repmgr;
# 主子节点启动
repmgrd -f /postgresql/pg16/repmgr/repmgr.conf --pid-file=/tmp/repmgrd.pid

停止repmgrd

kill `cat /tmp/repmgrd.pid`

witness配置 ( /postgresql/pg16/repmgr/repmgr.conf )

部署repmgr过程和主、从节点一致,此处省略

# 节点标识设置
node_id = 4
node_name = witness
# 数据库连接信息
conninfo = 'host=192.168.0.95 user=postgres dbname=repmgr port=6543 connect_timeout=2'
# 数据目录路径
data_directory = '/pgdata/data'
# PostgreSQL二进制目录路径
pg_bindir = '/postgresql/pg16/bin'
# 日志级别与日志文件位置
log_level = info
log_file = '/pgdata/repmgr_log/repmgr.log'
# 故障切换策略设定
failover = automatic
# 提升从库为新主库的命令
promote_command = '/postgresql/pg16/bin/repmgr standby promote -f /postgresql/pg16/repmgr/repmgr.conf --log-to-file'
# 从库跟随主库命令
follow_command = '/postgresql/pg16/bin/repmgr standby follow -f /postgresql/pg16/repmgr/repmgr.conf --log-to-file --upstream-node-id=%n'
# 监控历史记录存储选项
monitoring_history = true
# 监控间隔时间(秒)
monitor_interval_secs = 5
# 重连尝试次数
reconnect_attempts = 3
# 两次重连之间的间隔时间(秒)
reconnect_interval = 5
# repmgrd服务启动命令
repmgrd_service_start_command = '/postgresql/pg16/bin/repmgrd repmgrd -f /postgresql/pg16/repmgr/repmgr.conf --pid-file /tmp/repmgrd.pid'
# repmgrd服务停止命令
repmgrd_service_stop_command = 'kill cat /tmp/repmgrd.pid'

注册witness

repmgr -f /postgresql/pg16/repmgr/repmgr.conf witness register -h 192.168.0.93 -drepmgr -Upostgres

参考

PostgreSQL 16.1与Repmgr实现高可用集群

重启repmgr
repmgr -f /postgresql/pg16/repmgr/repmgr.conf node service --action=restart

移除从库
repmgr -f /postgresql/pg16/repmgr/repmgr.conf standby unregister -F

查询节点状态
repmgr -f /postgresql/pg16/repmgr/repmgr.conf daemon status -v

常用命令

repmgr primary register  安装pg的repmgr扩展并注册为主节点
repmgr primary unregister 注销不活动的主节点
repmgr standby clone 从其他节点复制数据到从节点
repmgr standby register 注册从节点(添加从的信息到repmgr元数据)
repmgr standby unregister repmgr  元数据中移除从的信息
repmgr standby promote 将从提升为主
repmgr standby follow  将从跟随新主
repmgr standby switchover 将从提升为主并将主降级为从
repmgr witness register  注册一个观察节点
repmgr witness unregister  移除一个观察节点
repmgr node status  显示节点的基本信息和复制状态
repmgr node check  从复制的角度对节点进行健康监测
repmgr node rejoin   重新加入一个失效节点到集群
repmgr cluster show  显示所有集群中注册的节点信息
repmgr cluster matrix 在所有节点运行show并汇总
repmgr cluster crosscheck  在节点间两两交叉监测连接
repmgr cluster event 输出时间记录
repmgr cluster cleanup   清理监控历史
repmgr service status  节点状态

标签:postgresql,postgres,pg16,故障,repmgrd,conf,repmgr,转移
From: https://www.cnblogs.com/ives/p/18183790

相关文章

  • Pacemaker入门之---了解配置故障转移
    案例说明:以下流程介绍了创建运行服务的一个Pacemaker集群,当节点上的服务变为不可用时,将其从一个节点切换到另一个节点上。通过这个步骤,您可以了解如何在双节点集群中创建服务,并可以查看在运行该服务的节点出现问题时会出现什么情况。这个示例步骤配置一个运行ApacheHTTP服......
  • 在Linux中,如何使用strace进行故障排查?
    在Linux中,strace是一个非常有用的工具,用于跟踪和诊断系统调用和信号。它可以帮助你理解程序如何与内核交互,并可以用来进行故障排查。以下是使用strace进行故障排查的详细步骤:1.理解strace的基本概念strace可以跟踪进程执行的每一个系统调用和信号。它可以显示系统调用的参数......
  • 在Linux中,如何排查硬件故障?
    排查Linux系统中的硬件故障是一个系统化的过程,涉及到对不同硬件组件的检查和分析。以下是排查硬件故障的详细步骤:1.使用系统日志和诊断工具dmesg:运行dmesg命令查看内核消息缓冲区,可以发现启动时的硬件错误信息。journalctl:对于使用systemd的系统,使用journalctl-k查......
  • 用PHP连接postgreSQL时遇到的问题
    先说说我的环境的版本,apache是2.4的,postgreSQL为目前最新的16版本,php刚开始为7版本。第一个问题是PDO连接PostgreSQL报错,SCRAMauthenticationrequireslibpqversion10orabovein这个问题是libpq的版本过低,要版本10以上,(至于libpq是什么,我目前也不懂)后来我检查了php版本发......
  • 如何从多个文件夹内转移全部文件(忽略文件夹的结构)(进行复制)(再打包)
    首先,需要用到的这个工具:度娘网盘提取码:qwu2蓝奏云提取码:2r1z 04文件夹里面有只有1个名称为"1"的文件夹,“1”里面有“2”,“2”有“3”,“3”有“4”,从“1”开始,都有5个兔兔的图片,这是“1”里面的文件夹结构,现在要做的就是忽略文件夹结构,提取出全部的兔兔图片合并成一个压缩......
  • ITIL4视角下的IT监控与故障管理:守护服务健康的双刃剑
    引言:监控的曙光在IT服务管理的浩瀚星图中,"监控"这一璀璨星辰终于得到了应有的重视与聚焦。ITIL4的出台,不仅明确将监控告警纳入事件管理的广阔宇宙,而且强调了其在预防故障、保障服务连续性中的核心地位。当组织拥抱ITIL4的管理智慧时,多套监控系统的部署成为了常态,每一束监控之光......
  • postgresql中视图建立,字段拼接,同一个表的多行之间的多个字段相减
    首先表是这样的CREATETABLEpublic.tb_realtime_data( s_idvarchar(48)NOTNULL, sensor_namevarchar(48)NULL, sensor_index_codevarchar(48)NULL, sensor_valuenumeric(20,10)NULL, statistics_statusint4NULL, alarm_timetimestampNOTNULL, create_time......
  • MySQL同步故障:“ Slave_SQL_Running:No“ 两种解决办法
    进入slave服务器,运行: ​mysql>showslave status\G            .......              Relay_Log_File:localhost-relay-bin.000535               Relay_Log_Pos:21795072       Relay_Ma......
  • 振弦采集仪在岩土工程监测中的故障排除和维护要点
    振弦采集仪在岩土工程监测中的故障排除和维护要点河北稳控科技振弦采集仪在岩土工程监测中是一种常用的测量设备,通过测量振弦的振动频率来判断土体的力学性质和变形情况。然而,如果振弦采集仪出现故障,则会影响监测工作的正常进行。因此,掌握振弦采集仪的故障排除和维护要点至关重要......
  • openGauss 磁盘满故障引起的core问题
    磁盘满故障引起的core问题问题现象TPCC运行时,注入磁盘满故障,数据库进程gaussdbcore掉,如下图所示。原因分析数据库本身机制,在磁盘满时,Xlog日志无法进行写入,通过panic日志退出程序。处理办法外部监控磁盘使用状况,定时进行清理磁盘。......