2026-01-14
运维
0

目录

安装前准备

安装流程示意图

image-20240419142410845

获取安装包

首先在https://opengauss.org/zh/download/下载安装包

此页面可下载:

  • openGauss Server:openguass服务端软件包

  • openGauss Connectors:openguass连接库,libpq是linux使用的库

  • openGauss Symbol

  • openGauss Tools

软硬件的安装需求

硬件需求

项目配置描述
内存功能调试建议32GB以上。性能测试和商业部署时,单实例部署建议128GB以上。复杂的查询对内存的需求量比较高,在高并发场景下,可能出现内存不足。此时建议使用大内存的机器,或使用负载管理限制系统的并发。
CPU功能调试最小1×8核,2.0GHz。性能测试和商业部署时,单实例部署建议1×16核,2.0GHz。CPU超线程和非超线程两种模式都支持。说明:目前,openGauss仅支持ARM服务器和基于x86_64通用PC服务器的CPU。
硬盘用于安装openGauss的硬盘需最少满足如下要求:至少1GB用于安装openGauss的应用程序。每个主机需大约300MB用于元数据存储。预留70%以上的磁盘剩余空间用于数据存储。建议系统盘配置为RAID1,数据盘配置为RAID5,且规划4组RAID5数据盘用于安装openGauss。有关RAID的配置方法在本手册中不做介绍。请参考硬件厂家的手册或互联网上的方法进行配置,其中Disk Cache Policy一项需要设置为Disabled,否则机器异常掉电后有数据丢失的风险。openGauss支持使用SSD盘作为数据库的主存储设备,支持SAS接口和NVME协议的SSD盘,以RAID的方式部署使用。
网络要求300兆以上以太网。建议网卡设置为双网卡冗余bond。有关网卡冗余bond的配置方法在本手册中不做介绍。请参考硬件厂商的手册或互联网上的方法进行配置。

软件需求

软件类型配置描述
Linux操作系统ARM:openEuler 20.03LTS(推荐采用此操作系统)openEuler 22.03LTS麒麟V10Asianux 7.5x86:openEuler 20.03LTSopenEuler 22.03LTSCentOS 7.6Asianux 7.6说明:当前安装包只能在英文操作系统上安装使用。
Linux文件系统剩余inode个数 > 15亿(推荐)
工具bzip2
PythonopenEuler:支持Python 3.7.X, Python 3.9.XCentOS:支持Python 3.6.X麒麟:支持Python 3.7.XAsianux:支持Python 3.6.X说明:python需要通过--enable-shared方式编译。

若用户修改过系统python版本,则在安装数据库之前,还需手动安装下列python模块(pip安装即可):

psutilnetifacescffipycparsercryptographypynaclbcryptparamiko

并且在预安装时,需要加上--unused-third-party选项。

软件依赖要求

所需软件建议版本
libaio-devel建议版本:0.3.109-13
flex要求版本:2.5.31 以上
bison建议版本:2.7-4
ncurses-devel建议版本:5.9-13.20130511
glibc-devel建议版本:2.17-111
patch建议版本:2.7.1-10
redhat-lsb-core建议版本:4.1
readline-devel建议版本:7.0-13
libnsl(openEuler+x86环境中)建议版本:2.28-36

修改操作系统配置

注意:目前仅支持在关闭防火墙的状态下安装

  • 关闭selinux
  • 关闭防火墙

设置时区:

shell
# 查看当前时区: [root@openguass1 ~]# timedatectl show Timezone=Asia/Shanghai LocalRTC=no CanNTP=yes NTP=yes NTPSynchronized=yes TimeUSec=Fri 2024-04-19 15:17:21 CST RTCTimeUSec=Fri 2024-04-19 15:17:21 CST # 如果不记得时区名称,可以使用如下方式查询: [root@openguass1 ~]# timedatectl list-timezones | grep -i shanghai Asia/Shanghai # 设置时区 ## 方法1 : [root@openguass1 ~]# timedatectl set-timezone Africa/Brazzaville [root@openguass1 ~]# timedatectl show Timezone=Africa/Brazzaville ## 方法2 ## 查看/etc/localtime信息 [root@openguass1 ~]# ll /etc/local* -rw-r--r--. 1 root root 19 Apr 18 20:52 /etc/locale.conf lrwxrwxrwx 1 root root 40 Apr 19 15:18 /etc/localtime -> ../usr/share/zoneinfo/Africa/Brazzaville ## 可见,负责linux时区的/etc/localtime文件就是一个指向实际时区文件的软链接 [root@openguass1 ~]# mv /etc/localtime /etc/localtime_old [root@openguass1 ~]# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime [root@openguass1 ~]# ll /etc/localtime lrwxrwxrwx 1 root root 33 Apr 19 15:28 /etc/localtime -> /usr/share/zoneinfo/Asia/Shanghai [root@openguass1 ~]# timedatectl show Timezone=Asia/Shanghai ...

设置字符集

查看当前字符集:

shell
[root@openguass1 openGauss]# echo $LANG en_US.UTF-8

若想修改字符集:

shell
export LANG=XXX 并把这个命令写入/etc/profile

关闭swap(实际生产中最好使用)

shell
[root@openguass1 ~]# swapoff -a

在实际生产中,还需要在/etc/fstab中注释swap的挂载语句

设置网卡MTU值

MTU值推荐8192,要求不小于1500

查看MTU值:

image-20240419153327966

