lamess / openGauss5.0.0安装部署

Created Fri, 08 Nov 2024 16:36:15 +0800 Modified Tue, 04 Mar 2025 17:23:18 +0800

openGauss5.0.0安装部署(一主一备架构)

资料来源于openGauss官方文档页面

安装准备

获取安装包

openGauss开源社区下载安装包,本次使用5.0.3版本。

准备软硬件安装环境

本章节所有操作均需要在主服务器与备服务器上各执行修改,保证两个服务器之间的配置信息同步。

操作系统

经过验证,openEuler24.03版本暂不支持安装openGauss,本次使用openEuler22.03版本进行部署。

软件依赖

所需软件 建议版本 备注
libaio-devel 建议版本:0.3.109-13 -
readline-devel 建议版本:7.0-13 -
expect - -
ifconfig - cm工具激活VIP使用

在openEuler操作系统中,使用dnf命令安装软件包。

dnf install libaio-devel readline-devel expect net-tools -y

防火墙

在一主一备两个服务器上设置防火墙互信。命令示例如下。

firewall-cmd --permanent --zone=trusted --add-source=192.168.1.101
firewall-cmd --reload

关闭SELinux

永久关闭SELinux

sed -i s/^SELINUX=.*$/SELINUX=disabled/ /etc/selinux/config
setenforce 0

ifconfig 提权

由于需要动态绑定和解绑VIP,需要对网卡进行操作,故而需要对ifconfig进行提权,允许集群用户使用sudo ifconfig方式绑定和解绑VIP。

str1="Cmnd_Alias COMMAND_FLAG = /usr/sbin/ifconfig * netmask * up, /usr/sbin/ifconfig * down"
str2="omm ALL=(root) NOPASSWD: COMMAND_FLAG"
if ! grep -qxF "${str1}" /etc/sudoers ; then echo "${str1}" >> /etc/sudoers; fi
if ! grep -qxF "${str2}" /etc/sudoers ; then echo "${str2}" >> /etc/sudoers; fi

修改后,建议使用visudo命令检查确认/etc/sudoers文件内格式的正确性,如果此命令提示配置文件格式出错,请注意修改正确。

设置网卡MTU值

将各数据库节点的网卡MTU值设置为相同大小。

首先执行如下命令查询服务器的网卡名称。

ifconfig

使用如下命令将各数据库节点的网卡MTU值设置为相同大小。MTU值推荐8192,要求不小于1500。

ifconfig 网卡编号 mtu 8192

关闭THP

将关闭命令写入systemctl文件中,保证重启后生效。

cat > /etc/systemd/system/disable-thp.service << EOF
[Unit]
Description=Disable Transparent Huge Pages (THP)

[Service]
Type=simple
ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag"

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable disable-thp --now

主机名

为数据库主机、备机设置hostname。
分别使用命令设置不同的主机名,命令示例如下。此处示例中设计主服务器主机名为Server0,备服务器主机名为Server1

# hostnamectl set-hostname --static 主机名 && bash
hostnamectl set-hostname --static Server0 && bash

(可选)关闭swap交换内存

在各数据库节点上,使用swapoff -a命令将交换内存关闭。

swapoff -a

操作系统用户

安装过程中要求两个操作系统均使用root用户进行数据库安装部署,且root用户具有相同的密码。

其它要求

其它具体要求详见官方文档技术要求。按需修改其它配置项。

初始化安装环境

上传数据库安装包

创建文件夹,用于存放安装文件。

mkdir -p /opt/software/openGauss

openGauss-x.x.x-openEuler-64bit-all.tar.gz上传至此路径并解压。

tar -zxf /opt/software/openGauss/openGauss-x.x.x-openEuler-64bit-all.tar.gz -C /opt/software/openGauss/
tar -zxf /opt/software/openGauss/openGauss-x.x.x-openEuler-64bit-om.tar.gz -C /opt/software/openGauss/

使用gs_checkos工具检查配置

