当前位置: 首页 > news >正文

在 Docker 中搭建GBase 8s主备集群环境

本文介绍了如何在同一台机器上使用 Docker 容器搭建GBase 8s主备集群环境。

拉取镜像

拉取GBase 8s的最新镜像

docker pull liaosnet/gbase8s

或者

docker pull liaosnet/gbase8s:v8.8_3513x25_csdk_x64

注:在tag为v8.8_3513x25_csdk_x64及之后的版本中,可通过参数方式自动创建集群

拉取镜像成功后,可通过docker images查看拉取镜像的版本。

创建自定义网络

Docker安装后,默认会创建三种网络。bridge网络是默认情况下启动Docker容器的网络,为Docker安装时创建的桥接网络,每次Docker容器重启时,会按照顺序获取对应的IP地址,这会导致Docker重启后IP地址的改变。因此在搭建一些集群软件的时候,组件和组件之间需要进行网络通信,如果没有固定分配的IP,容器提供的服务将是不可靠的。每次主机重启时,如果容器没有固定IP,容器的IP将由启动顺序决定。这将导致主备集群容器之间访问异常,从而使得服务提供失败;因此需要将容器的IP固定下来。这里我们就需要创建自定义的docker的bridge网络。
使用docker network create来创建自定义网络,创建命令如下:

docker network create --subnet=172.20.0.0/24 --gateway=172.20.0.1 mynetwork

创建网络成功后,可通过docker network ls查看docker的网络。
数据库集群将使用到172.20.0.21及172.20.0.22这两个IP地址。

创建数据卷(可选)

可以创建数据卷用于持久化数据库的数据。

docker volume create gbase_pri_data

docker volume create gbase_hac_data

注:未指定数据卷目录将默认使用/var/lib/docker/volumes/数据卷名/_data 目录

创建数据卷成功后,可通过docker volume ls查看数据卷。
不创建数据卷,也可使用-v的映射目录的方式进行持久化数据。

创建主节点容器

使用docker run来创建启动主节点容器,启动命令如下:

docker run -d -p 19188:9088 \
  --network mynetwork --ip 172.20.0.21 \
  --name node01 --hostname node01 \
  --privileged=true \
  -v /data/gbase_pri:/opt/gbase/data \
  -e SERVERNAME=gbase01 \
  -e MODE=primary \
  -e LOCALIP=172.20.0.21 \
  -e PAIRENAME=gbase02 \
  -e PAIREIP=172.20.0.22 \
  -e USERPASS=GBase123$% \
  -e CPUS=1 \
  -e MEMS=2048 \
  -e ADTS=0 \
  liaosnet/gbase8s:v8.8_3513x25_csdk_x64

以上面的启动命令进行如下说明:

-p 19188:9088
	将容器中的数据库端口号9088映射到宿主机上的19088端口,应用可以通过宿主机IP:19088端口访问容器中的数据库服务。如需要外部访问,此参数必须配置。
--network mynetwork
	指定容器使用自建的桥接网络,名称为mynetwork。如需要使用集群,此参数必须配置。
--ip 172.20.0.21
	指定容器使用自建的桥接网络下的IP地址。如需要使用集群,此参数必须配置。
--name node01
	指定容器使用的名称。
--hostname node01
	指定容器内使用的主机名称。
--privileged=true
	指定容器在特权模式下运行。有-v参数时,此参数必须配置。
-v /data/gbase_pri:/opt/gbase/data
	指定挂载宿主目录/data/gbase_pri到容器内/opt/gbase/data数据库数据目录。这里也可以使用数据卷的方式,如 -v gbase_pri_data:/opt/gbase/data
-e SERVERNAME=gbase01
	指定数据库服务/实例名称。
-e MODE=primary
	指定容器内数据库为主节点。
-e LOCALIP=172.20.0.21
	指定本节点使用的IP地址。
-e PAIRENAME=gbase02
	指定集群对端节点数据库服务/实例名称。
-e PAIREIP=172.20.0.22
	指定集群对端节点使用的IP地址。
-e USERPASS=GBase123$%
	指定gbasedbt用户密码。
-e CPUS=1
	指定容器内数据库使用CPU个数。
-e MEMS=2048
	指定容器内数据库使用内存大小(单位MB)
-e ADTS=0
	指定容器内数据库是否开启审计。
liaosnet/gbase8s:v8.8_3513x25_csdk_x64
	指定容器使用的镜像名称及版本。此参数必须配置。

容器启动完成后,使用docker logs node01查看启动情况