设置MTU值:

shell
[root@openguass1 ~]# ip link set ens33 mtu 8192

关闭RemoveIPC

这个参数是用户在退出后,remove掉所有的IPC object,导致当用户退出后,创建的某些文件会被删除!

shell
# 查看当前配置 [root@openguass1 ~]# loginctl show-session | grep RemoveIPC RemoveIPC=no [root@openguass1 ~]# systemctl show systemd-logind | grep RemoveIPC RemoveIPC=no

如果是yes的化就需要修改:

shell
# 取消这个注释 [root@openguass1 ~]# cat /etc/systemd/logind.conf | grep RemoveIPC #RemoveIPC=no [root@openguass1 ~]# systemctl daemon-reload [root@openguass1 ~]# systemctl restart systemd-logind

关闭history配置

shell
cat /etc/profile | grep -i histsize HISTSIZE=0 source /etc/profile

设置root用户远程登录

数据库需要root互信时才开启远程连接。在各主机操作完成并且验证完毕后请及时注销root用户,避免误操作。

shell
[root@openguass1 ~]# cat /etc/ssh/sshd_config | grep -i PermitRoot PermitRootLogin yes # 注释Banner /etc/issue.net这行,因为在安装时,banner返回的信息会影响安装进程 [root@openguass1 ~]# cat /etc/ssh/sshd_config | grep -i banner # no default banner path #Banner none #Banner /etc/issue.net

确认安装用户及用户组

为了实现安装过程中安装帐户权限最小化,及安装后openGauss的系统运行安全性,安装脚本在安装过程中会自动按照用户指定内容创建安装用户,并将此用户作为后续运行和维护openGauss的管理员帐户。

用户/组名所属类型规划建议
dbgrp操作系统建议规划单独的用户组,例如dbgrp。初始化安装环境时,由-G参数所指定的安装用户所属的用户组。该用户组如果不存在,则会自动创建,也可提前创建好用户组。在执行gs_preinstall脚本时会检查权限。gs_preinstall脚本会自动赋予此组中的用户对安装目录、数据目录的访问和执行权限。创建dbgrp用户组命令:groupadd dbgrp
omm操作系统建议规划用户用于运行和维护openGauss,例如omm。初始化安装环境时,由-U参数所指定和自动创建的操作系统用户,如果已经存在该用户,请清理该用户或更换初始化用户。从安全性考虑,对此用户的所属组规划如下:所属组:dbgrp

安装opengauss

xml文件

安装openGauss前需要创建cluster_config.xml文件。cluster_config.xml文件包含部署openGauss的服务器信息、安装路径、IP地址以及端口号等。用于告知openGauss如何部署。用户需根据不同场景配置对应的XML文件。

下面以一主一备的方案为例,说明如何创建XML配置文件:

  • 配置数据库名称及各项目录
  • 配置Host基本信息
  • 配置数据库主节点信息
  • 配置CM_SERVER(主、非主)信息

配置数据库名称及各项目录

xml
<?xml version="1.0" encoding="UTF-8"?> <ROOT> <!-- 整体信息 --> <CLUSTER> <!-- 数据库名称 --> <PARAM name="clusterName" value="Cluster_template" /> <!-- 数据库节点名称(hostname) --> <PARAM name="nodeNames" value="node1_hostname,node2_hostname" /> <!-- 数据库安装目录--> <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" /> <!--数据库core文件目录--> <PARAM name="corePath" value="/opt/huawei/corefile"/> <!-- 节点IP,与nodeNames一一对应 --> <PARAM name="backIp1s" value="192.168.0.1,192.168.0.2"/> <!-- 是否开启数据库节点自选主 --> <PARAM name="enable_dcf" value="on"/> <!-- 开启开关后对应的节点IP、PORT和角色信息 --> <PARAM name="dcf_config" value="[{&quot;stream_id&quot;:1,&quot;node_id&quot;:1,&quot;ip&quot;:&quot;8.92.1.85&quot;,&quot;port&quot;:16683,&quot;role&quot;:&quot;LEADER&quot;},{&quot;stream_id&quot;:1,&quot;node_id&quot;:2,&quot;ip&quot;:&quot;8.92.1.86&quot;,&quot;port&quot;:16683,&quot;role&quot;:&quot;FOLLOWER&quot;},{&quot;stream_id&quot;:1,&quot;node_id&quot;:3,&quot;ip&quot;:&quot;8.92.1.87&quot;,&quot;port&quot;:16683,&quot;role&quot;:&quot;FOLLOWER&quot;}]"/> <!-- 资源池化模式开关 --> <PARAM name="enable_dss" value="on"/> <!-- dss实例目录 --> <PARAM name="dss_home" value="/opt/huawei/install/data/dss"/> <!-- dss共享卷名 --> <PARAM name="ss_dss_vg_name" value="data"/> <!-- dss挂载卷组名和卷组信息,包含共享卷 --> <PARAM name="dss_vg_info" value="data:/dev/sdb,p0:/dev/sdc,p1:/dev/sdd"/> <!-- cm投票卷 --> <PARAM name="votingDiskPath" value="/dev/sde"/> <!-- cm共享卷 --> <PARAM name="shareDiskDir" value="/dev/sdf"/> <!-- dss开启ssl认证开关 --> <PARAM name="dss_ssl_enable" value="on"/> <!-- mes通信协议类型 --> <PARAM name="ss_interconnect_type" value="TCP"/> <!-- rdma绑定cpu序列 --> <PARAM name="ss_rdma_work_config" value="1 7"/> <!-- VIP信息 --> <PARAM name="floatIp1" value="10.10.10.100"/> <PARAM name="floatIp2" value="20.20.20.100"/> <PARAM name="floatIp3" value="30.30.30.100"/> </CLUSTER>

