暂无图片
暂无图片
1
暂无图片
暂无图片
1
暂无图片

梧桐数据库 WuTongDB 管理平台 postgresql 高可用方案 postgres + repmgr +pgpool-II

原创 吼吼哈嘿 2025-02-18
104

个人介绍:艺名王三日,中国移动梧桐数据库研发团队成员,云原生数据库管理平台后端研发,相关技术栈问题都可以一起交流探讨。
欢迎探讨: wtswangjing

背景


为保证梧桐数据库管理平台服务高可用,调研pg高可用方案

数据库架构


本文搭建高可用方案为 pgpool 2 + postgres 1主2从

相关组件介绍


名称

版本

官网

职责

postgres

14.5

https://www.postgresql.org/

功能强大的开源关系型数据库管理系统[RDBMS]

repmgr

5.3.3

https://www.repmgr.org/

repmgr是一个开源工具套件,用于管理PostgreSQL服务器集群中的复制和故障转移。它使用工具来增强PostgreSQL的内置热备份功能,以设置备用服务器,监控复制以及执行管理任务。

pgpool-II

4.2.2

https://www.pgpool.net/

Pgpool 是一个高性能的连接池和负载均衡器,用于 PostgreSQL 数据库。Pgpool 可以作为中间层,位于客户端和 PostgreSQL 服务器之间,来管理连接请求并分配给不同的 PostgreSQL 服务器进行处理,以提高整体的系统性能和可用性。Pgpool 的一些主要功能包括: 连接池、负载均衡、高可用性、并行查询

环境


centos7 x86  3台

三台机器建立ssh 免密

postgers用户

ssh-keygen -t rsa

ssh-copy-id postgres@20240314-1

ssh-copy-id postgres@20240314-2

ssh-copy-id postgres@20240314-3

正式搭建


搭建pg master节点

安装postgres

yum install -y perl-ExtUtils-Embed python-devel bison flex readline-devel zlib-devel gcc gcc-c++ wget  uuid uuid-devel
yum -y install pgdg-srpm-macros lz4-devel libicu-devel openldap-devel openssl-devel libuuid-devel libxml2-devel libxslt-devel
wget --no-check-certificate  https://ftp.postgresql.org/pub/source/v14.5/postgresql-14.5.tar.gz
https://ftp.postgresql.org/pub/source/v14.9/postgresql-14.9.tar.gz
tar -zxvf postgresql-14.5.tar.gz
cd postgresql-14.5
./configure --prefix=/usr/pgsql-14 --with-perl --with-python --enable-thread-safety --with-uuid=ossp
make && make install
cd postgresql-14.5/contrib
复制

添加环境变量

mkdir /usr/pgdata
vi ~/.bash_profile
PGDATA=/usr/pgdata
export PGDATA
export PATH
source ~/.bash_profile
复制

添加postgres用户

useradd postgres
chown -R postgres:postgres /usr/local/pgsql-14
chown -R postgres:postgres /data/repmgr-5.3.3
chown -R postgres:postgres /data/postgresql-14.5
mkdir /usr/pgdata
chown -R postgres:postgres /usr/pgdata
复制

切换至postgres用户 修改环境变量

sudo su postgres
vi /home/postgres/.bashrc
export PGDATA=/usr/pgdata
export PATH=/usr/pgsql-14/bin:$PATH
export LD_LIBRARY_PATH=/usr/pgsql-14/lib
source /home/postgres/.bashrc
复制

初始化pg,修改postgresql.conf配置文件

initdb -D $PGDATA -k
mkdir $PGDATA/arch_log
vi $PGDATA/archive.sh
cp --preserve=timestamps $1 $PGDATA/arch_log/$2 ; find $PGDATA/arch_log -type f -mtime +30 | xargs rm -fr;
复制

修改pg_hba.conf

vi $PGDATA/pg_hba.conf
local   all             postgres                                peer
local   replication   repmgr                              trust
host    replication   repmgr      127.0.0.1/32            trust
host    replication   repmgr      0.0.0.0/0          trust
local   repmgr        repmgr                              trust
host    repmgr        repmgr      127.0.0.1/32            trust
host    repmgr        repmgr      0.0.0.0/0          trust
复制

