大亮爱创作头像
关注

openGauss6.0.3一主二从集群安装手册

openGauss6.0.3 一主二备集群安装手册

一、环境信息

  • 节点:db1 (11.0.1.21)、db2 (11.0.1.22)、db3 (11.0.1.23)
  • 系统:CentOS 7.9
  • 数据库用户:omm
  • 数据库组:dbgrp
  • 管理员密码:GaussDB@123456
  • 安装包目录:/opt/opengauss
  • 程序目录:/opt/huawei/install/app(安装过程中自动创建)
  • CM数据目录:/data/huawei/openGauss/cmserver
  • DN数据目录:/data/huawei/openGauss/dn
  • 端口:数据库 15400 / CM 15000

⚠️ 重要:本文档集群采用CM三节点仲裁实现自动故障转移;dataNode1_syncNum控制复制模式;异步复制存在RPO>0风险,对数据零丢失场景需要修改为同步复制。


二、所有节点统一执行步骤

0.【新增强制前置:时间同步,高可用硬性要求】

三台节点时间差必须<2s,时间不一致会导致复制中断、故障转移异常。

yum install -y chrony
systemctl enable --now chronyd
# 验证,三台输出时间必须基本一致
date
chronyc tracking

1. 关闭防火墙与 SELinux

systemctl stop firewalld
systemctl disable firewalld
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0

2. 配置 hosts

cat >> /etc/hosts <<EOF
11.0.1.21   db1
11.0.1.22   db2
11.0.1.23   db3
EOF

3. 创建 omm 用户

groupadd dbgrp
useradd -g dbgrp omm
echo "GaussDB@123456" | passwd --stdin omm

4. 安装系统依赖(新增expect,预安装互信依赖)

yum install -y libaio-devel flex bison ncurses-devel glibc-devel patch readline-devel libnsl make gcc gcc-c++ openssl-devel bzip2-devel zlib-devel expect

5. 编译安装 Python 3.6.15

⚠️ 重要:CentOS 7 系统 yum 依赖 Python 2.7,请勿修改系统默认的 python 命令!

cd /usr/local
wget https://www.python.org/ftp/python/3.6.15/Python-3.6.15.tgz
tar -zxvf Python-3.6.15.tgz
cd Python-3.6.15
./configure --prefix=/usr/local/python36 --enable-shared
make -j4
make install
# ✅ 正确做法:只创建 python3 软链接,不修改系统默认的 python
ln -sf /usr/local/python36/bin/python3 /usr/bin/python3
ln -sf /usr/local/python36/bin/pip3  /usr/bin/pip3
echo "/usr/local/python36/lib" >> /etc/ld.so.conf
ldconfig

验证:

# 系统默认 python 还是 2.7(yum 正常)
python -V
# Python 3 版本正常(openGauss 正常)
python3 -V

6. 系统内核参数【新增,高可用必调】

cat >> /etc/sysctl.conf <<'EOF'
fs.aio-max-nr=1048576
fs.file-max=6553600
kernel.sem=250 32000 100 128
net.ipv4.tcp_keepalive_time=30
net.ipv4.tcp_keepalive_intvl=30
net.ipv4.tcp_keepalive_probes=3
EOF
sysctl -p

7. 资源限制【新增】

cat >> /etc/security/limits.conf <<'EOF'
omm soft nofile 1048576
omm hard nofile 1048576
omm soft nproc unlimited
omm hard nproc unlimited
EOF

8. 创建必要目录

mkdir -p /opt/opengauss
mkdir -p /var/log/omm
chown -R omm:dbgrp /opt/opengauss
chown -R omm:dbgrp /var/log/omm

✅ 重要:/opt/huawei 目录由安装脚本自动创建,请勿手动创建


三、仅主节点 db1 执行

1. 解压安装包

cd /opt/opengauss
wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/6.0.3/CentOS7/x86/openGauss-All-6.0.3-CentOS7-x86_64.tar.gz
tar -zxvf openGauss-All-6.0.3-CentOS7-x86_64.tar.gz
tar -jxf openGauss-Server-6.0.3-CentOS7-x86_64.tar.bz2
tar -zxf openGauss-OM-6.0.3-CentOS7-x86_64.tar.gz
tar -zxf openGauss-CM-6.0.3-CentOS7-x86_64.tar.gz

2. 创建集群配置文件 clusterconfig.xml【完善版】

说明:

  • cmsNum="1":每台节点部署1个CM,三节点CM构成多数派仲裁,实现自动故障转移;
  • dataNode1_syncNum=0异步复制(默认,性能优先,故障转移存在丢数据风险)
  • 如果业务要求数据零丢失,修改为 dataNode1_syncNum=1,开启同步复制,至少1台备库同步落盘后主库才返回成功。
