文章目录
- 0.前言
- 1. 准备软硬件安装环境
- 1.1 软硬件环境要求
- 1.2 修改操作系统配置
- 1.2.1 关闭操作系统防火墙
- 1.3 设置字符集参数
- 1.4 设置时区和时间
- (可选)关闭swap交换内存
- 1.5 关闭RemoveIPC
- 1.6 关闭HISTORY记录
- 2. 容器安装
- 2. 1支持的架构和操作系统版本
- 2. 2 配置准备
- 2. 3 单机数据库容器安装
- 2. 3.1 创建openGauss docker镜像
- 2.3.2 环境变量
- 2.3.3 开启实例
- 2.3.5 数据持久化
- 2.4 CM容器化部署
- 2.4.1 创建openGauss docker镜像
- 2.4.2 使用社区发布的镜像
- 2.4.3 启动容器
- 如果多个容器部署在一台机器上,创建一个普通的容器网络即可:
- 如果容器跨多个节点部署,即要求节点间的容器能够进行通信。业界有多种实现方式,这里提供一种作为参考,用户可以自行选择。
- 2.4.4 进入容器中查看实例状态
0.前言
docker安装还有一些坑 但具体在你安装过程中可以根据错误提示解决
1. 准备软硬件安装环境
本章节描述安装前需要进行的环境准备。
1.1 软硬件环境要求
介绍openGauss的软硬件环境要求。建议部署openGauss的各服务器具有等价的软硬件配置。
1.1.1 硬件环境要求
表1 列出了openGauss服务器应具备的最低硬件要求。在实际产品中,硬件配置的规划需考虑数据规模及所期望的数据库响应速度。请根据实际情况进行规划。
表 1 硬件环境要求
- 每个主机需大约300MB用于元数据存储。
- 预留70%以上的磁盘剩余空间用于数据存储。建议系统盘配置为RAID1,数据盘配置为RAID5,且规划4组RAID5数据盘用于安装openGauss。有关RAID的配置方法在本手册中不做介绍。请参考硬件厂家的手册或互联网上的方法进行配置,其中Disk Cache Policy一项需要设置为Disabled,否则机器异常掉电后有数据丢失的风险。openGauss支持使用SSD盘作为数据库的主存储设备,支持SAS接口和NVME协议的SSD盘,以RAID的方式部署使用。 |
| 网络要求 | 300兆以上以太网。建议网卡设置为双网卡冗余bond。有关网卡冗余bond的配置方法在本手册中不做介绍。请参考硬件厂商的手册或互联网上的方法进行配置。 |
软件环境要求
表 2 软件环境要求
软件类型 | 配置描述 |
---|---|
Linux操作系统 | - ARM: |
- openEuler 20.03LTS(推荐采用此操作系统)
- openEuler 22.03LTS
- 麒麟V10
- Asianux 7.5
-
-
openEuler 20.03LTS
-
openEuler 22.03LTS
-
CentOS 7.6
-
Asianux 7.6
说明:当前安装包只能在英文操作系统上安装使用。 |
| Linux文件系统 | 剩余inode个数 > 15亿(推荐) |
| 工具 | bzip2 |
| Python | - 支持Python3.6+ |
-
软件依赖要求
openGauss的软件依赖要求如[表3 ]所示。
建议使用上述操作系统安装光盘或者源中,下列依赖软件的默认安装包,若不存在下列软件,可参看软件对应的建议版本。
表 3 软件依赖要求
1.2 修改操作系统配置
注意:
以下动作需要以root用户进行操作操作完成后请及时注销root用户,避免误操作。
1.2.1 关闭操作系统防火墙
为了在防火墙开启的状态下,确保openGauss的正常使用,用户需要将同openGauss相关的服务、协议、IP以及端口添加到openGauss主机的防火墙白名单中。
以openEuler操作系统为例,假设openGauss信息如表4所示。
表 4 openGauss信息
主机名称 | 内部IP | 外部IP |
---|---|---|
plat1 | 192.168.0.11 | 10.10.0.11 |
管理网络 | - | 10.10.64.236 |
目前仅支持在防火墙关闭的状态下进行安装。
-
修改/etc/selinux/config文件中的“SELINUX”值为“disabled”。
a. 使用VIM打开config文件。
""vim /etc/selinux/config
b. 修改“SELINUX”的值“disabled”,执行**:wq**保存并退出修改。
""SELINUX=disabled
-
重新启动操作系统。
""reboot
-
检查防火墙是否关闭。
""systemctl status firewalld
若防火墙状态显示为active (running),则表示防火墙未关闭,请执行4;
若防火墙状态显示为inactive (dead),则无需再关闭防火墙。
-
""systemctl disable firewalld.service systemctl stop firewalld.service
-
在其他主机上重复步骤1到步骤4。
1.3 设置字符集参数
将各数据库节点的字符集设置为相同的字符集,可以在/etc/profile文件中添加“export LANG=XXX”(XXX为Unicode编码)。
""vim /etc/profile
1.4 设置时区和时间
在各数据库节点上,确保时区和时间一致。
-
执行如下命令检查各数据库节点时间和时区是否一致。如果各数据库节点时间和时区不一致区,请执行步骤2~步骤3。
""date
-
使用如下命令将各数据库节点/usr/share/zoneinfo/目录下的时区文件拷贝为/etc/localtime文件。
""cp /usr/share/zoneinfo/$地区/$时区 /etc/localtime
说明:
$地区/$时区
为需要设置时区的信息,例如:Asia_Shanghai。 -
使用date -s命令将各数据库节点的时间设置为统一时间,举例如下。
""date -s "Sat Sep 27 16:00:07 CST 2020"
(可选)关闭swap交换内存
说明:
关闭swap交换内存是为了保障数据库的访问性能,避免把数据库的缓冲区内存淘汰到磁盘上。 如果服务器内存比较小,内存过载时,可打开swap交换内存保障正常运行。
在各数据库节点上,使用swapoff -a命令将交换内存关闭。
""swapoff -a
1.5 关闭RemoveIPC
在各数据库节点上,关闭RemoveIPC。CentOS操作系统默认为关闭,可以跳过该步骤。
-
修改/etc/systemd/logind.conf文件中的“RemoveIPC”值为“no”。
a. 使用VIM打开logind.conf文件。
""vim /etc/systemd/logind.conf
b. 修改“RemoveIPC”值为“no”。
""RemoveIPC=no
-
修改/usr/lib/systemd/system/systemd-logind.service文件中的“RemoveIPC”值为“no”。
a. 使用VIM打开systemd-logind.service文件。
""vim /usr/lib/systemd/system/systemd-logind.service
b. 修改“RemoveIPC”值为“no”。
""RemoveIPC=no
-
重新加载配置参数。
""systemctl daemon-reload systemctl restart systemd-logind
-
检查修改是否生效。
""loginctl show-session | grep RemoveIPC systemctl show systemd-logind | grep RemoveIPC
-
在其他主机上重复步骤1到步骤4。
1.6 关闭HISTORY记录
说明:
为避免指令历史记录安全隐患,需关闭各主机的history指令。
步骤 1 修改根目录下/etc/profile文件。
""vim /etc/profile
步骤 2 设置HISTSIZE值为0。例如,系统中HISTSIZE默认值为1000,将其修改为0。
""HISTSIZE=0
步骤 3 保存/etc/profile。
"":wq
步骤 4 设置/etc/profile生效。
""source /etc/profile
2. 容器安装
本章节主要介绍通过Docker安装openGauss,方便DevOps用户的安装、配置和环境设置。
2. 1支持的架构和操作系统版本
- x86-64 CentOS 7.6
- ARM64 openEuler 20.03 LTS
2. 2 配置准备
使用 buildDockerImage.sh脚本构建docker镜像,buildDockerImage.sh是一个方便使用的shell脚本,提供SHA256的检查。
2. 3 单机数据库容器安装
2. 3.1 创建openGauss docker镜像
说明:
- 安装前需要提供openGauss二进制安装包,解压后将以bz2结尾的包(openGauss-X.X.X-CentOS-64bit.tar.bz2)放到 dockerfiles/文件夹。二进制包可以从 https://www.opengauss.org/zh/download/下载,确保有正确的yum源。
- 运行buildDockerImage.sh脚本时,如果不指定-i参数,此时默认提供SHA256检查,需要您手动将校验结果写入sha256_file_amd64文件。
""## 修改sha256校验文件内容 cd /soft/openGauss-server/docker/dockerfiles/3.0.0 sha256sum openGauss-3.0.0-CentOS-64bit.tar.bz2 > sha256_file_amd64
- 安装前需要从华为开源镜像站获取openEuler_aarch64.repo文件,并放到openGauss-server-master/docker/dockerfiles/3.0.0文件夹下面。openEuler_aarch64.repo获取方法:
""wget -O openEuler_aarch64.repo https://mirrors.huaweicloud.com/repository/conf/openeuler_aarch64.repo
在dockerfiles文件夹运行buildDockerImage.sh脚本。
""[root@ecs-complie dockerfiles]# ./buildDockerImage.sh
Usage: buildDockerImage.sh -v [version] [-i] [Docker build option]
Builds a Docker Image for openGauss
Parameters:
-v: version to build
Choose one of: 3.0.0
-i: ignores the SHA256 checksums
LICENSE UPL 1.0
2.3.2 环境变量
为了更灵活的使用openGauss镜像,可以设置额外的参数。未来我们会扩充更多的可控制参数,当前版本支持以下变量的设定。
GS_PASSWORD
使用openGauss镜像的时候,必须设置该参数。该参数值不能为空或者不定义。该参数设置了openGauss数据库的超级用户omm以及测试用户gaussdb的密码。openGauss安装时默认会创建omm超级用户,该用户名暂时无法修改。测试用户gaussdb是在entrypoint.sh中自定义创建的用户。
openGauss镜像配置了本地信任机制,因此在容器内连接数据库无需密码,但是如果要从容器外部(其它主机或者其它容器)连接则必须要输入密码。
openGauss的密码有复杂度要求
密码长度8个字符以上,必须同时包含大写字母、小写字母、数字、以及特殊符号(特殊符号仅包含“#?!@ %^&*-”,并且“! &”需要用转义符“\”进行转义)。
GS_NODENAME
指定数据库节点名称,默认为gaussdb。
GS_USERNAME
指定数据库连接用户名,默认为gaussdb。
GS_PORT
指定数据库端口,默认为5432。
2.3.3 开启实例
""$ docker run --name opengauss --privileged=true -d -e GS_PASSWORD=Enmo@123 opengauss:2.0.0
2.3.4 从操作系统层面连接数据库
""$ docker run --name opengauss --privileged=true -d -e GS_PASSWORD=Enmo@123 -p8888:5432 opengauss:2.0.0
$ gsql -d postgres -U gaussdb -W'Enmo@123' -h your-host-ip -p8888
2.3.5 数据持久化
""$ docker run --name opengauss --privileged=true -d -e GS_PASSWORD=Enmo@123 -v /opengauss:/var/lib/opengauss opengauss:2.0.0
说明
- 对于使用其他版本的数据库构建容器镜像,可以参考
openGauss-server/docker/dockerfiles/3.0.0
里面的配置文件,只需要修改为对应的版本号即可。- 对于构建openEuler-arm的容器镜像,如果
openeuler-20.03-lts:latest
镜像下载不下来,可以在openEuler官方网站http://121.36.97.194/openEuler-20.03-LTS/docker_img/aarch64/
下载容器镜像压缩包openEuler-docker.aarch64.tar.xz
,然后使用docker load -i openEuler-docker.aarch64.tar.xz
导入到本地镜像列表。- 在进行构建时候,如果遇到yum源下载超时,请检查下代理,也可以在buildDockerImage.sh脚本里面的
docker build
命令后加上--network host
使用宿主机的网络。
2.4 CM容器化部署
2.4.1 创建openGauss docker镜像
下载openGauss-docker仓库代码,构建脚本在该仓库中管理。
- 构建镜像需要openGauss社区发布的企业版本包,openGauss-*-64bit-all.tar.gz。放到
openGauss-docker/dockerfiles
目录下。- 运行buildDockerImage.sh脚本时,如果不指定-i参数,此时默认提供SHA256检查,需要您手动将校验结果写入sha256_file_amd64文件。
""## 修改sha256校验文件内容 cd `openGauss-docker/dockerfiles` sha256sum openGauss-5.0.0-CentOS-64bit-all.tar.gz > sha256_file_amd64
- 对于x86平台,使用社区发布的Centos_x86_64的包;对于arm平台,使用发布的openEuler-arm版本企业包。
构建命令:
""sh buildDockerImage.sh -v 5.0.0 -i
2.4.2 使用社区发布的镜像
最新的容器镜像:
x86_64平台:
""docker pull swr.cn-south-1.myhuaweicloud.com/opengauss/x86_64/opengauss:5.0.0
docker tag swr.cn-south-1.myhuaweicloud.com/opengauss/x86_64/opengauss:5.0.0 opengauss:5.0.0
arm平台:
""docker pull swr.cn-south-1.myhuaweicloud.com/opengauss/arm/opengauss:5.0.0
docker tag swr.cn-south-1.myhuaweicloud.com/opengauss/arm/opengauss:5.0.0 opengauss:5.0.0
2.4.3 启动容器
搭建CM集群至少需要两个容器实例才能使用。
- 创建容器网络
如果多个容器部署在一台机器上,创建一个普通的容器网络即可:
docker network create --subnet=172.11.0.0/24 og-network
如果容器跨多个节点部署,即要求节点间的容器能够进行通信。业界有多种实现方式,这里提供一种作为参考,用户可以自行选择。
选择一台部署progrium/consul容器:
""docker pull progrium/consul
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
每个节点的docker都进行修改: vim /usr/lib/systemd/system/docker.service 在ExecStart一栏后面追加:
""-H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --cluster-store=consul://192.168.0.94:8500 --cluster-advertise=eth0:2376
192.168.0.94 是部署consul的机器ip。
修改完成后需要重启docker:
""systemctl daemon-reload
systemctl restart docker
创建overlay网络
""docker network create -d overlay --subnet 10.22.1.0/24 --gateway 10.22.1.1 og-network
- 启动多个容器实例
""# ip需要和容器网络在同一网段,几个实例的ip和节点名称不能重复。如下示例1主2备:
primary_nodeip="172.11.0.2"
standby1_nodeip="172.11.0.3"
standby2_nodeip="172.11.0.4"
primary_nodename=primary
standby1_nodename=standby1
standby2_nodename=standby2
OG_NETWORK=og-network
GS_PASSWORD=test@123
# 启动实例1
docker run -d -it -P --sysctl kernel.sem="250 6400000 1000 25600" --security-opt seccomp=unconfined -v /data/opengauss_volume:/volume --name opengauss-01 --net ${OG_NETWORK} --ip "$primary_nodeip" -h=$primary_nodename -e primaryhost="$primary_nodeip" -e primaryname="$primary_nodename" -e standbyhosts="$standby1_nodeip, $standby2_nodeip" -e standbynames="$standby1_nodename, $standby2_nodename" -e GS_PASSWORD=$GS_PASSWORD opengauss:5.0.0
# 启动实例2
docker run -d -it -P --sysctl kernel.sem="250 6400000 1000 25600" --security-opt seccomp=unconfined -v /data/opengauss_volume:/volume --name opengauss-02 --net ${OG_NETWORK} --ip "$standby1_nodeip" -h=$standby1_nodename -e primaryhost="$primary_nodeip" -e primaryname="$primary_nodename" -e standbyhosts="$standby1_nodeip, $standby2_nodeip" -e standbynames="$standby1_nodename, $standby2_nodename" -e GS_PASSWORD=$GS_PASSWORD opengauss:5.0.0
# 启动实例3
docker run -d -it -P --sysctl kernel.sem="250 6400000 1000 25600" --security-opt seccomp=unconfined -v /data/opengauss_volume:/volume --name opengauss-03 --net ${OG_NETWORK} --ip "$standby2_nodeip" -h=$standby2_nodename -e primaryhost="$primary_nodeip" -e primaryname="$primary_nodename" -e standbyhosts="$standby1_nodeip, $standby2_nodeip" -e standbynames="$standby1_nodename, $standby2_nodename" -e GS_PASSWORD=$GS_PASSWORD opengauss:5.0.0
- 使用脚本快速启动1主2备的cm集群容器实例
在openGauss-docker
目录下,执行sh create_cm_contariners.sh
""This script will create three containers with cm on a single node. \n
Please input OG_SUBNET (容器所在网段) [172.11.0.0/24]:
OG_SUBNET set 172.11.0.0/24
Please input OG_NETWORK (容器网络名称) [og-network]:
OG_NETWORK set og-network
Please input GS_PASSWORD (定义数据库密码)[test@123]:
GS_PASSWORD set
Please input openGauss VERSION [5.0.0]:
openGauss VERSION set 5.0.0
starting create docker containers...
会让填入容器网段、容器网络名称、数据库密码、容器版本号。使用默认值得话可以直接回车跳过。 脚本执行完成后,会拉起3个容器实例,组成1主2备的cm集群。
2.4.4 进入容器中查看实例状态
- 进入容器
""docker exec -ti <containerid> /bin/bash
su - omm
- 查看集群状态
""cm_ctl query -Cvid
- 连接接数据库
""gsql -d postgres -r
说明
- 构建的容器需要包含操作系统层
- 容器内仅提供CM和数据库内核工具,OM工具无法使用