通过Docker实现openGauss的快速容器化安装

容器安装

本章节主要介绍通过 Docker 安装 openGauss,方便 DevOps 用户的安装、配置和环境设置。

支持的架构和操作系统版本

  • x86-64 CentOS 7.6

  • ARM64 openEuler 20.03 LTS

配置准备

使用 buildDockerImage.sh 脚本构建 docker 镜像,buildDockerImage.sh 是一个方便使用的 shell 脚本,提供 SHA256 的检查。buildDockerImage. 脚本可以从 server 仓库(https://gitee.com/opengauss/openGauss-server/tree/master/docker/dockerfiles)或者 container 仓库(https://gitee.com/opengauss/openGauss-container)下载。

单机数据库容器安装

创建 openGauss docker 镜像

说明:

  • 安装前需要提供 openGauss 二进制安装包,解压后将以 bz2 结尾的包(openGauss-X.X.X-CentOS-64bit.tar.bz2,X.X.X 诶 openGauss 当前版本号)放到 dockerfiles/<version> 文件夹。二进制包可以从 /zh/download/ 下载,确保有正确的 yum 源。

  • 运行 buildDockerImage.sh 脚本时,如果不指定 - i 参数,此时默认提供 SHA256 检查,需要您手动将校验结果写入 sha256_file_amd64 文件。

    修改sha256校验文件内容

    cd /soft/openGauss-server/docker/dockerfiles/X.X.X
    sha256sum openGauss-X.X.X-CentOS-64bit.tar.bz2 > sha256_file_amd64

  • 安装前需要从华为开源镜像站获取 openEuler_aarch64.repo 文件,并放到 openGauss-server-master/docker/dockerfiles/X.X.X 文件夹下面。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: X.X.X
   -i: ignores the SHA256 checksums

LICENSE UPL 1.0

环境变量

为了更灵活的使用 openGauss 镜像,可以设置额外的参数。未来我们会扩充更多的可控制参数,当前版本支持以下变量的设定。

GS_PASSWORD

使用 openGauss 镜像的时候,必须设置该参数。该参数值不能为空或者不定义。该参数设置了 openGauss 数据库的超级用户 omm 以及测试用户 gaussdb 的密码。openGauss 安装时默认会创建 omm 超级用户,该用户名暂时无法修改。测试用户 gaussdb 是在 entrypoint.sh 中自定义创建的用户。

openGauss 镜像配置了本地信任机制,因此在容器内连接数据库无需密码,但是如果要从容器外部(其它主机或者其它容器)连接则必须要输入密码。

openGauss 的密码有复杂度要求

密码长度 8 个字符以上,必须同时包含大写字母、小写字母、数字、以及特殊符号(特殊符号仅包含 "#?!@%\^\&\*-",并且 "!&" 需要用转义符 "\" 进行转义)。

GS_NODENAME

指定数据库节点名称,默认为 gaussdb。

GS_USERNAME

指定数据库连接用户名,默认为 gaussdb。

GS_PORT

指定数据库端口,默认为 5432。

开启实例

复制代码
$ docker run --name opengauss --privileged=true -d -e GS_PASSWORD=Enmo@123 opengauss:X.X.X

从操作系统层面连接数据库

复制代码
$ docker run --name opengauss --privileged=true -d -e GS_PASSWORD=Enmo@123 -p8888:5432 opengauss:X.X.X
$ gsql -d postgres -U gaussdb -W'Enmo@123' -h your-host-ip -p8888

数据持久化

复制代码
$ docker run --name opengauss --privileged=true -d -e GS_PASSWORD=Enmo@123 -v /opengauss:/var/lib/opengauss opengaussX.X.X

说明

  1. 对于使用其他版本的数据库构建容器镜像,可以参考 openGauss-server/docker/dockerfiles/X.X.X 里面的配置文件,只需要修改为对应的版本号即可。

  2. 对于构建 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 导入到本地镜像列表。

  3. 在进行构建时候,如果遇到 yum 源下载超时,请检查下代理,也可以在 buildDockerImage.sh 脚本里面的 docker build 命令后加上 --network host 使用宿主机的网络。

CM 容器化部署

创建 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-X.X.X-CentOS-64bit-all.tar.gz > sha256_file_amd64

  • 对于 x86 平台,使用社区发布的 Centos_x86_64 的包;对于 arm 平台,使用发布的 openEuler-arm 版本企业包。

构建命令:

复制代码
sh buildDockerImage.sh -v X.X.X -i

使用社区发布的镜像

最新的容器镜像:

x86_64 平台:

复制代码
docker pull swr.cn-south-1.myhuaweicloud.com/opengauss/x86_64/opengauss:X.X.X
docker tag swr.cn-south-1.myhuaweicloud.com/opengauss/x86_64/opengauss:X.X.X opengauss:X.X.X

arm 平台:

复制代码
docker pull swr.cn-south-1.myhuaweicloud.com/opengauss/arm/opengauss:X.X.X
docker tag swr.cn-south-1.myhuaweicloud.com/opengauss/arm/opengauss:X.X.X opengauss:X.X.X

启动容器

搭建 CM 集群至少需要两个容器实例才能使用。

  1. 创建容器网络

如果多个容器部署在一台机器上,创建一个普通的容器网络即可:

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
  1. 启动多个容器实例

    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 --ulimit nofile=1000000:1000000 --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:X.X.X

    启动实例2

    docker run -d -it -P --ulimit nofile=1000000:1000000 --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:X.X.X

    启动实例3

    docker run -d -it -P --ulimit nofile=1000000:1000000 --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:X.X.X

  2. 使用脚本快速启动 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 [X.X.X]: 
openGauss VERSION set X.X.X
starting  create docker containers...

会让填入容器网段、容器网络名称、数据库密码、容器版本号。使用默认值得话可以直接回车跳过。 脚本执行完成后,会拉起 3 个容器实例,组成 1 主 2 备的 cm 集群。

进入容器中查看实例状态

  1. 进入容器

    docker exec -ti <containerid> /bin/bash
    su - omm

  2. 查看集群状态

    cm_ctl query -Cvid

  3. 连接接数据库

    gsql -d postgres -r

说明

    1. 构建的容器需要包含操作系统层
    1. 容器内仅提供 CM 和数据库内核工具,OM 工具无法使用
相关推荐
一心09231 分钟前
ubuntu 20.04.6 sudo 源码包在线升级到1.9.17p1
运维·ubuntu·sudo·漏洞升级
好好学习啊天天向上33 分钟前
世上最全:ubuntu 上及天河超算上源码编译llvm遇到的坑,cmake,ninja完整过程
linux·运维·ubuntu·自动性能优化
你想考研啊1 小时前
三、jenkins使用tomcat部署项目
运维·tomcat·jenkins
代码老y2 小时前
Docker:容器化技术的基石与实践指南
运维·docker·容器
典学长编程2 小时前
Linux操作系统从入门到精通!第二天(命令行)
linux·运维·chrome
DuelCode3 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
你想考研啊4 小时前
四、jenkins自动构建和设置邮箱
运维·jenkins
Code blocks4 小时前
使用Jenkins完成springboot项目快速更新
java·运维·spring boot·后端·jenkins
饥饿的半导体5 小时前
Linux快速入门
linux·运维
杨浦老苏7 小时前
开源服务运行监控工具Lunalytics
docker·群晖·网站监控