image-20240419170915333

配置host基本信息

每台Host服务器都必须有如下信息,如下示例以node1为例。

xml
<!-- 每台服务器上的节点部署信息 --> <DEVICELIST> <!-- 节点1上的部署信息 --> <DEVICE sn="node1_hostname"> <!-- 节点1的主机名称 --> <PARAM name="name" value="node1_hostname" /> <!-- 节点1所在的AZ及AZ优先级 --> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 节点1的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.0.1"/> <PARAM name="sshIp1" value="192.168.0.1"/> <!-- node1是否为级联备, on表示该实例为级联备,另外级联备机在相同的AZ里需要配有备机 --> <PARAM name="cascadeRole" value="on"/>

image-20240419170943848

配置文件中所有IP参数(包含backIp、sshIp、listenIp等)均只支持配置一个IP。如果配置第二个IP参数,则不会读取第二个参数的配置值。 示例:xml配置文件中同时配置backIp1和backIp2参数: 在解析配置文件时仅读取backIp1参数的配置值,不会读取backIp2参数的配置值。

配置主节点信息

xml
<!--DBnode--> <PARAM name="dataNum" value="1"/> <!--数据库端口号--> <PARAM name="dataPortBase" value=""/> <!--DBnode侦听IP--> <PARAM name="dataListenIp1" value="10.10.10.10,20.20.20.10,30.30.30.10"/> <!--数据库主节点上的数据目录,及备机数据目录--> <PARAM name="dataNode1" value="/opt/huawei/install/data/dn,node2_hostname,/opt/huawei/install/data/dn"/> <!--数据库主节点上的xlog目录,及备机xlog目录--> <PARAM name="dataNodeXlogPath1" value="/home/omm/gauss_xlog,/home/omm/gauss_xlog "/> <!--数据库节点上设定同步模式的节点数--> <PARAM name="dataNode1_syncNum" value="0"/> <!--数据库节点上自定义设定同步模式的节点方式、数量及顺序,hostname根据主机名自行替换--> <PARAM name="syncNode_hostname" value="ANY 1(node1_hostname,node2_hostname)"/> <!--floatIp1、floatIp2为各节点或各az对应的VIP地址,用户需要保证VIP地址为可用VIP,即需要可对外提供服务的VIP(跟现有网卡处于同一网段中)dataListenIp1为各节点监听ip,该选项可以不配置,若不配置,则默认使用backIp1s的值,floatIpMap1表示floatIp与dataListenIp的对应关系,其顺序与dataListenIp1的顺序要相互对应/> <PARAM name="floatIpMap1" value="floatIp1,floatIp2,floatIp3"/>

image-20240419171023392

配置CM_SERVER(主、非主)信息

xml
<!-- cm --> <PARAM name="cmServerPortStandby" value="25500"/> <PARAM name="cmDir" value="/opt/huawei/data/cm"/>

image-20240419165124196

image-20240419165136388

image-20240419165147869

示例

单节点

xml
<?xml version="1.0" encoding="UTF-8"?> <ROOT> <!-- openGauss整体信息 --> <CLUSTER> <!-- 数据库名称 --> <PARAM name="clusterName" value="dbCluster" /> <!-- 数据库节点名称(hostname) --> <PARAM name="nodeNames" value="node1_hostname" /> <!-- 数据库安装目录--> <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" /> <!-- 数据库core文件目录--> <PARAM name="corePath" value="/opt/huawei/corefile" /> <!-- 节点IP,与数据库节点名称列表一一对应 --> <PARAM name="backIp1s" value="192.168.0.1"/> </CLUSTER> <!-- 每台服务器上的节点部署信息 --> <DEVICELIST> <!-- 节点1上的部署信息 --> <DEVICE sn="node1_hostname"> <!-- 节点1的主机名称 --> <PARAM name="name" value="node1_hostname"/> <!-- 节点1所在的AZ及AZ优先级 --> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 节点1的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.0.1"/> <PARAM name="sshIp1" value="192.168.0.1"/> <!--dbnode--> <PARAM name="dataNum" value="1"/> <PARAM name="dataPortBase" value="15400"/> <PARAM name="dataNode1" value="/opt/huawei/install/data/dn"/> <PARAM name="dataNode1_syncNum" value="0"/> </DEVICE> </DEVICELIST> </ROOT>

一主一备配置

