通过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 工具无法使用
相关推荐
摸鱼也很难21 分钟前
Docker 镜像加速和配置的分享 && 云服务器搭建beef-xss
运维·docker·容器
woshilys1 小时前
sql server 查询对象的修改时间
运维·数据库·sqlserver
疯狂飙车的蜗牛1 小时前
从零玩转CanMV-K230(4)-小核Linux驱动开发参考
linux·运维·驱动开发
恩爸编程2 小时前
探索 Nginx:Web 世界的幕后英雄
运维·nginx·nginx反向代理·nginx是什么·nginx静态资源服务器·nginx服务器·nginx解决哪些问题
鸠摩智首席音效师3 小时前
Docker 中如何限制CPU和内存的使用 ?
docker·容器
Michaelwubo3 小时前
Docker dockerfile镜像编码 centos7
运维·docker·容器
jingyu飞鸟4 小时前
centos-stream9系统安装docker
linux·docker·centos
好像是个likun4 小时前
使用docker拉取镜像很慢或者总是超时的问题
运维·docker·容器
玖疯子6 小时前
介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
docker
暴富的Tdy6 小时前
【快速上手Docker 简单配置方法】
docker·容器·eureka