至此pg修改完成

主节点安装repmgr


安装repmgr

wget --no-check-certificate https://www.repmgr.org/download/repmgr-5.3.3.tar.gz
tar -zxvf repmgr-5.3.3.tar.gz
cd repmgr-5.3.3
./configure 
make install
复制

编辑repmgr配置文件

vi /data/repmgr-5.3.3/repmgr.conf
node_id=1
node_name='20240314-1'
conninfo='host=20240314-1 user=repmgr dbname=repmgr connect_timeout=2'
data_directory='/usr/pgdata'
failover=automatic
promote_command='/usr/local/pgsql-14/bin/repmgr standby promote -f /data/repmgr-5.3.3/repmgr.conf --log-to-file'
follow_command='/usr/local/pgsql-14/bin/repmgr standby follow -f /data/repmgr-5.3.3/repmgr.conf --log-to-file --upstream-node-id=%n'
service_start_command = '/usr/local/pgsql-14/bin/pg_ctl start -D /usr/pgdata'
service_stop_command = '/usr/local/pgsql-14/bin/pg_ctl stop -D /usr/pgdata'
service_restart_command = '/usr/local/pgsql-14/bin/pg_ctl restart -D /usr/pgdata'
service_reload_command  = '/usr/local/pgsql-14/bin/pg_ctl reload -D /usr/pgdata'
repmgrd_pid_file='/tmp/repmgrd.pid'
log_file='/tmp/repmgrd.log'
priority=100
monitor_interval_secs = 2
connection_check_type ='ping'
reconnect_attempts = 4 
reconnect_interval = 5
复制

注释

monitor_interval_secs 参数告诉repmgr守护程序应该多久(以秒为单位)检查上游节点的可用性。默认2s检查一次
connection_check_type 用什么方式联系上游节点。此参数可以采用三个值:默认为ping
- ping
- connection
- query


reconnect_attempts = 4 
reconnect_interval = 8
当主节点不可用时,备用节点中的repmgr守护程序将尝试重新连接到主节点达reconnect_attempts次。此参数的默认值为6。在每次重新连接尝试之间,它将等待reconnect_interval秒,默认值为10。
复制

此时repmgr安装完毕

完善元数据信息

psql
postgres@[local:/tmp]:1998=#83348 create user repmgr superuser  password 'repmgr';
CREATE ROLE
postgres@[local:/tmp]:1998=#83348 ALTER USER repmgr SET search_path TO repmgr, "$user", public;
ALTER ROLE
postgres@[local:/tmp]:1998=#83348 create database repmgr owner repmgr;
CREATE DATABASE
复制

启动pg,启动repmgr

pg_ctl start

repmgr -f /data/repmgr-5.3.3/repmgr.conf primary register

repmgrd -f /data/repmgr-5.3.3/repmgr.conf
复制

执行

repmgr -f /data/repmgr-5.3.3/repmgr.conf service status 即可查询目前的pg集群状态

pg主节点搭建完成

搭建pg stangby 节点


安装postgres 与 repmgr 完全一样,装好之后执行

#将🐷节点pgdata拉取
复制

执行

repmgr -f /data/repmgr-5.3.3/repmgr.conf service status 即可查询目前的pg集群状态

多个stangby节点 操作均一致,不做赘述

机器搭建pgpool-II(在pg所在节点自行安装)


安装pgpool

mkdir -p /data/pgpool
wget https://www.pgpool.net/mediawiki/images/pgpool-II-4.2.2.tar.gz

tar -zxvf pgpool-II-4.2.2.tar.gz
cd pgpool-II-4.2.2/
./configure --prefix=/data/pgpool --with-pgsql=/usr/local/pgsql-14
make -j 8 && make install
复制

添加pgpool用户

psql -U postgres
create role nobody login encrypted password 'passwd';
create role pgpool login encrypted password 'passwd';
grant postgres to nobody,pgpool;
复制

修改pgpool.conf配置文件

backend_hostname0 = '20240314-1'
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = '/data/postgres'
backend_flag0 = 'ALLOW_TO_FAILOVER'