xml
<?xml version="1.0" encoding="UTF-8"?> <ROOT> <!-- openGauss整体信息 --> <CLUSTER> <!-- 数据库名称 --> <PARAM name="clusterName" value="Cluster_template" /> <!-- 数据库节点名称(hostname) --> <PARAM name="nodeNames" value="node1_hostname,node2_hostname" /> <!-- 数据库安装目录--> <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" /> <!-- 数据库core文件目录--> <PARAM name="corePath" value="/opt/huawei/corefile"/> <!-- 节点IP,与数据库节点名称列表一一对应 --> <PARAM name="backIp1s" value="192.168.0.1,192.168.0.2"/> </CLUSTER> <!-- 每台服务器上的节点部署信息 --> <DEVICELIST> <!-- 节点1上的部署信息 --> <DEVICE sn="node1_hostname"> <!-- 节点1的主机名称 --> <PARAM name="name" value="node1_hostname"/> <!-- 节点1所在的AZ及AZ优先级 --> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 节点1的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.0.1"/> <PARAM name="sshIp1" value="192.168.0.1"/> <!--dn--> <PARAM name="dataNum" value="1"/> <PARAM name="dataPortBase" value="15400"/> <PARAM name="dataNode1" value="/opt/huawei/install/data/dn,node2_hostname,/opt/huawei/install/data/dn"/> <PARAM name="dataNode1_syncNum" value="0"/> </DEVICE> <!-- 节点2上的节点部署信息,其中“name”的值配置为主机名称 --> <DEVICE sn="node2_hostname"> <!-- 节点2的主机名称 --> <PARAM name="name" value="node2_hostname"/> <!-- 节点2所在的AZ及AZ优先级 --> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 节点2的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.0.2"/> <PARAM name="sshIp1" value="192.168.0.2"/> </DEVICE> </DEVICELIST> </ROOT>

一主一备一级连配置

xml
<?xml version="1.0" encoding="UTF-8"?> <ROOT> <!-- openGauss整体信息 --> <CLUSTER> <PARAM name="clusterName" value="Cluster_template" /> <PARAM name="nodeNames" value="node1_hostname,node2_hostname,node3_hostname" /> <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="192.168.0.1,192.168.0.2,192.168.0.3"/> </CLUSTER> <!-- 每台服务器上的节点部署信息 --> <DEVICELIST> <!-- node1上的节点部署信息 --> <DEVICE sn="node1_hostname"> <PARAM name="name" value="node1_hostname"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.0.1"/> <PARAM name="sshIp1" value="192.168.0.1"/> <!-- cm主 --> <PARAM name="cmsNum" value="1"/> <PARAM name="cmDir" value="/opt/huawei/install/cm"/> <PARAM name="cmServerPortBase" value="15300"/> <PARAM name="cmServerListenIp1" value="192.168.0.1,192.168.0.2,192.168.0.3"/> <PARAM name="cmServerHaIp1" value="192.168.0.1,192.168.0.2,192.168.0.3"/> <!-- cmServerlevel目前只支持1 --> <PARAM name="cmServerlevel" value="1"/> <!-- cms主及所有备的hostname --> <PARAM name="cmServerRelation" value="node1_hostname,node2_hostname,node3_hostname"/> <!--dn--> <PARAM name="dataNum" value="1"/> <PARAM name="dataPortBase" value="26000"/> <PARAM name="dataNode1" value="/opt/huawei/install/data/dn,node2_hostname,/opt/huawei/install/data/dn,node3_hostname,/opt/huawei/install/data/dn"/> <PARAM name="dataNode1_syncNum" value="0"/> </DEVICE> <!-- node2上的节点部署信息,其中“name”的值配置为主机名称 --> <DEVICE sn="node2_hostname"> <PARAM name="name" value="node2_hostname"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.0.2"/> <PARAM name="sshIp1" value="192.168.0.2"/> <!-- cm --> <PARAM name="cmDir" value="/opt/huawei/install/cm"/> <PARAM name="cmServerPortStandby" value="15300"/> </DEVICE> <!-- node3上的节点部署信息,其中“name”的值配置为主机名称 --> <DEVICE sn="node3_hostname"> <PARAM name="name" value="node3_hostname"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.0.3"/> <PARAM name="sshIp1" value="192.168.0.3"/> <PARAM name="cascadeRole" value="on"/> <!-- cm --> <PARAM name="cmDir" value="/opt/huawei/install/cm"/> <PARAM name="cmServerPortStandby" value="15300"/> </DEVICE> </DEVICELIST> </ROOT>

一主两备配置

xml
<?xml version="1.0" encoding="UTF-8"?> <ROOT> <!-- openGauss整体信息 --> <CLUSTER> <PARAM name="clusterName" value="Cluster_template" /> <PARAM name="nodeNames" value="node1_hostname,node2_hostname,node3_hostname" /> <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="192.168.0.1,192.168.0.2,192.168.0.3"/> </CLUSTER> <!-- 每台服务器上的节点部署信息 --> <DEVICELIST> <!-- node1上的节点部署信息 --> <DEVICE sn="node1_hostname"> <PARAM name="name" value="node1_hostname"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.0.1"/> <PARAM name="sshIp1" value="192.168.0.1"/> <!--CM节点部署信息--> <PARAM name="cmsNum" value="1"/> <PARAM name="cmServerPortBase" value="15000"/> <PARAM name="cmServerListenIp1" value="192.168.0.1,192.168.0.2,192.168.0.3"/> <PARAM name="cmServerHaIp1" value="192.168.0.1,192.168.0.2,192.168.0.3"/> <PARAM name="cmServerlevel" value="1"/> <PARAM name="cmServerRelation" value="node1_hostname,node2_hostname,node3_hostname"/> <PARAM name="cmDir" value="/opt/huawei/data/cmserver"/> <!--dn--> <PARAM name="dataNum" value="1"/> <PARAM name="dataPortBase" value="15400"/> <PARAM name="dataNode1" value="/opt/huawei/install/data/dn,node2_hostname,/opt/huawei/install/data/dn,node3_hostname,/opt/huawei/install/data/dn"/> <PARAM name="dataNode1_syncNum" value="0"/> </DEVICE> <!-- node2上的节点部署信息,其中“name”的值配置为主机名称 --> <DEVICE sn="node2_hostname"> <PARAM name="name" value="node2_hostname"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.0.2"/> <PARAM name="sshIp1" value="192.168.0.2"/> <!-- cm --> <PARAM name="cmServerPortStandby" value="15000"/> <PARAM name="cmDir" value="/opt/huawei/data/cmserver"/> </DEVICE> <!-- node3上的节点部署信息,其中“name”的值配置为主机名称 --> <DEVICE sn="node3_hostname"> <PARAM name="name" value="node3_hostname"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.0.3"/> <PARAM name="sshIp1" value="192.168.0.3"/> <!-- cm --> <PARAM name="cmServerPortStandby" value="15000"/> <PARAM name="cmDir" value="/opt/huawei/data/cmserver"/> </DEVICE> </DEVICELIST> </ROOT>

