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

pg_auto_failover 本地部署+ 一个monitor 多个 formation

原创 小蚂蚁 2024-03-19
367

由于公司最近用PG较多,高可用架构也做了很多尝试,最终决定使用pg_auto_failover作为公司PG高可用选择

pg_auto_failover简介

pg_auto_failover是PostgreSQL的扩展,用于监视和管理 Postgres 群集的故障转移。

一般架构是由一个monitor  + 一套主备的pgsql ,如果只部署一套那么用的是3台服务器,如果是 N套,那么就是 2N+1台服务器(利用编排减少服务器数量)。 

本身自带故障转移:postgres://pg1:5432,pg2:5432/postgres?target_session_attrs=read-write&sslmode=prefer 


下载最新版本(~*~):

下载postgresql 16:  https://www.postgresql.org/ftp/source/
下载pg_auto_failover:  https://github.com/hapostgres/pg_auto_failover

安装过程:

所有节点安装依赖包

yum install -y python3 \
python3-devel \
e2fs* \
libicu-devel.x86_64 \
libicu.x86_64 \
perl-ExtUtils-Embed.noarch \
readline \
readline-devel \
zlib \
zlib-devel \
cryptopp-devel.x86_64 \
openssl-devel \
pam-devel \
libxml2-devel \
libxslt-devel \
openldap-devel \
systemd-devel \
tcl-devel \
python-devel \
gcc* \


所有节点都操作

修改/etc/hosts  -- root user


vi /etc/hosts
192.168.153.146 pg1
192.168.153.147 pg2
192.168.153.148 pg3

用户创建:
useradd postgres 
chown postgres:postgres -R /data/
-- sudoers 权限
echo "postgres    ALL=(ALL)    NOPASSWD:ALL" >> /etc/sudoers

解压源码包
tar -xvf postgresql-16.1.tar.gz 
export PGDATA=/data/pgdata 
export PGHOME=/usr/pgsql-16
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/pgsql-16/bin

配置:
./configure  --enable-rpath --prefix=/usr/pgsql-16 --includedir=/usr/pgsql-16/include --mandir=/usr/pgsql-16/share/man --datadir=/usr/pgsql-16/share --libdir=/usr/pgsql-16/lib  --with-icu --with-perl --with-python --with-tcl --with-tclconfig=/usr/lib64 --with-openssl --with-pam --with-gssapi --with-includes=/usr/include --with-libraries=/usr/lib64 --enable-nls --enable-dtrace --with-libxml --with-libxslt --with-ldap --with-selinux --with-systemd --with-system-tzdata=/usr/share/zoneinfo --sysconfdir=/etc/sysconfig/pgsql --docdir=/usr/pgsql-16/doc --htmldir=/usr/pgsql-16/doc/html
make world && make install

安装扩展:
cd postgresql-16.1/contrib
make && make install
 
##pg_auto_failover  安装:
tar -xvf pg_auto_failover-2.1.tar.gz 
make && make install
-- 编辑环境变量
su - postgres 
vi  ~/.bash_profile
export PGDATA=/data/pgdata 
export PGHOME=/usr/pgsql-16
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/pgsql-16/bin
source ~/.bash_profile


创建monitor 节点:
su - postgres
nohup pg_autoctl create monitor \
--pgdata /data/pgdata \
--pgport 5432 \
--hostname pg1 \
--auth trust \
--ssl-self-signed \
--run \
&

pg_autoctl show uri
postgres://autoctl_node@pg1:5432/pg_auto_failover?sslmode=require

创建其他节点
--- 需要创建一个目录 手动安装  (避坑:第一遍错误后,添加了次操作)
mkdir /backup  && chown postgres:postgres /backup/


-- pg2  pg3 pg4 
pg_autoctl create postgres \
--hostname pg2 \
--pgdata /data/pgdata \
--auth trust \
--ssl-self-signed \
--monitor 'postgres://autoctl_node@pg1:5432/pg_auto_failover?sslmode=require' \
--run

使用systemd来进行自启动:
--su - root
pg_autoctl -q show systemd --pgdata /data/pgdata > paf.service
sudo  mv paf.service /usr/lib/systemd/system/paf.service
sudo  systemctl enable paf.service 

------------------以上第一套pg_auto_failover已经完成-------------------

------------------以下为第二套pg_auto_failover-------------------

(安装步骤同第一次安装,只不过需要添加一个formation)
-----------第二个编排 如果本地多套paf架构的postgresql   
创建formation
pg_autoctl create formation --formation new --kind pgsql 


--- new 的一套
pg_autoctl create postgres \
--hostname new1 \
--pgdata /data/pgdata \
--auth trust \
--ssl-self-signed \
--monitor 'postgres://autoctl_node@pg1:5432/pg_auto_failover?sslmode=require' \
--formation new \
--run

pg_autoctl create postgres \
--hostname new2 \
--pgdata /data/pgdata \
--auth trust \
--ssl-self-signed \
--monitor 'postgres://autoctl_node@pg1:5432/pg_auto_failover?sslmode=require' \
--formation new \
--run


------OK 至此已经完成了,2N+1 








文章转载自小蚂蚁,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论