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

news2025/3/10 7:43:37

本文介绍了如何在同一台机器上使用 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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2312565.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在el-input搜索框组件的最后面,添加图标按钮?

1、问题描述 2、解决步骤 在el-input组件标签内,添加一个element-plus的自定义插槽, 在插槽里放一个图标按钮即可。 3、效果展示 结语 以上就是在搜索框组件的末尾添加搜索按钮的过程。 喜欢本篇文章的话,请关注本博主~~

NoteGen是一款开源跨平台的 AI 笔记应用,专注于 recording 和 writing ,基于 Tauri 开发

一、软件介绍 文末提供程序和源码下载 NoteGen 是一款专注于记录和写作的跨平台 AI 笔记应用,基于 Tauri 开发。NoteGen 的核心理念是将记录、写作和 AI 结合使用,三者相辅相成。记录功能可以帮助用户快速捕捉和整理碎片化知识。整理功能是连接记录和写…

第五次CCF-CSP认证(含C++源码)

第五次CCF-CSP认证 第一道(easy)思路及AC代码 第二道(easy)思路及AC代码solution 1solution 2 第三道(mid)思路及AC代码(mid) 第一道(easy) 题目链接 思路及…

个人学习编程(3-06) 搜索

树的高度&#xff1a; 题目&#xff1a; PS G:\vscodetest> .\ab.exe 5 5 1 2 1 4 1 5 2 3 3 #include <stdio.h> #include <vector> #include <queue> using namespace std; int main() {int n,m;scanf("%d %d",&n,&m);vector<vec…

springcloud sentinel教程

‌QPS&#xff08;Queries Per Second&#xff09;即每秒查询率 TPS&#xff0c;每秒处理的事务数目 PV&#xff08;page view&#xff09;即页面浏览量 UV 访问数&#xff08;Unique Visitor&#xff09;指独立访客访问数 一、初识Sentinel 什么是雪崩问题? 微服务之间相…

从零开始用react + tailwindcss + express + mongodb实现一个聊天程序(十一) 实现服务端和客户端socketio 连接

1.后端部分 socketIO文档参考Socket.IO 首先在lib下新建socket.js文件 参考服务器API | Socket.IO import {Server} from socket.io; import http from http import express from "express"const app express() const server http.createServer(app) const io …

【GoTeams】-3:构建api、重构错误码

本文目录 1. 构建api梳理调用关系api包的作用路由梳理注册Register代码语法 2. 重构错误码 1. 构建api 首先复制project-user&#xff0c;改名为project-api&#xff0c;放在总的路径下&#xff0c;然后在工作区中进行导入。 运行命令go work use .\project-api\新建工作区之…

《苍穹外卖》SpringBoot后端开发项目重点知识整理(DAY1 to DAY3)

目录 一、在本地部署并启动Nginx服务1. 解压Nginx压缩包2. 启动Nginx服务3. 验证Nginx是否启动成功&#xff1a; 二、导入接口文档1. 黑马程序员提供的YApi平台2. YApi Pro平台3. 推荐工具&#xff1a;Apifox 三、Swagger1. 常用注解1.1 Api与ApiModel1.2 ApiModelProperty与Ap…

BLUEM2引擎源码2025最新版

BLUE 引擎解析&#xff1a;传奇私服圈中的热门引擎 一、BLUE 引擎简介 BLUE 引擎是传奇私服圈子中较为知名的一款游戏引擎&#xff0c;它在传统的传奇引擎基础上进行了优化和扩展&#xff0c;使得私服开发者可以更加方便地搭建和管理服务器。相比于早期的 GEE、LEG、Hero 等引…

【RAG】检索后排序 提高回答精度

问题: RAG中&#xff0c;有时&#xff0c;最合适的答案不一定排在检索的最前面 user_query "how safe is llama 2" search_results vector_db.search(user_query, 5)for doc in search_results[documents][0]:print(doc"\n")response bot.chat(user_qu…

采用内存局部性分配有什么好处?

内存分配时的局部性分配&#xff08;Locality of Allocation&#xff09;是指将相关的内存对象分配在相邻或相近的内存区域中。这种分配策略在现代计算机系统中具有显著的好处&#xff0c;主要体现在以下几个方面&#xff1a; 1. 提高缓存命中率 现代计算机系统依赖于多级缓存…

【Dubbo+Zookeeper】——SpringBoot+Dubbo+Zookeeper知识整合

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

使用阿里云操作系统控制台排查内存溢出

引言 操作系统控制台是阿里云最新推出的一款智能运维工具&#xff0c;专为提升运维效率、优化服务器管理而设计。它集成了多种运维管理功能&#xff0c;包括操作系统助手、插件管理器以及其他实用工具&#xff0c;为用户提供一站式的运维解决方案。无论是个人开发者还是企业运…

3.3.2 Proteus第一个仿真图

文章目录 文章介绍0 效果图1 新建“点灯”项目2 添加元器件3 元器件布局接线4 补充 文章介绍 本文介绍&#xff1a;使用Proteus仿真软件画第一个仿真图 0 效果图 1 新建“点灯”项目 修改项目名称和路径&#xff0c;之后一直点“下一步”直到完成 2 添加元器件 点击元…

深入了解Linux —— 调试程序

前言 我们已经学习了linux下许多的工具&#xff0c;vim、gcc、make/makefile等&#xff1b; 已经能够在linux写代码&#xff0c;并且进行编译运行&#xff0c;让程序在linux下跑起来。 但是&#xff0c;如果我们在写代码的时候遇见了错误&#xff1b;但是我们并不知道错误在哪&…

Hive-优化(语法优化篇)

列裁剪与分区裁剪 在生产环境中&#xff0c;会面临列很多或者数据量很大时&#xff0c;如果使用select * 或者不指定分区进行全列或者全表扫描时效率很低。Hive在读取数据时&#xff0c;可以只读取查询中所需要的列&#xff0c;忽视其他的列&#xff0c;这样做可以节省读取开销…

八字排盘宝 2025.1.8 | 多模式排盘工具,精准解析八字信息,轻量易用

八字排盘宝是一款轻量高效的排盘工具&#xff0c;实现多模式排盘功能&#xff0c;界面简洁易用&#xff0c;适合命理爱好者和专业人士。支持多种排盘方式&#xff0c;精准解析八字信息&#xff0c;提供快速、便捷的命理分析体验&#xff0c;是日常排盘和命理学习的得力助手。 …

MySQL面试篇——性能优化

MySQL性能优化 在MySQL中&#xff0c;如何定位慢查询 慢查询表象&#xff1a;页面加载过慢、接口压测响应时间过长&#xff08;超过1s&#xff09;。造成慢查询的原因通常有&#xff1a;聚合查询、多表查询、表数据量过大查询、深度分页查询 方案一&#xff1a;开源工具 调试工…

c#财务软件专业版企业会计做账软件财务管理系统软件

本软件为绍兴客户开发的仿某碟财务软件专业版 功能&#xff1a;可以按会计科目做账录入会计凭证、结转损益、期末结账、拉资产负债表 github下载&#xff1a;https://github.com/oyangxizhe/financial.git

【含文档+PPT+源码】Python爬虫人口老龄化大数据分析平台的设计与实现

项目介绍 本课程演示的是一款Python爬虫人口老龄化大数据分析平台的设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本…