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_retries1和net.ipv4.tcp_syn_retries默认与推荐值不符,此时使用命令修改此两项配置值即可,其余的系统参数项均由安装脚本进行自动修改。
查询tcp_retries1和tcp_syn_retries网络参数
cat /proc/sys/net/ipv4/tcp_retries1
cat /proc/sys/net/ipv4/tcp_syn_retries
tcp_retries1的推荐值为5,tcp_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}