一主三备配置

xml
<?xml version="1.0" encoding="UTF-8"?> <ROOT> <!-- openGauss整体信息 --> <CLUSTER> <PARAM name="clusterName" value="Cluster_template" /> <PARAM name="nodeNames" value="node1_hostname,node2_hostname,node3_hostname,node4_hostname" /> <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="192.168.0.1,192.168.0.2,192.168.0.3,192.168.0.4"/> </CLUSTER> <!-- 每台服务器上的节点部署信息 --> <DEVICELIST> <!-- node1上的节点部署信息 --> <DEVICE sn="node1_hostname"> <PARAM name="name" value="node1_hostname"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.0.1"/> <PARAM name="sshIp1" value="192.168.0.1"/> <!--CM节点部署信息--> <PARAM name="cmsNum" value="1"/> <PARAM name="cmServerPortBase" value="15000"/> <PARAM name="cmServerListenIp1" value="192.168.0.1,192.168.0.2,192.168.0.3,192.168.0.4"/> <PARAM name="cmServerHaIp1" value="192.168.0.1,192.168.0.2,192.168.0.3,192.168.0.4"/> <PARAM name="cmServerlevel" value="1"/> <PARAM name="cmServerRelation" value="node1_hostname,node2_hostname,node3_hostname,node4_hostname"/> <PARAM name="cmDir" value="/opt/huawei/data/cmserver"/> <!--dn--> <PARAM name="dataNum" value="1"/> <PARAM name="dataPortBase" value="15400"/> <PARAM name="dataNode1" value="/opt/huawei/install/data/dn,node2_hostname,/opt/huawei/install/data/dn,node3_hostname,/opt/huawei/install/data/dn,node4_hostname,/opt/huawei/install/data/dn"/> <PARAM name="dataNode1_syncNum" value="0"/> </DEVICE> <!-- node2上的节点部署信息,其中“name”的值配置为主机名称 --> <DEVICE sn="node2_hostname"> <PARAM name="name" value="node2_hostname"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.0.2"/> <PARAM name="sshIp1" value="192.168.0.2"/> <!-- cm --> <PARAM name="cmServerPortStandby" value="15000"/> <PARAM name="cmDir" value="/opt/huawei/data/cmserver"/> </DEVICE> <!-- node3上的节点部署信息,其中“name”的值配置为主机名称 --> <DEVICE sn="node3_hostname"> <PARAM name="name" value="node3_hostname"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.0.3"/> <PARAM name="sshIp1" value="192.168.0.3"/> <!-- cm --> <PARAM name="cmServerPortStandby" value="15000"/> <PARAM name="cmDir" value="/opt/huawei/data/cmserver"/> </DEVICE> <!-- node4上的节点部署信息,其中“name”的值配置为主机名称 --> <DEVICE sn="node4_hostname"> <PARAM name="name" value="node4_hostname"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.0.4"/> <PARAM name="sshIp1" value="192.168.0.4"/> <!-- cm --> <PARAM name="cmServerPortStandby" value="15000"/> <PARAM name="cmDir" value="/opt/huawei/data/cmserver"/> </DEVICE> </DEVICELIST> </ROOT>

其它的配置示例请看:https://docs-opengauss.osinfra.cn/zh/docs/5.0.0/docs/InstallationGuide/%E5%88%9B%E5%BB%BAXML%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html

实验环境的一主一备配置

xml
<?xml version="1.0" encoding="UTF-8"?> <ROOT> <!-- openGauss整体信息 --> <CLUSTER> <!-- 数据库名称 --> <PARAM name="clusterName" value="nbubackup" /> <!-- 数据库节点名称(hostname) --> <PARAM name="nodeNames" value="openguass1,openguass2" /> <!-- 数据库安装目录--> <PARAM name="gaussdbAppPath" value="/opt/huawei/install/app" /> <!-- 日志目录--> <PARAM name="gaussdbLogPath" value="/data/opengauss/log" /> <!-- 临时文件目录--> <PARAM name="tmpMppdbPath" value="/data/opengauss/tmp"/> <!-- 数据库工具目录--> <PARAM name="gaussdbToolPath" value="/opt/huawei/install/om" /> <!-- 数据库core文件目录--> <PARAM name="corePath" value="/opt/huawei/corefile"/> <!-- 节点IP,与数据库节点名称列表一一对应 --> <PARAM name="backIp1s" value="192.168.75.68,192.168.75.69"/> </CLUSTER> <!-- 每台服务器上的节点部署信息 --> <DEVICELIST> <!-- 节点1上的部署信息 --> <DEVICE sn="openguass1"> <!-- 节点1的主机名称 --> <PARAM name="name" value="openguass1"/> <!-- 节点1所在的AZ及AZ优先级 --> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 节点1的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.75.68"/> <PARAM name="sshIp1" value="192.168.75.68"/> <!--dn--> <PARAM name="dataNum" value="1"/> <PARAM name="dataPortBase" value="15400"/> <PARAM name="dataNode1" value="/data/opengauss/data/dn,openguass2,/data/opengauss/data/dn"/> <PARAM name="dataNode1_syncNum" value="0"/> </DEVICE> <!-- 节点2上的节点部署信息,其中“name”的值配置为主机名称 --> <DEVICE sn="openguass2"> <!-- 节点2的主机名称 --> <PARAM name="name" value="openguass2"/> <!-- 节点2所在的AZ及AZ优先级 --> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 节点2的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.75.69"/> <PARAM name="sshIp1" value="192.168.75.69"/> </DEVICE> </DEVICELIST> </ROOT>