su - omm
cat > /opt/opengauss/clusterconfig.xml <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
    <CLUSTER>
        <PARAM name="clusterName" value="openGaussCluster" />
        <PARAM name="nodeNames" value="db1,db2,db3" />
        <PARAM name="gaussdbAppPath" value="/opt/huawei/install/app" />
        <PARAM name="gaussdbLogPath" value="/var/log/omm" />
        <PARAM name="tmpMppdbPath" value="/opt/huawei/tmp" />
        <PARAM name="gaussdbToolPath" value="/opt/huawei/install/om" />
        <PARAM name="corePath" value="/opt/huawei/corefile" />
        <PARAM name="backIp1s" value="11.0.1.21,11.0.1.22,11.0.1.23" />
    </CLUSTER>
    <DEVICELIST>
        <DEVICE sn="db1">
            <PARAM name="name" value="db1" />
            <PARAM name="azName" value="AZ1" />
            <PARAM name="azPriority" value="1" />
            <PARAM name="backIp1" value="11.0.1.21" />
            <PARAM name="sshIp1" value="11.0.1.21" />
            <PARAM name="cmsNum" value="1" />
            <PARAM name="cmServerPortBase" value="15000" />
            <PARAM name="cmServerListenIp1" value="11.0.1.21,11.0.1.22,11.0.1.23" />
            <PARAM name="cmServerHaIp1" value="11.0.1.21,11.0.1.22,11.0.1.23" />
            <PARAM name="cmServerLevel" value="1" />
            <PARAM name="cmServerRelation" value="db1,db2,db3" />
            <PARAM name="cmDir" value="/data/huawei/openGauss/cmserver" />
            <PARAM name="dataNum" value="1" />
            <PARAM name="dataPortBase" value="15400" />
            <PARAM name="dataNode1" value="/data/huawei/openGauss/dn,db2,/data/huawei/openGauss/dn,db3,/data/huawei/openGauss/dn" />
            <!-- 0=异步复制;1=同步复制(零丢失,性能下降) -->
            <PARAM name="dataNode1_syncNum" value="0" />
        </DEVICE>
        <DEVICE sn="db2">
            <PARAM name="name" value="db2" />
            <PARAM name="azName" value="AZ1" />
            <PARAM name="azPriority" value="1" />
            <PARAM name="backIp1" value="11.0.1.22" />
            <PARAM name="sshIp1" value="11.0.1.22" />
            <PARAM name="cmDir" value="/data/huawei/openGauss/cmserver" />
        </DEVICE>
        <DEVICE sn="db3">
            <PARAM name="name" value="db3" />
            <PARAM name="azName" value="AZ1" />
            <PARAM name="azPriority" value="1" />
            <PARAM name="backIp1" value="11.0.1.23" />
            <PARAM name="sshIp1" value="11.0.1.23" />
            <PARAM name="cmDir" value="/data/huawei/openGauss/cmserver" />
        </DEVICE>
    </DEVICELIST>
</ROOT>
EOF
chmod 600 /opt/opengauss/clusterconfig.xml

四、安装 openGauss 集群(仅主节点 db1 执行)

1. 预安装(db1上root 执行)

互信已经由脚本自动创建,如果已经手动配置互信,可以增加 --non-interactive 跳过互信交互。

cd /opt/opengauss/script
./gs_preinstall -U omm -G dbgrp -X /opt/opengauss/clusterconfig.xml

2. 正式安装(db1上omm 执行)

su - omm
cd /opt/opengauss/script
./gs_install -X /opt/opengauss/clusterconfig.xml --gsinit-parameter="--pwpasswd=GaussDB@123456"

📌 安装完成后,CM关键高可用参数(cm_server.conf)说明,无需手动修改,xml已经驱动生成:

  • instance_heartbeat_timeout = 6:DN实例心跳超时6秒
  • instance_failover_delay_timeout = 0:超时后立刻执行故障转移
  • dn_arbitrate_mode = quorum:多数派投票仲裁,三CM至少2个同意才允许failover
  • enable_az_auto_switchover=1:开启AZ内自动故障转移

五、集群验证

查看集群状态

gs_om -t status --detail
# 或者
cm_ctl query -Cv

✅ 正常状态:

cluster_state   : Normal
primary         : 1
standby         : 2
balanced        : Yes

登录数据库

gsql -d postgres -p 15400

密码:GaussDB@123456

高可用测试

⚠️ 区分两个场景:

  1. 仅kill gaussdb进程:cm_agent守护进程会自动拉起实例,不会触发自动故障转移(进程自愈)
  2. 节点全部进程停止(cm_server、cm_agent、gaussdb全部kill):触发CM仲裁,执行自动故障转移。
测试1:手动主备切换 switchover(业务短暂抖动)
# omm执行,将主切到node.id=2(db2)
cm_ctl switchover -n 2
# 查看状态,确认db2变为Primary
cm_ctl query -Cv
测试2:模拟节点故障,验证自动故障转移(failover)
  1. 在主节点机器上,停止所有openGauss相关进程,模拟节点宕机