gs_checkos工具用来帮助检查操作系统、控制参数、磁盘配置等内容,并对系统控制参数、I/O配置、网络配置和THP服务等信息进行配置。

/opt/software/openGauss/script/gs_checkos -i A -h Server0 --detail

分别在主、备服务器执行命令,在-h参数传入当前服务器的主机名称,进行安装前的检查。
根据检查结果,调整系统参数。

gs_checkos命令将会检查以下操作系统、控制参数、磁盘配置等内容。

编号 检查项
A1 操作系统版本(OS version status)
A2 内核版本(Kernel version status)
A3 Unicode状态(Unicode status)
A4 时区状态(Time zone status)
A5 交换内存状态(Swap memory status)
A6 系统控制参数(System control parameters status)
A7 文件系统配置状态(File system configuration status)
A8 磁盘配置状态(Disk configuration status)
A9 预读块大小状态(Pre-read block size status)
A10 IO调度状态(IO scheduler status)
A11 网卡配置状态(Network card configuration status)
A12 时间一致性(Time consistency status)
A13 防火墙状态(Firewall service status)

检查结果如果为“Warning”,请对照官方文档进行核实各项配置,确认是否需要调整。检查结果如果为“Abnormal”,应按官方文档说明进行调整后再进行部署。

在默认安装的openEuler操作系统中,A6项“系统控制参数”容易汇报“Abnormal”。
而实际上在安装过程中,部署脚本将自动地调整部分系统控制参数,在安装前阶段只需要修改不被自动修改的部分即可。

预安装时不被脚本自动设置的配置项

参数名称 参数说明 推荐取值
net.ipv4.tcp_retries1 在连接建立过程中TCP协议最大重试次数。 5
net.ipv4.tcp_synack_retries TCP协议SYN应答报文最大重试次数。 5
net.ipv4.tcp_synack_retries TCP协议SYN应答报文最大重试次数。 5
net.ipv4.ip_local_port_range 物理机可用临时端口范围。 26000-65535
net.ipv4.tcp_fin_timeout 系统默认的超时时间。 60
net.ipv4.tcp_sack 启用有选择的应答 1
net.ipv4.tcp_timestamps TCP时间戳 1
vm.extfrag_threshold 系统在内存碎片的处理倾向 500
vm.overcommit_ratio 使用绝不过量分配内存的算法时,系统内存地址空间使用占比 90
MTU 节点网卡最大传输单元 8192

在前面的配置中,已经按要求将网卡MTU值进行了修改。
而在openEuler22.03操作系统中,不被安装脚本自动设置的系统参数中只有net.ipv4.tcp_retries1net.ipv4.tcp_syn_retries默认与推荐值不符,此时使用命令修改此两项配置值即可,其余的系统参数项均由安装脚本进行自动修改。

查询tcp_retries1tcp_syn_retries网络参数

cat /proc/sys/net/ipv4/tcp_retries1
cat /proc/sys/net/ipv4/tcp_syn_retries

tcp_retries1的推荐值为5tcp_syn_retries的推荐值为5。如果当前值与实际值不符,可以分别写入各服务器中的sysctl.conf中并修改生效。

echo "net.ipv4.tcp_retries1=5" >> /etc/sysctl.conf
echo "net.ipv4.tcp_syn_retries=5" >> /etc/sysctl.conf
sysctl -p

另外,对于其它检查项中的Warning结果,在对照官方文档后按需进行配置调整。
其中A7项“文件系统配置状态”可能报告文件打开数和进程数量不足,可由安装脚本自动调整。
在防火墙启用状态,A13将产生Warning结果,此时只要确认主备服务器均互相设置了防火墙白名单即可。如果在安装过程中停用了防火墙,在安装完成后启用防火墙之前,应先使用firewall-offline-cmd命令完成防火墙白名单的设置,再启用防火墙。

准备XML配置文件

参考官方文档资料,配置实际使用的XML配置文件。
在一主一备的简单架构下,可以使用以下的方式编写XML配置文件。

自本章节开始,以下所有命令均在主服务器执行即可,openGauss的安装过程将自动地为备服务器同步文件和数据。