初始化安装环境

为了保证openGauss的正确安装,请首先对主机环境进行配置:

  • 准备安装用户及环境
  • 手工建立互信
  • 配置操作系统参数

主备都需要yum安装expect包,tar包,在安装的时候会需要。

准备安装用户及环境

解压文件:

shell
[root@openguass1 openGauss]# tar -zxvf openGauss-5.0.1-openEuler-64bit-all.tar.gz -o openGauss/ [root@openguass1 openGauss]# tar -zxvf openGauss-5.0.1-openEuler-64bit-om.tar.gz

进入解压后script文件夹下:

shell
[root@openguass1 script]# ./gs_preinstall -U omm -G dbgrp -X /data/opengauss.xml

过程中可能会报错,按照报错的提示解决再重新跑脚本即可。

建立互信

这个就不说了,简单。

修改系统参数

shell
[root@openguass1 script]# cat /etc/sysctl.conf kernel.sysrq=0 net.ipv4.ip_forward=0 net.ipv4.conf.all.send_redirects=0 net.ipv4.conf.default.send_redirects=0 net.ipv4.conf.all.accept_source_route=0 net.ipv4.conf.default.accept_source_route=0 net.ipv4.conf.all.accept_redirects=0 net.ipv4.conf.default.accept_redirects=0 net.ipv4.conf.all.secure_redirects=0 net.ipv4.conf.default.secure_redirects=0 net.ipv4.icmp_echo_ignore_broadcasts=1 net.ipv4.icmp_ignore_bogus_error_responses=1 net.ipv4.conf.all.rp_filter=1 net.ipv4.conf.default.rp_filter=1 net.ipv4.tcp_syncookies=1 kernel.dmesg_restrict=1 net.ipv6.conf.all.accept_redirects=0 net.ipv6.conf.default.accept_redirects=0 net.ipv4.tcp_max_tw_buckets = 10000 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_keepalive_time = 9 net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_retries2 = 12 vm.overcommit_memory = 0 net.ipv4.tcp_retries1 = 5 net.ipv4.tcp_syn_retries = 5 net.ipv4.tcp_synack_retries = 5 net.ipv4.ip_local_reserved_ports = 15400-15407,20050-20057 net.core.wmem_max = 21299200 net.ipv4.ip_local_port_range = 26000 65535 net.core.rmem_max = 21299200 net.core.wmem_default = 21299200 net.core.rmem_default = 21299200 kernel.sem = 250 6400000 1000 25600 net.ipv4.tcp_rmem = 8192 250000 16777216 net.ipv4.tcp_wmem = 8192 250000 16777216 vm.min_free_kbytes = 378985 net.core.netdev_max_backlog = 65535 net.ipv4.tcp_max_syn_backlog = 65535 net.ipv4.tcp_fin_timeout = 60 net.ipv4.tcp_sack = 1 net.ipv4.tcp_timestamps = 1 vm.extfrag_threshold = 500 vm.overcommit_ratio = 90 MTU = 8192 net.core.somaxconn = 65535 kernel.shmall = 1152921504606846720 kernel.shmmax = 18446744073709551615
参数名称参数说明预安装时是否由脚本自动设置推荐取值
net.ipv4.tcp_max_tw_buckets表示同时保持TIME_WAIT状态的TCP/IP连接最大数量。如果超过所配置的取值,TIME_WAIT将立刻被释放并打印警告信息。10000
net.ipv4.tcp_tw_reuse允许将TIME-WAIT状态的sockets重新用于新的TCP连接。0表示关闭。1表示开启。1
net.ipv4.tcp_tw_recycle表示开启TCP连接中TIME-WAIT状态sockets的快速回收。0表示关闭。1表示开启。1
net.ipv4.tcp_keepalive_time表示当keepalive启用的时候,TCP发送keepalive消息的频度。30
net.ipv4.tcp_keepalive_probes在认定连接失效之前,发送TCP的keepalive探测包数量。这个值乘以tcp_keepalive_intvl之后决定了一个连接发送了keepalive之后可以有多少时间没有回应。9
net.ipv4.tcp_keepalive_intvl当探测没有确认时,重新发送探测的频度。30
net.ipv4.tcp_retries1在连接建立过程中TCP协议最大重试次数。5
net.ipv4.tcp_syn_retriesTCP协议SYN报文最大重试次数。5
net.ipv4.tcp_synack_retriesTCP协议SYN应答报文最大重试次数。5
net.ipv4.tcp_retries2控制内核向已经建立连接的远程主机重新发送数据的次数,低值可以更早的检测到与远程主机失效的连接,因此服务器可以更快的释放该连接。发生“connection reset by peer”时可以尝试调大该值规避问题。12
vm.overcommit_memory控制在做内存分配的时候,内核的检查方式。0:表示系统会尽量精确计算当前可用的内存。1:表示不作检查直接返回成功。2:内存总量×vm.overcommit_ratio/100+SWAP的总量,如果申请空间超过此数值则返回失败。内核默认是2过于保守,推荐设置为0,如果系统压力大可以设置为1。0
net.ipv4.tcp_rmemTCP协议接收端缓冲区的可用内存大小。分无压力、有压力和压力大三个区间,单位为页面。8192 250000 16777216
net.ipv4.tcp_wmemTCP协议发送端缓冲区的可用内存大小。分无压力、有压力和压力大三个区间,单位为页面。8192 250000 16777216
net.core.wmem_maxsocket发送端缓冲区大小的最大值。21299200
net.core.rmem_maxsocket接收端缓冲区大小的最大值。21299200
net.core.wmem_defaultsocket发送端缓冲区大小的默认值。21299200
net.core.rmem_defaultsocket接收端缓冲区大小的默认值。21299200
net.ipv4.ip_local_port_range物理机可用临时端口范围。26000-65535
kernel.sem内核信号量参数设置大小。250 6400000 1000 25600
vm.min_free_kbytes保证物理内存有足够空闲空间,防止突发性换页。系统总内存的5%
net.core.somaxconn定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数。65535
net.ipv4.tcp_syncookies当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击。0表示关闭SYN Cookies。1表示开启SYN Cookies。1
net.core.netdev_max_backlog在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。65535
net.ipv4.tcp_max_syn_backlog记录的那些尚未收到客户端确认信息的连接请求的最大值。65535
net.ipv4.tcp_fin_timeout系统默认的超时时间。60
kernel.shmall内核可用的共享内存总量。1152921504606846720
kernel.shmmax内核参数定义单个共享内存段的最大值。18446744073709551615
net.ipv4.tcp_sack启用有选择的应答,通过有选择地应答乱序接受到的报文来提高性能,让发送者只发送丢失的报文段(对于广域网来说)这个选项应该启用,但是会增加对CPU的占用。0表示关闭。1表示开启。1
net.ipv4.tcp_timestampsTCP时间戳(会在TCP包头增加12节),以一种比重发超时更精确的方式(参考RFC 1323)来启用对RTT的计算,启用可以实现更好的性能。0表示关闭。1表示开启。1
vm.extfrag_threshold系统内存不够用时,linux会为当前系统内存碎片情况打分,如果超过vm.extfrag_threshold的值,kswapd就会触发memory compaction。所以这个值设置的接近1000,说明系统在内存碎片的处理倾向于把旧的页换出,以符合申请的需要,而设置接近0,表示系统在内存碎片的处理倾向做memory compaction。500
vm.overcommit_ratio系统使用绝不过量分配内存的算法时,系统整个内存地址空间不得超过swap+RAM值的此参数百分比,当vm.overcommit_memory=2时此参数生效。90
MTU节点网卡最大传输单元。OS默认值为1500,调整为8192可以提升数据收发的性能。8192