backend_hostname1 = '20240414-2'
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = '/data/postgres'
backend_flag1 = 'ALLOW_TO_FAILOVER'
backend_hostname2 = '20240314-3'
backend_port2 = 5432
backend_weight2 = 1
backend_data_directory2 = '/data/postgres'
backend_flag3 = 'ALLOW_TO_FAILOVER'
复制

postgres用户需要一些命令权限

echo "postgres ALL=NOPASSWD: ALL" >> /etc/sudoers
复制

修改pool_hba.conf配置文件

echo "host all all 0.0.0.0/0 md5" >> /etc/pool_hba.conf
复制

pgpool-II 4.2版本之后 pgpool集群所有节点配置文件一致,其他不需要变更,但是需要一个nodeid文件,nodeid从0开始,各节点累加

echo $node_id>>/data/pgpool/etc/pgpool_node_id
复制

pgpool启停命令

/data/pgpool/bin/pgpool -f /data/pgpool/etc/pgpool.conf -m fast stop
/data/pgpool/bin/pgpool -f /data/pgpool/etc/pgpool.conf -n > /tmp/pgpool.log 2>&1
复制

至此 安装完毕

高可用运维相关命令:


repmgr命令
主节点解除关联
/usr/pgsql-14/bin/repmgr -f /data/repmgr-5.3.3/repmgr.conf primary unregister --node-id 1
将2号从节点从集群中删除
repmgr standby unregister -f  /data/repmgr-5.3.3/repmgr.conf --node-id=2
查看集群状态 这里会显示 节点id hostname 关系
/usr/pgsql-14/bin/repmgr -f /data/repmgr-5.3.3/repmgr.conf service status
从节点接触关联
/usr/pgsql-14/bin/repmgr -f /data/repmgr-5.3.3/repmgr.conf standby unregister
从节点加入集群时,拉取主节点数据(端口 不是默认端口时 -p 端口号)
/usr/pgsql-14/bin/repmgr -F -h 20240319dev501478m1-13830-13916-4(主节点hostname) -U repmgr -d repmgr -f /data/repmgr-5.3.3/repmgr.conf standby clone
从节点加入集群
/usr/pgsql-14/bin/repmgr -f /data/repmgr-5.3.3/repmgr.conf standby register
主节点加入集群
/usr/pgsql-14/bin/repmgr -f /data/repmgr-5.3.3/repmgr.conf primary register
暂停repmgrd,可以在任何一个节点上执行,可以用于例行维护,避免主库正常关闭,集群被切换
repmgr -f /data/repmgr-5.3.3/repmgr.conf service pause
解除暂停为
repmgr -f /data/repmgr-5.3.3/repmgr.conf service unpause
pg节点监控 新增节点或者节点挂了重新启动之后需要监控
repmgrd -f /data/repmgr-5.3.3/repmgr.conf
复制
pgpool命令
查看 pgpool 集群信息 密码为passwd 用户名nobody不行的话 就换pgpool,密码一样
pcp_watchdog_info -h 10.0.200.239 -p 9898 -U nobody
更新pg节点状态 当pg出现掉线时 状态为down ,需要手动将pgpool中的pg节点状态更新
pcp_attach_node -U nobody -h 10.0.200.239 -p 9898 -n 0
复制

产品简介

  • 梧桐数据库(WuTongDB)是基于 Apache HAWQ 打造的一款分布式 OLAP 数据库。产品通过存算分离架构提供高可用、高可靠、高扩展能力,实现了向量化计算引擎提供极速数据分析能力,通过多异构存储关联查询实现湖仓融合能力,可以帮助企业用户轻松构建核心数仓和湖仓一体数据平台。
  • 2023年6月,梧桐数据库(WuTongDB)产品通过信通院可信数据库分布式分析型数据库基础能力测评,在基础能力、运维能力、兼容性、安全性、高可用、高扩展方面获得认可。

点击访问:
梧桐数据库(WuTongDB)相关文章
梧桐数据库(WuTongDB)产品宣传材料
梧桐数据库(WuTongDB)百科

最后修改时间:2025-02-18 13:12:58
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

咚咚
暂无图片
1月前
评论
暂无图片 0
梧桐数据库 WuTongDB 管理平台 postgresql 高可用方案 postgres + repmgr +pgpool-II
1月前
暂无图片 点赞
评论