dbip0="192.168.1.101"
dbip1="192.168.1.102"
dbipVip="192.168.1.100"
hostName0="Server0"
hostName1="Server1"
cat > /opt/software/openGauss/cluster_config.xml << EOF
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
  <!-- 整体信息 -->
  <CLUSTER>
    <!-- 数据库名称 -->
    <PARAM name="clusterName" value="openGauss" />
    <!-- 数据库节点名称(hostname) -->
    <PARAM name="nodeNames" value="$hostName0,$hostName1" />
    <!-- 数据库安装目录-->
    <PARAM name="gaussdbAppPath" value="/opt/openGauss/install/app" />
    <!-- 日志目录-->
    <PARAM name="gaussdbLogPath" value="/opt/openGauss/logs/omm" />
    <!-- 临时文件目录-->
    <PARAM name="tmpMppdbPath" value="/opt/openGauss/tmp" />
    <!--数据库工具目录-->
    <PARAM name="gaussdbToolPath" value="/opt/openGauss/install/om" />
    <!--数据库core文件目录-->
    <PARAM name="corePath" value="/opt/openGauss/corefile"/>
    <!-- 节点IP,与nodeNames一一对应 -->
    <PARAM name="backIp1s" value="$dbip0,$dbip1"/>
    <!-- VIP信息  -->
    <PARAM name="floatIp1" value="$dbipVip"/>
  </CLUSTER>
  <DEVICELIST>
    <DEVICE sn="$hostName0">
      <PARAM name="name" value="$hostName0"/>
      <PARAM name="azName" value="AZ1"/>
      <PARAM name="azPriority" value="1"/>
      <PARAM name="backIp1" value="$dbip0"/>
      <PARAM name="sshIp1" value="$dbip0"/>
      <!-- dn -->
      <PARAM name="dataNum" value="1"/>
      <PARAM name="dataPortBase" value="5432"/>
      <PARAM name="dataNode1" value="/opt/openGauss/install/data/dn,$hostName1,/opt/openGauss/install/data/dn"/>
      <PARAM name="dataNode1_syncNum" value="0"/>
      <PARAM name="floatIpMap1" value="floatIp1,floatIp1"/>
      <PARAM name="cmsNum" value="1"/>
      <PARAM name="cmDir" value="/opt/openGauss/install/cm"/>
      <PARAM name="cmServerPortBase" value="5000"/>
      <PARAM name="cmServerListenIp1" value="$dbip0,$dbip1"/>
      <PARAM name="cmServerHaIp1" value="$dbip0,$dbip1"/>
      <!-- cmServerlevel目前只支持1 -->
      <PARAM name="cmServerlevel" value="1"/>
      <!-- cms主及所有备的hostname -->
      <PARAM name="cmServerRelation" value="$hostName0,$hostName1"/>
    </DEVICE>
    <DEVICE sn="$hostName1">
      <PARAM name="name" value="$hostName1"/>
      <PARAM name="azName" value="AZ1"/>
      <PARAM name="azPriority" value="1"/>
      <PARAM name="backIp1" value="$dbip1"/>
      <PARAM name="sshIp1" value="$dbip1"/>
      <PARAM name="cmDir" value="/opt/openGauss/install/cm"/>
      <PARAM name="cmServerPortStandby" value="5500"/>
    </DEVICE>
  </DEVICELIST>
</ROOT>
EOF

准备安装用户及环境

执行安装前置脚本gs_preinstall,自动完成如下的安装环境准备工作:

  • 自动设置Linux内核参数以达到提高服务器负载能力的目的。
  • 自动将openGauss配置文件、安装包拷贝到openGauss主机的相同目录下。
  • openGauss安装用户、用户组不存在时,自动创建安装用户以及用户组。
  • 读取openGauss配置文件中的目录信息并创建,将目录权限授予安装用户。

采用交互模式执行前置,并在执行过程中自动创建操作系统root用户互信和omm用户互信。