执行如下命令使修改配置生效:

sysctl -p

文件系统参数

  • soft nofile

    说明:soft nofile表示软限制,用户使用的文件句柄数量可以超过该限制,但是如果超过会有告警信息。

    推荐取值:1000000

  • hard nofile

    说明:hard nofile表示硬限制,是一个严格的限制,用户使用的文件句柄数量一定不能超过该设置。

    推荐取值:1000000

  • stack size

    说明:线程堆栈大小。

    推荐值:3072

openGauss默认关闭使用transparent_hugepage服务,并将关闭命令写入操作系统启动文件。

shell
[root@openguass1 script]# echo "* soft nofile 1000000" >>/etc/security/limits.conf [root@openguass1 script]# echo "* hard nofile 1000000" >>/etc/security/limits.conf

完成修改后,需重启操作系统使得设置的参数生效。

参数名说明预安装时是否由脚本自动设置推荐取值
* soft nofilesoft nofile表示软限制,即表示任何用户能打开的最大文件数量为1000000,不管它开启多少个shell。1000000
* hard nofilehard nofile表示硬限制,软限制要小于等于硬限制。1000000

系统支持的最大进程数设置

参数名说明预安装时是否由脚本自动设置推荐取值
* soft nprocsoft nproc参数用来限制每个用户的最大processes数量。unlimited
shell
[root@openguass1 ~]# cat /etc/security/limits.d/90-nofile.conf root soft nofile 1000000 omm soft nofile 1000000 root hard nofile 1000000 omm hard nofile 1000000 root soft nproc unlimited omm soft nproc unlimited root hard nproc unlimited omm hard nproc unlimited

网卡参数配置

参数名说明预安装时是否由脚本自动设置推荐取值
rx网卡接收队列长度设置4096
tx网卡传送队列长度设置4096
  • 网卡参数配置功能只针对万兆及万兆以上级别的业务网卡,即backIp1所绑定的网卡。
  • 设置网卡参数的命令只有在设置成功后,才会被写入系统启动文件。执行失败的信息会被记入后台日志中。

