openGauss
开源数据库
openGauss社区官网
开源社区
openGauss3.1.0企业版HA环境部署测试
前言
openGauss 是华为开源的一款高性能关系型数据库,这两年感觉 pg 系的数据库在国内慢慢火起来了,pg 的操作还是跟 mysql 和 oracle 略有差距,还得慢慢学,先从部署开始吧。对于我这种老鸟,本以为对着手册部署还不得一把过啊,没想到其中还是碰到了不少问题,折腾了多半天终于搞定了。
环境
信息 | 主机 1 | 主机 2 |
---|---|---|
主机名 | opengauss01 | opengauss02 |
IP 地址 | ... | ... |
os 版本 | centos 7.9 | centos 7.9 |
部署 openGauss
1、修改/etc/hosts
[root@opengauss01 /]# cat /etc/hosts
***.***.***.*** localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
***.***.***.*** opengauss01
***.***.***.*** opengauss02
2、关闭防火墙
[root@opengauss01 /]# systemctl stop firewalld
[root@opengauss01 /]# systemctl disable firewalld
======》这两步一定要做哈,尤其是后面那个 disable,我在做的时候就忘了,后边重启了 os,防火墙又启动了,导致备库始终连不上主库的端口。
3、关闭 selinux
[root@opengauss01 /]# setenforce 0
[root@opengauss01 /]# cat /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
4、 修改系统资源限制参数
[root@opengauss01 /]# echo "\* soft stack 3072" >> /etc/security/limits.conf
[root@opengauss01 /]# echo "\* hard stack 3072" >> /etc/security/limits.conf
[root@opengauss01 /]# echo "\* soft nofile 1000000" >> /etc/security/limits.conf
[root@opengauss01 /]# echo "\* hard nofile 1000000" >> /etc/security/limits.conf
[root@opengauss01 /]# echo "\* soft nproc unlimited" >> /etc/security/limits.d/90-nproc.conf
5、关闭透明大页
[root@opengauss01 /]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@opengauss01 /]# echo never > /sys/kernel/mm/transparent_hugepage/defrag
======》这个是在线关闭,也可以从内核层面关闭。
6、下载企业版安装包,部署 HA 的话,就需要企业版的。
地址:https://opengauss.org/zh/download/
7、上传压缩包并解压
[root@opengauss02 opengauss]# tar -xvf openGauss-Lite-3.1.0-CentOS-x86_64.tar.gz
./dependency/
./dependency/libstdc++.so.6
./install.sh
./openGauss-Lite-3.1.0-CentOS-x86_64.bin
./openGauss-Lite-3.1.0-CentOS-x86_64.sha256
./opengauss_lite.conf
./uninstall.sh
./upgrade_common.sh
./upgrade_config.sh
./upgrade_errorcode.sh
./upgrade_GAUSSV5.sh
./upgrade_sql.sha256
./upgrade_sql.tar.gz
./version.cfg
8、安装依赖包 expect
yum install expect -y
======》这个在安装的时候需要。
9、安装 python3 环境
参考https://www.cnblogs.com/lemon-feng/p/11208435.html
./configure --prefix=/usr/local/python3 --enable-shared CFLAGS=-fPIC
======》注意安装 python3.6,我是 CentOS,不同的操作系统 python 版本也不一样。具体可以看下图,另外如果 configure 的时候不加--enable-shared CFLAGS=-fPIC,安装
openGauss 的时候会报错。
10、修改安装的配置文件
[root@opengauss01 conf]# cp cluster_config_template.xml cluster_config.xml
[root@opengauss02 opengauss]# cat cluster_config.xml
<?xml version="1.0" encoding="utf-8"?>
<ROOT>
<CLUSTER>
<PARAM name="clusterName" value="openGaussHA" />
######节点主机名######
<PARAM name="nodeNames" value="opengauss01,opengauss02"/>
######数据库安装目录,保证这个目录是空的######
<PARAM name="gaussdbAppPath" value="/opengauss/app" />
######数据库日志目录,无需新建,安装的时候自动建######
<PARAM name="gaussdbLogPath" value="/opengauss/log/omm" />
######数据库临时目录,无需新建,安装的时候自动建######
<PARAM name="tmpMppdbPath" value="/opengauss/tmp"/>
######数据库工具目录,无需新建,安装的时候自动建######
<PARAM name="gaussdbToolPath" value="/opengauss/om" />
######数据库corefile目录,无需新建,安装的时候自动建######
<PARAM name="corePath" value="/openguass/corefile"/>
######节点IP,与数据库节点名称列表一一对应######
<PARAM name="backIp1s" value="***.***.***.***,***.***.***.***"/>
</CLUSTER>
<DEVICELIST>
<DEVICE sn="opengauss01">
######节点1的主机名称 ######
<PARAM name="name" value="opengauss01"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
######节点1的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP ######
<PARAM name="backIp1" value="***.***.***.***"/>
<PARAM name="sshIp1" value="***.***.***.***"/>
<!-- dn -->
<PARAM name="dataNum" value="1"/>
<PARAM name="dataPortBase" value="15400"/>
######两个节点的数据目录######
<PARAM name="dataNode1" value="/opengauss/data/dn,opengauss02,/opengauss/data/dn"/>
<PARAM name="dataNode1_syncNum" value="0"/>
</DEVICE>
<DEVICE sn="opengauss02">
######节点2的主机名称 ######
<PARAM name="name" value="opengauss02"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<PARAM name="backIp1" value="***.***.***.***"/>
<PARAM name="sshIp1" value="***.***.***.***"/>
</DEVICE>
</DEVICELIST>
</ROOT>
11、创建用户和组
[root@opengauss02 opengauss]# groupadd dbgrp
[root@opengauss02 opengauss]# useradd omm -G dbgrp
[root@opengauss02 opengauss]# passwd omm
12、修改目录属组和权限
[root@opengauss01 bin]# chmod 755 -R /opengauss
[root@opengauss01 bin]# chown omm:dbgrp -R /opengauss
13、执行预检查
[root@opengauss01 /]# ./gs_preinstall -U omm -G dbgrp -X /opengauss_soft/cluster_config.xml
======》我在执行预检查的时候,碰到两次奇怪的问题:
A、 如果在预检查阶段有以下报错:
[FAILURE] opengauss01:
[GAUSS-50305] : The user is not matched with the user group.
[FAILURE] opengauss02:
[GAUSS-50305] : The user is not matched with the user group.
解决方案: 删除新建的 omm 用户,脚本会自动建 omm 用户,这一步挺奇怪,如果不执行第 11 步的创建 omm 用户,在执行预检查的时候又会报安装目录的属组不对。
B、 如果预检查阶段有以下报错:
[FAILURE] opengauss01:
[GAUSS-50200] : The /opengauss already exists. Please remove it. It should be a symbolic link to $GAUSSHOME if it exists
[FAILURE] opengauss02:
[GAUSS-50200] : The /opengauss already exists. Please remove it. It should be a symbolic link to $GAUSSHOME if it exists
解决方案:xml 中程序安装目录不能和其他目录在同一个层次下。这就是第 10 步中的 gaussdbAppPath 不要配置跟其他目录在同一个目录层中。
14、 查看检查的情况
[root@opengauss01 /]# /opengauss_soft/script/gs_checkos -i A -h opengauss01,opengauss02 –detail
15、执行安装脚本
[omm@opengauss01 script]$ ./gs_install -X /opengauss_soft/cluster_config.xml --gsinit-parameter="--encoding=UTF8"
注意需要 omm 用户执行,另外 database 密码需要至少大小写、数字、特殊字符中的三个。
16、查看集群状态
[omm@opengauss01 script]$ gs_om -t status --detail
[ Cluster State ]
cluster_state : Normal
redistributing : No
current_az : AZ_ALL
[ Datanode State ]
node node_ip port instance state
---
1 opengauss01 ***.***.***.*** 15400 6001 /opengauss/data/dn P Primary Normal
2 opengauss02 ***.***.***.*** 15400 6002 /opengauss/data/dn S Standby Normal
======》节点 1 是 Primary Normal,节点 2 是 Standby Normal,这种状态是正确的。
======》如果有问题可以尝试卸载了重装
[omm@opengauss01 ~]$ gs_uninstall --delete-data
Checking uninstallation.
Successfully checked uninstallation.
Stopping the cluster.
Successfully stopped the cluster.
Successfully deleted instances.
Uninstalling application.
Successfully uninstalled application.
Uninstallation succeeded.
切换测试
- 1、执行 switchover
[omm@opengauss02 ~]$ gs_ctl switchover -D /opengauss/data/dn/
[2022-11-09 18:52:39.086][59376][][gs_ctl]: gs_ctl switchover ,datadir is /opengauss/data/dn
[2022-11-09 18:52:39.086][59376][][gs_ctl]: switchover term (1)
[2022-11-09 18:52:39.096][59376][][gs_ctl]: waiting for server to switchover........
[2022-11-09 18:52:44.180][59376][][gs_ctl]: done
[2022-11-09 18:52:44.180][59376][][gs_ctl]: switchover completed (/opengauss/data/dn)
======》这个命令要在当前的备库执行,不然没啥效果
- 2、确认主备状态
[omm@opengauss02 ~]$ gs_om -t status --detail
[ Cluster State ]
cluster_state : Normal
redistributing : No
current_az : AZ_ALL
[ Datanode State ]
node node_ip port instance state
---
1 opengauss01 ***.***.***.*** 15400 6001 /opengauss/data/dn P Standby Normal
2 opengauss02 ***.***.***.*** 15400 6002 /opengauss/data/dn S Primary Normal
- 3、保存主备信息
[omm@opengauss02 ~]$ gs_om -t refreshconf
Generating dynamic configuration file for all nodes.
Successfully generated dynamic configuration file.