2.安装配置corosync+pacemaker集群-postgresql
1.安装集群文件系统rpm包【2个节点都要安装】
安装软件包: yum -y install lvm2* gfs2* dlm*
LVM2:提供了LVM在集群环境下的支持,比如允许在多个节点上同时访问同一逻辑卷组的能力。
GFS2是一种适合于集群使用的分布式文件系统,允许多个节点同时读写相同的文件系统。
DLM 则是在集群环境中管理对共享资源访问的重要机制,确保数据的一致性和完整性,跟GFS2是一起的。
本文以/dev/sdb 来作为共享存储集群文件系统
节点1
2个节点的 ID_SERIAL是一致的
2.创建lv和目录【1节点创建pv-vg-lv和挂载目录,2节点只需要创建挂载目录即可,不需要执行创建pv操作】
3.开放lvmHA功能
开放lvmha功能
lvmconf --enable-halvm --services --startstopservices
将集群的共享存储(vg)交由集群管理
查看系统现有vg,放开volume_list的注释,将除过集群共享存储的vg加入中括号内
注意:主机后续添加新的非集群管理vg,必须将vg名加入volume_list内
然后修改/etc/lvm/lvm.conf 配置文件(只保留操作系统的vg资源即非HA管理的VG)
volume_list = [ "rhel" ]
生成initramfs文件
备份/boot/initramfs-$(uname –r).img文件
Reboot 重启主机。
主机重启完毕后,检查集群状态
4.配置集群LVM资源
在任意一个节点(pmck01)上执行以下命令:
创建LVM资源:
pcs resource create pg_lvm ocf:heartbeat:LVM volgrpname=vg_pg exclusive=true op start interval=0s timeout=60s op stop interval=0s timeout=60s op monitor interval=30s timeout=60s --group group_15431
创建文件系统资源:
pcs resource create pg_fs ocf:heartbeat:Filesystem device="/dev/vg_pg/lv_pgdata" directory="/data_15431" fstype=xfs options="defaults" op start interval=0s timeout=60s op stop interval=0s timeout=60s op monitor interval=20s timeout=60s --group group_15431
创建VIP资源
pcs resource create vip ocf:heartbeat:IPaddr2 ip=172.16.1.115 cidr_netmask=24 op start interval=0s timeout=60s op stop interval=0s timeout=60s op monitor interval=30s timeout=60s --group group_15431
设置位置约束和资源粘性值-----
# 设置位置约束,让资源倾向于在pmck01上运行
pcs constraint location group_15431 prefers pmck01=50
# 设置资源粘性值,使得资源一旦迁移到另一个节点后倾向于留在那里
pcs resource meta group_15431 resource-stickiness=200
【
pg_lvm: 资源名称,可以根据需要自定义。
ocf:heartbeat:LVM: 使用OCF类型的LVM资源代理。
volgrpname=vg_pg: 指定要管理的卷组名称为vg_pg。
exclusive=true: 设置此LVM卷组为独占模式,防止多个节点同时访问相同的物理卷,有助于避免数据损坏。
op start interval=0s timeout=60s: 启动操作配置,表示启动时执行一次,超时时间为60秒。
op stop interval=0s timeout=60s: 停止操作配置,表示停止时执行一次,超时时间为60秒。这里将interval设置为0s,以确保仅在资源实际停止时执行该操作。
op monitor interval=30s timeout=60s: 监控操作配置,每30秒检查一次资源状态,若超过60秒未响应则认为失败。
--group group_15431: 将此资源添加到名为group_15431的资源组中。
】
创建完毕后目录自动挂载上来。
VIP的资源也启动了。
【VIP的资源将来用作于pg的监听】
接下来我们测试一下,目录能够切换到2节点去。
切换成功。
再次切回1节点
5.配置安装postgresql 数据库。
下载软件包 下载地址:https://www.postgresql.org/ftp/source/
一:安装依赖包
yum -y install readline*
yum -y install perl-ExtUtils*
yum -y install zlib-devel*
yum -y install pam-devel*
yum -y install libxml*
yum -y install libxslt-devel*
yum -y install openldap-devel*
yum -y install python-devel*
yum -y install gcc-c++*
yum -y install cmake
yum -y install icu libicu*
二:创建安装目录和用户
安装目录
/data_15431/pg_home
数据库目录
/data_15431/pg_data/
groupadd -g 15001 postgres
useradd -g postgres postgres
三:开始编译安装
./configure --prefix=/data_15431/pg_home --with-pgport=15431
1节点编译安装完成后,将资源目录切换到2节点进行同样的编译安装操作,确保环境变量一致【安装目录也可以放在本地/home/postgres/pg_home】
pcs resource move group_15431 pmck02
./configure --prefix=/data_15431/pg_home --with-pgport=15431
make & make install
修改环境变量:
init初始化数据库【只在1个节点初始化即可】
修改监听地址,重新reload
pg_ctl reload -D /data_15431/pg_data
关闭数据库,将资源回切1节点,查看是否能够启动数据库
我这里是手工切换的,生产环境都是自动切换的。
添加postgresql 数据库资源到pcs集群中
pcs resource create pg_15431 ocf:heartbeat:pgsql \
pgctl="/data_15431/pg_home/bin/pg_ctl" \
psql="/data_15431/pg_home/bin/psql" \
pgdata="/data_15431/pg_data" \
rep_mode="none" \
node_list="pmck01 pmck02" \
restore_command="" \
primary_conninfo_opt="keepalives_idle=60 keepalives_interval=5 keepalives_count=5" \
master_ip="172.16.1.115" \
stop_escalate="0" \
op start interval=0s timeout=60s \
op stop interval=0s timeout=60s \
op promote interval=0s timeout=60s \
op demote interval=0s timeout=60s \
op monitor interval=30s timeout=60s --group group_15431
资源名称:资源被命名为pg_15431。
pgctl和psql路径:指向你的PostgreSQL安装目录下的pg_ctl,psql工具。
pgdata路径:指向你的PostgreSQL数据目录。
rep_mode:设置为none表示不使用复制模式。
node_list:列出所有可能运行该资源的节点。
primary_conninfo_opt:配置主备连接参数。
master_ip:设置为主IP地址(在这个场景中是VIP地址)。
操作超时设置:定义了启动、停止、提升、降级和监控操作的超时时间。
--group group_15431:将这个资源添加到名为group_15431的资源组中
【要是有资源处于失败状态,可以清理该资源的历史状态并重新尝试启动资源组】
pcs resource cleanup pg_15431
接下来,测试一下,将资源切到2节点,pg数据库能够自动online
可以看到数据库已经能够正常启动了,集群资源也是正常的。
再次回切1节点,查看数据库