openGauss容器化升级流程记录

本文主要记录我的一次容器化升级流程。

环境准备

1、下载openGauss-server代码的docker目录至本地

2、准备所需镜像对应的版本的包

创建一个所需版本的版本号的目录,类似于上图中的5.0.0,下载对应版本的包至当前dockerfiles目录,并解压出其中的内核包,将其放到对应的版本号目录。例如我需要3.0.0和3.0.5两个版本的镜像,我的环境如下

3、升级准备

升级工具

升级目标版本也就是新版本的升级脚本

创建镜像

创建3.0.0版本镜像

sh buildDockerImage.sh -v 3.0.0 -i

创建旧版本1主2备容器集群

bash create_master_slave.sh --SLAVE_COUNT 2 --NETWORK_NAME net_xuemn --VERSION 3.0.0 --MASTER_HOST_PORT 4432

做升级的容器是必须要做数据持久化的,可自行修改create_master_slave.sh脚本,添加持久化参数-v

其他参数如备机个数、旧版本号、主备端口号、网络名称等可以自行指定,或修改创建容器的脚本

检查集群状态

docker exec dn_6001 su - omm -c "gs_ctl query -D /var/lib/opengauss/data"

docker exec dn_6002 su - omm -c "gs_ctl query -D /var/lib/opengauss/data"

docker exec dn_6003 su - omm -c "gs_ctl query -D /var/lib/opengauss/data"

准备升级工具目录及新包

创建upgrade目录,也可以直接使用下载的目录,在upgrade目录中创建pkg_new目录,并将新版本升级脚本和版本文件移入其中。

将升级工具包拷贝到容器内

docker cp /data2/xuemn/docker/upgrade dn_6001:/var/lib/opengauss/

docker exec dn_6001  chown omm:omm /var/lib/opengauss/upgrade/ -R

docker exec dn_6001  ls -al /var/lib/opengauss/upgrade/

docker cp /data2/xuemn/containers/dn_6001/upgrade dn_6002:/var/lib/opengauss/

docker cp /data2/xuemn/containers/dn_6001/upgrade dn_6003:/var/lib/opengauss/

升级测试

其他操作准备

设置同步备,关闭最大可用模式

docker exec dn_6001 su - omm -c "gs_guc reload -D /var/lib/opengauss/data/  -c \"synchronous_standby_names = '2(dn_6002,dn_6003)'\" -c \"most_available_sync=off\""

这一步是我的测试所需要的,按需执行即可。

步骤一  所有节点执行前置升级

docker exec dn_6001 su - omm -c "sh /var/lib/opengauss/upgrade/upgrade.sh -B /var/lib/opengauss/upgrade -N /var/lib/opengauss/upgrade/pkg_new -t upgrade_pre"

docker exec dn_6002 su - omm -c "sh /var/lib/opengauss/upgrade/upgrade.sh -B /var/lib/opengauss/upgrade -N /var/lib/opengauss/upgrade/pkg_new -t upgrade_pre"

docker exec dn_6003 su - omm -c "sh /var/lib/opengauss/upgrade/upgrade.sh -B /var/lib/opengauss/upgrade -N /var/lib/opengauss/upgrade/pkg_new -t upgrade_pre"

故障测试场景1  执行前置操作前,注入节点3被停掉的故障

主机上查询状态如下

主机上执行前置升级

从执行结果可以看到成功拦截到故障问题。

步骤二 停掉所有容器

docker exec dn_6003  su - omm -c "gs_ctl stop -D /var/lib/opengauss/data/"

docker exec dn_6002  su - omm -c "gs_ctl stop -D /var/lib/opengauss/data/"

docker exec dn_6001  su - omm -c "gs_ctl stop -D /var/lib/opengauss/data/"

步骤三 启动新版本容器并执行upgrade_bin

docker run --network net_xuemn --ip 182.11.0.101 --privileged=true --name dn_6001_305 -h dn_6001 -p 4432:4432 -v /data2/xuemn/containers/dn_6001/:/var/lib/opengauss -it --entrypoint /bin/bash opengauss:3.0.5

su - omm -c "sh /var/lib/opengauss/upgrade/upgrade.sh -B /var/lib/opengauss/upgrade -N /var/lib/opengauss/upgrade/pkg_new -t upgrade_bin"

docker run --network net_xuemn --ip 182.11.0.102 --privileged=true --name dn_6002_305 -h dn_6002 -p 6432:6432 -v /data2/xuemn/containers/dn_6002/:/var/lib/opengauss -it --entrypoint /bin/bash opengauss:3.0.5

su - omm -c "sh /var/lib/opengauss/upgrade/upgrade.sh -B /var/lib/opengauss/upgrade -N /var/lib/opengauss/upgrade/pkg_new -t upgrade_bin"

docker run --network net_xuemn --ip 182.11.0.103 --privileged=true --name dn_6003_305 -h dn_6003 -p 7432:7432 -v /data2/xuemn/containers/dn_6003/:/var/lib/opengauss -it --entrypoint /bin/bash opengauss:3.0.5

su - omm -c "sh /var/lib/opengauss/upgrade/upgrade.sh -B /var/lib/opengauss/upgrade -N /var/lib/opengauss/upgrade/pkg_new -t upgrade_bin"

故障测试场景2  停旧容器时,有一个容器未停掉

步骤四 所有节点执行后置升级

su - omm -c "sh /var/lib/opengauss/upgrade/upgrade.sh -B /var/lib/opengauss/upgrade -N /var/lib/opengauss/upgrade/pkg_new -t upgrade_post"

故障测试场景3  有备机未连接上主机

有备机未连接上主机的场景,成功检测到并退出后置升级

故障修复后再次执行后置升级,成功

故障测试场景4 注入旧容器未停掉的故障

步骤五 提交

所有节点执行升级提交动作

su - omm -c "sh /var/lib/opengauss/upgrade/upgrade.sh -B /var/lib/opengauss/upgrade -N /var/lib/opengauss/upgrade/pkg_new -t upgrade_commit"

至此,升级完成。

其他可能用到的命令

进入运行中的容器

docker exec -ti dn_6001 /bin/bash

环境清理

docker rm dn_6001 dn_6002 dn_6003 dn_6002_305 dn_6001_305 dn_6003_305 -f; docker network rm net_xuemn;

rm /data2/xuemn/containers/dn_600*/* -rf

调试

docker run --network net_xuemn --ip 182.11.0.101 --privileged=true --name dn_6001 -h dn_6001 -p 4432:4432 -e GS_PORT=4432 -e OG_SUBNET=182.11.0.0/24 -e GS_PASSWORD=Enmo@123 -e NODE_NAME=dn_6001 -e "REPL_CONN_INFO=replconninfo1 = 'localhost=182.11.0.101 localport=4433 localservice=4436 localheartbeatport=4437 remotehost=182.11.0.102 remoteport=6433 remoteservice=6436 remoteheartbeatport=6437'\n replconninfo2 = 'localhost=182.11.0.101 localport=4433 localservice=4436 localheartbeatport=4437 remotehost=182.11.0.103 remoteport=7433 remoteservice=7436 remoteheartbeatport=7437'\n replconninfo3 = 'localhost=182.11.0.101 localport=4433 localservice=4436 localheartbeatport=4437 remotehost=182.11.0.104 remoteport=8433 remoteservice=8436 remoteheartbeatport=8437'\n" -it --entrypoint /bin/bash opengauss:3.0.0

  • 21
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值