docker logs node01

最后一行显示类似如下,表示已经启动到主节点

[2025-02-26 14:48:07] Change mode to PRIMARY.

创建备节点容器

使用docker run来创建启动备节点容器,启动命令如下:

docker run -d -p 19288:9088 \
  --network mynetwork --ip 172.20.0.22 \
  --name node02 --hostname node02 \
  --privileged=true \
  -v /data/gbase_sec:/opt/gbase/data \
  -e SERVERNAME=gbase02 \
  -e MODE=secondary \
  -e LOCALIP=172.20.0.22 \
  -e PAIRENAME=gbase01 \
  -e PAIREIP=172.20.0.21 \
  -e USERPASS=GBase123$% \
  -e CPUS=1 \
  -e MEMS=2048 \
  -e ADTS=0 \
  liaosnet/gbase8s:v8.8_3513x25_csdk_x64

以上面的启动命令,注意与主节点命令的区别。

容器启动完成后,使用docker logs node02查看启动情况

docker logs node02

最后一行显示类似如下,表示已经启动并加入到集群中成为备节点

[2025-02-26 14:49:13] Add datbase to cluster as secondary mode.

查看及进入容器

容器启动完导后,使用docker ps来查看容器启动情况,命令如下:

docker ps 

通过docker logs来查看容器的日志,查看启动情况

docker logs node01

docker logs node02

通过docker exec进入容器,然后切换到gbasedbt用户下

docker exec -it node01 bash
su - gbasedbt

docker exec -it node02 bash
su - gbasedbt

容器内数据库集群主备切换

容器内的集群切换与常规集群切换相同(使用DRAUTO值为1,主节点保持模式),当主节点(node01)所在的容器关闭时,备节点(node02)所在的容器升为标准节点;当原主节点(node01)恢复后,node01将恢复成主节点,而node2降级为备节点。
使用docker stop关闭主节点(node01)

docker stop node01

使用docker logs 查看容器内状态

docker logs node02 -f

备节点(node02)数据库升级为标准模式(5),类似如下

[2025-02-26 14:49:50] DATABASE STATUS CHANGE! LAST STATUS: 2, CURRENT: 5.

重新启动原主节点(node01),而后查看数据库状态

docker start node01
docker logs node01 -f

原主节点(node01)重新升级为主用(5)

[2025-02-26 14:52:41] DATABASE STATUS CHANGE! LAST STATUS: 2, CURRENT: 5.

查看备节点(node02)上的数据库状态

docker logs node02 -f

备节点(node02)的状态降级为备用(2)

[2025-02-26 14:52:40] DATABASE STATUS CHANGE! LAST STATUS: 5, CURRENT: 2.

相关文章:

  • 002-SpringCloud-OpenFeign(远程调用)
  • OpenCV计算摄影学(17)两个图像之间执行无缝克隆操作函数 seamlessClone()
  • 设计模式-结构型模式-适配器模式
  • 【SpringMVC】深入解析@ RequestMapping 注解的概念及使用和 MVC 介绍
  • 利用可变参数模板,可打印任意参数和参数值。(C++很好的调式函数)
  • Deepseek可以通过多种方式帮助CAD加速工作
  • Docker和DockerCompose基础教程及安装教程
  • dify中使用NL2SQL
  • Java直通车系列15【Spring MVC】(ModelAndView 使用)
  • 计算机视觉|从0到1揭秘Diffusion:图像生成领域的新革命
  • SpreadVue实现内置excel在线编辑并保存为后端可以接受的json格式
  • Centos操作系统大全(附ISO镜像下载)
  • 电商项目-秒杀系统(五) 秒杀下单接口限流
  • 使用Modelsim手动仿真
  • 题目 3217 ⭐成绩统计⭐【滑动窗口 + 二分搜索】蓝桥杯2024年第十五届省赛
  • 大白话 CSS 中transform属性的常见变换类型(平移、旋转、缩放等)及使用场景
  • 管理 SELinux 安全性
  • 正则表达式详解
  • android13打基础: timepicker控件
  • Vue 3 ref(new Map()) 无法触发watch
  • 鞍山公司网站建设/公司网站建设需要注意什么
  • 做网站的公司需要哪些资质/湖南seo优化公司
  • 网站建设的整体流程/百度快速收录提交工具
  • wordpress+增加域名/seo视频网页入口网站推广
  • 山西通州集团网站建设/邯郸seo营销
  • 深圳公司网站推广/seo网络优化