# 在当前主节点执行,模拟节点完全故障
ps -ef | grep -E "gaussdb|cm_server|cm_agent" |grep -v grep |awk '{print $2}' |xargs kill -9
  1. 在其他节点持续观察集群状态
cm_ctl query -Cv

预期结果:

  • 心跳超时后,CM多数派仲裁,自动把一个备库提升为Primary
  • 集群状态短暂Degraded,新主库对外提供读写。
测试3:故障节点恢复

故障节点机器执行,恢复集群服务

su - omm
gs_om -t start

预期:故障节点启动后自动加入集群成为备库,自动同步数据,集群回到Normal

⚠️ 注意:Degraded降级状态禁止执行switchover主备切换,风险极高,必须先修复备库回到Normal状态。


六、常用管理命令(补充HA运维命令)

# 启动集群
gs_om -t start
# 停止集群
gs_om -t stop
# 重启集群
gs_om -t restart
# 查看详细状态
gs_om -t status --detail
# 查看CM集群状态
cm_ctl query -Cv

# 滚动重启节点(逐个重启备库,最后switchover再重启原主)
cm_ctl stop -n <nodeid>
cm_ctl start -n <nodeid>

# 备库异常重建完整示例(-D填写DN真实数据目录)
cm_ctl stop -n 2 -D /data/huawei/openGauss/dn
cm_ctl build -n 2 -D /data/huawei/openGauss/dn -b full -f

七、常见问题与修复【大量补充高可用故障】

7.1 Python 安装后 yum 崩溃(已踩坑修复)

问题现象

执行 yum 命令时报错:

/usr/bin/yum: /usr/bin/python: bad interpreter: No such file or directory
问题原因

CentOS 7 系统的 yum 工具依赖 Python 2.7,如果你在安装 Python 3 时,错误地将 /usr/bin/python 软链接覆盖为 Python 3,会导致 yum 找不到 Python 2 而崩溃。

修复命令
# 1. 恢复系统默认的 python 指向 python2.7
ln -sf /usr/bin/python2.7 /usr/bin/python
# 2. 验证 yum 恢复正常
yum --version
# 3. 确保 python3 命令正常
python3 -V

7.2 安装时报 /app/openGauss 目录权限错误

问题原因

openGauss 对自定义路径有权限校验冲突,建议使用官方默认的 /opt/huawei 路径,可避免 99% 的权限报错。

7.3 预安装时报目录已存在

解决方法

删除所有节点上的残留目录,让安装脚本自动创建:

rm -rf /opt/huawei
unlink /app/openGauss 2>/dev/null

7.4【新增】备库重启后 Pending Unknown、集群 Degraded

现象:备库实例状态Pending Unknown,集群Degraded,高可用降级。

  1. 先查看DN日志定位wal复制报错
tail -f /data/huawei/openGauss/dn/pg_log/gaussdb-*.log
  1. 尝试重启该节点DN实例
cm_ctl stop -n 2 -D /data/huawei/openGauss/dn
cm_ctl start -n 2 -D /data/huawei/openGauss/dn
  1. 如果仍然异常,执行全量build重建备库
cm_ctl stop -n 2 -D /data/huawei/openGauss/dn
cm_ctl build -n 2 -D /data/huawei/openGauss/dn -b full -f

7.5【新增】CM仲裁异常集群全部Pending

现象:所有DN实例状态Pending Unknown,CM无法分配主备角色。
根因:DCF共识数据损坏。

  1. 停止整个集群
gs_om -t stop
  1. 三台节点备份并清理DCF数据目录
mv /data/huawei/openGauss/cmserver/dcf_data /data/huawei/openGauss/cmserver/dcf_data.bak
mkdir /data/huawei/openGauss/cmserver/dcf_data
chown -R omm:dbgrp /data/huawei/openGauss/cmserver
  1. 重新启动集群
gs_om -t start

7.6【新增】时间不同步导致备库复制断开

三台节点执行时间同步:

systemctl restart chronyd
date

八、重要说明(修正原有错误描述)

  1. /opt/huawei 目录由 gs_preinstall 自动创建,禁止手动创建
  2. 预安装必须用 root,正式安装必须用 omm
  3. 永远不要修改系统默认的 /usr/bin/python,Python 3 单独使用 python3 命令
  4. 本流程基于CentOS7.9环境;迁移其他操作系统(银河麒麟V10等)需要处理库版本兼容问题。
  5. ⚠️ 复制模式说明:
    • dataNode1_syncNum=0:异步复制,自动故障转移可以切换,但存在RPO>0,极端故障会丢失少量未同步数据
    • dataNode1_syncNum=1:同步复制,保证故障切换数据零丢失,但写入性能会下降,至少一台备库存活集群才可写入。
  6. CM三节点多数派仲裁:容忍单台CM节点故障;两台CM故障时集群将失去高可用能力。
  7. 部署完成必须执行【五、集群验证】中的故障转移测试,确认HA功能真正生效,不能仅看cluster_state:Normal就判定高可用完成。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/weixin_43334786/article/details/166257145

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--