cd /opt/software/openGauss/script
./gs_preinstall -U omm -G dbgrp -X /opt/software/openGauss/cluster_config.xml

执行过程中写入操作系统的root用户及新建omm用户的密码。等待脚本执行完成即可。

如图中标记顺序,第一次输入yes,并输入操作系统root用户的密码。
之后第二次输入yes,并按提示连续3次输入新建的omm用户的相同密码内容。

执行安装

执行前置脚本准备好openGauss安装环境之后,按照启动安装过程部署openGauss。

chown -R omm:dbgrp /opt/software/openGauss
su - omm -c "/opt/software/openGauss/script/gs_install -X /opt/software/openGauss/cluster_config.xml"

在执行过程中,用户需根据提示输入数据库的密码,密码具有一定的复杂度,为保证用户正常使用该数据库,请记住输入的数据库密码。

设置的密码要符合复杂度要求:

  • 最少包含8个字符,最多包含16个字符。
  • 不能和用户名、当前密码(ALTER)、或当前密码反序相同。
  • 至少包含大写字母(A-Z)、小写字母(a-z)、数字、非字母数字字符(限定为~!@#$%^&*()-_=+|[{}];:,<.>/?)四类字符中的三类字符。

如图所示,两次输入设计好的数据库密码,之后等待安装过程执行完成。

完成安装后配置信息

一主一备架构下,使用当前AZ中第三方网关IP地址或任何其他独立于当前集群的可用IP地址进行仲裁检测,需要确保其与集群中节点间的网络相通。
该字符串可以配置为一个或者多个以英文逗号分隔的ip串,只有一个IP时,可以配置为如10.0.0.1的形式。配置为多个时,可以配置为如10.0.0.1,10.0.0.2的形式。配置多个时,需要确保配置的所有IP与集群中节点间的网络相通。

以下命令逐行执行,也可以使用&&将子账户的命令拼接后一次执行。

gateway="192.168.1.1"
su - omm -c "gs_guc -N all -I all -c session_timeout=0 reload"
su - omm -c "gs_guc -N all -I all -h 'host all iot 0.0.0.0/0 sha256' reload"
su - omm -c "gs_guc -N all -I all -c 'most_available_sync = on' reload"
su - omm -c "cm_ctl set --param --server -k cms_enable_failover_on2nodes=1"
su - omm -c "cm_ctl set --param --server -k third_party_gateway_ip='$gateway'"
su - omm -c "cm_ctl set --param --server -k cms_enable_db_crash_recovery=1"
su - omm -c "cm_ctl set --param --server -k cms_network_isolation_timeout=20"
su - omm -c "cm_ctl reload --param --server"
su - omm -c "cm_ctl reload --param --agent"

安装完成后,执行命令确认数据库状态。

su - omm -c "gs_om -t status --detail"
su - omm -c "cm_ctl show"

处理openssl-libs

由于openGauss会将自带的lib文件的加载优先级提高,导致系统自带的openssl功能异常,此时需要把系统的lib库优先级提高。

echo "export LD_LIBRARY_PATH=/usr/lib64:\$LD_LIBRARY_PATH" >> ~/.bashrc
source ~/.bashrc

受影响的systemd服务中,需要增加环境变量参数。

[Service]
Environment="LD_LIBRARY_PATH=/usr/lib64"

openGauss简单使用

允许外部连接

设置防火墙端口开放,允许外部连接。

firewall-cmd --add-port=5432/tcp --permanent
firewall-cmd --reload

创建用户

首先创建用户并授权。

su - omm -c "gsql -d postgres -c \"CREATE USER username PASSWORD 'password';\""
su - omm -c "gsql -d postgres -c 'GRANT ALL PRIVILEGES TO username;'"

之后便可通过外部工具连接openGauss。

使用dbeaver连接openGauss

在官方网站下载jdbc驱动,在驱动库中引入opengauss-jdbc-xxx.jar和postgresql.jar文件,之后在dbeaver中新增Generic类型的驱动模板使用即可。

其中URL模板填写为:

jdbc:opengauss://{host}:{port}/{database}