安装

安装过程

检查安装包和openGauss配置文件在规划路径下是否已存在,如果没有,重新执行预安装,确保预安装成功,再执行以下步骤。

注意:omm用户需要拥有安装包所在目录及子目录的权限。

数据库密码设置为Admin@123,omm用户密码是Admin@123,root密码是Admin@!@3

  1. 切换到omm用户

    shell
    [root@openguass1 opt]# su - omm
  2. 使用gs_install安装openGauss。若为环境变量分离的模式安装的数据库需要source环境变量分离文件ENVFILE。

    shell
    [omm@openguass1 ~]$ gs_install -X /data/opengauss.xml ... Successfully started cluster. Successfully installed application.
  3. 可以在安装时指定的参数:

    openGauss支持字符集的多种写法:gbk/GBK、UTF-8/UTF8/utf8/utf-8和Latine1/latine1。安装时若不指定字符集,默认字符集为SQL_ASCII,为简化和统一区域loacle默认设置为C,若想指定其他字符集和区域,请在安装时使用参数--gsinit-parameter="--locale=LOCALE"来指定,LOCALE为新数据库设置缺省的区域。

    shell
    # 查看支持的字符集 [root@openguass1 om]# locale -a | grep utf8 C.utf8 en_AG.utf8 en_AU.utf8 en_BW.utf8 en_CA.utf8 en_DK.utf8 en_GB.utf8 en_HK.utf8 en_IE.utf8 ... # 编译时指定字符集 gs_install -X /opt/software/openGauss/cluster_config.xml --gsinit-parameter="--locale=en_US.utf8"

安装生成的目录

image-20240422163144757

错误排查

如果安装失败请根据openGauss日志目录下的“gs_install-YYYY-MM-DD_HHMMSS.log”和“gs_local-YYYY-MM-DD_HHMMSS.log”中的日志信息排查错误。

安装验证

通过openGauss提供的gs_om工具可以完成数据库状态检查。

  1. 以omm用户登录

  2. 检查数据库状态

    shell
    [omm@openguass1 ~]$ gs_om -t status ----------------------------------------------------------------------- cluster_name : nbubackup cluster_state : Normal redistributing : No -----------------------------------------------------------------------
  3. 数据库安装完成后,默认生成名称为postgres的数据库。第一次连接数据库时可以连接到此数据库。

    其中postgres为需要连接的数据库名称,15400为数据库主节点的端口号,即XML配置文件中的dataPortBase的值。请根据实际情况替换。

    shell
    [omm@openguass1 ~]$ gsql -d postgres -p 15400 gsql ((openGauss 5.0.1 build 33b035fd) compiled at 2023-12-15 19:51:49 commit 0 last mr ) Non-SSL connection (SSL connection is recommended when requiring high-security) Type "help" for help. openGauss=#

初始化数据库

使用SQL语句创建数据库时,指定数据库的字符集为GBK。

shell
openGauss-# CREATE DATABASE mydb WITH ENCODING 'GBK' template = template0; openGauss-# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+-------+-----------+---------+-------+------------------- mydb | omm | GBK | C | C | postgres | omm | SQL_ASCII | C | C | template0 | omm | SQL_ASCII | C | C | =c/omm + | | | | | omm=CTc/omm template1 | omm | SQL_ASCII | C | C | =c/omm + | | | | | omm=CTc/omm (4 rows)

设置备机可读

  1. 如果主备机上的openGauss数据库实例正在运行,请先分别停止主备机上的数据库实例。
  2. 分别打开主机与备机的postgresql.conf配置文件,找到并将对应参数修改为:wal_level=hot_standby;hot_standby = on;hot_standby_feedback = on。
  3. 参数max_standby_streaming_delay、 max_prepared_transactions、 max_standby_archive_delay、 hot_standby_feedback可以参考《数据库参考》按需进行设置。
  4. 修改完成后,分别启动主备机即可。

卸载

https://docs-opengauss.osinfra.cn/zh/docs/5.0.0/docs/InstallationGuide/%E5%8D%B8%E8%BD%BDopenGauss.html

使用教程

基本概念

逻辑架构

image-20240422173124017

  1. Tablespace,即表空间,是一个目录,可以存在多个,里面存储的是它所包含的数据库的各种物理文件。每个表空间可以对应多个Database。
  2. Database,即数据库,用于管理各类数据对象,各数据库间相互隔离。数据库管理的对象可分布在多个Tablespace上。
  3. Datafile Segment,即数据文件,通常每张表只对应一个数据文件。如果某张表的数据大于1GB,则会分为多个数据文件存储。
  4. Table,即表,每张表只能属于一个数据库,也只能对应到一个Tablespace。每张表对应的数据文件必须在同一个Tablespace中。
  5. Block,即数据块,是数据库管理的基本单位,默认大小为8KB。

表空间就是一个文件系统目录,用于存储各种实际的数据库对象。

语法

默认情况下,数据库安装成功,登录后,可以使用\help语句查看所有openGauss的SQL语法。

shell
openGauss=# \help Available help: ABORT CREATE DATA SOURCE DROP NODE ALTER APP WORKLOAD GROUP CREATE DATABASE DROP NODE GROUP ALTER APP WORKLOAD GROUP MAPPING CREATE DIRECTORY DROP OPERATOR ALTER AUDIT POLICY CREATE EVENT DROP OWNED ...