在 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_datadocker 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 node01docker logs node02
通过docker exec进入容器,然后切换到gbasedbt用户下
docker exec -it node01 bash
su - gbasedbtdocker 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.
相关文章:
在 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及之后的版本中,…...
【MySQL-数据类型】数据类型分类+数值类型+文本、二进制类型+String类型
一、数据类型分类 二、数值类型 1.bit类型 测试环境ubuntu 基本语法: bit[(M)]:位字段类型,M表示每个值的位数,范围从1~64;如果M被忽略,默认为1举例: create table testBit(id i…...
小谈java内存马
基础知识 (代码功底不好,就找ai优化了一下) Java内存马是一种利用Java虚拟机(JVM)动态特性(如类加载机制、反射技术等)在内存中注入恶意代码的攻击手段。它不需要在磁盘上写入文件,…...
简单的二元语言模型bigram实现
内容总结归纳自视频:【珍藏】从头开始用代码构建GPT - 大神Andrej Karpathy 的“神经网络从Zero到Hero 系列”之七_哔哩哔哩_bilibili 项目:https://github.com/karpathy/ng-video-lecture Bigram模型是基于当前Token预测下一个Token的模型。例如&#x…...
【清华大学】实用DeepSeek赋能家庭教育 56页PDF文档完整版
清华大学-56页:实用DeepSeek赋能家庭教育.pdf https://pan.baidu.com/s/1BUweVDeG2M8-t0QaIs3LHQ?pwd1234 提取码: 1234 或 https://pan.quark.cn/s/8a9473493bb0 《实用DeepSeek赋能家庭教育》基于清华大学研究成果,系统阐述了DeepSeek人工智能技…...
黑洞如何阻止光子逃逸
虽然涉及广义相对论,但广义相对论说的是大质量物体对周围空间的影响,而不是说周围空间和空间中的光子之间的关系。也就是说,若讨论光子逃逸问题,则不必限定于大质量的前提,也就是说,若质量周围被扭曲的空间…...
1.4 单元测试与热部署
本次实战实现Spring Boot的单元测试与热部署功能。单元测试方面,通过JUnit和Mockito等工具,结合SpringBootTest注解,可以模拟真实环境对应用组件进行独立测试,验证逻辑正确性,提升代码质量。具体演示了HelloWorld01和H…...
window系统中的start命令详解
start 是 Windows 系统中用于启动新进程或打开新窗口来运行指定程序或命令的命令。以下是对 start 命令参数的详细解释: 基本语法 start ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED] [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENO…...
AI编程工具节选
1、文心快码 百度基于文心大模型推出的一款智能编码助手, 官网地址:文心快码(Baidu Comate)更懂你的智能代码助手 2、通义灵码 阿里云出品的一款基于通义大模型的智能编码辅助工具, 官网地址:通义灵码_你的智能编码助手-阿里云 …...
正则表达式,idea,插件anyrule
package lx;import java.util.regex.Pattern;public class lxx {public static void main(String[] args) {//正则表达式//写一个电话号码的正则表达式String regex "1[3-9]\\d{9}";//第一个数字是1,第二个数字是3-9,后面跟着9个数字…...
原生iOS集成react-native (react-native 0.65+)
由于官方文档比较老,很多配置都不能用,集成的时候遇到很多坑,简单的整理一下 时间节点:2021年9月1日 本文主要提供一些配置信息以及错误信息解决方案,具体步骤可以参照官方文档 原版文档:https://reactnative.dev/docs…...
java错题总结
本篇文章用来记录学习javaSE以来的错题 解答:重载要求俩个方法的名字相同,但参数的类型或者个数不同,但是不要求返回类型相同,所以A正确。 重写还需要要求返回类型相同(呈现父子类关系也可以,但是属于特例&…...
【商城实战(10)】解锁商品信息录入与展示的技术密码
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
2025年主流原型工具测评:墨刀、Axure、Figma、Sketch
2025年主流原型工具测评:墨刀、Axure、Figma、Sketch 要说2025年国内产品经理使用的主流原型设计工具,当然是墨刀、Axure、Figma和Sketch了,但是很多刚入行的产品经理不了解自己适合哪些工具,本文将从核心优势、局限短板、协作能…...
MDM 如何彻底改变医疗设备的远程管理
在现代医疗行业迅速发展的格局中,医院和诊所越来越依赖诸如医疗平板和移动工作站等移动设备。这些设备在提高工作效率和提供卓越的患者护理方面发挥着关键作用。然而,随着它们的广泛使用,也带来了一系列挑战,例如在不同地点确保数…...
OpenCV计算摄影学(18)平滑图像中的纹理区域同时保留边缘信息函数textureFlattening()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::textureFlattening 是 OpenCV 中用于图像处理的一个函数,旨在平滑图像中的纹理区域,同时保留边缘信息。该技术特别适…...
用DeepSeek学Android开发:Android初学者遇到的常见问题有哪些?如何解决?
答案来自 DeepSeek Q: Android初学者遇到的常见问题有哪些?如何解决? A: Android初学者在学习过程中常会遇到以下问题及对应的解决方法,按类别整理如下: 一、开发环境问题 Android Studio安装或配置问题 问题:安装失…...
springboot 集成 MongoDB 基础篇
demo架构: Book Controller: package com.zy.controller;import com.zy.entity.Book; import com.zy.service.MongoDbService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.Get…...
大白话html语义化标签优势与应用场景
大白话html语义化标签优势与应用场景 大白话解释 语义化标签就是那些名字能让人一看就大概知道它是用来做什么的标签。以前我们经常用<div>来做各种布局,但是<div>本身没有什么实际的含义,就像一个没有名字的盒子。而语义化标签就像是有名…...
恶劣天候三维目标检测论文列表整理
恶劣天候三维目标检测论文列表 图摘自Kradar 🏠 介绍 Hi,这是有关恶劣天气下三维目标检测的论文列表。主要是来源于近3年研究过程中认为有意义的文章。希望能为新入门的研究者提供一些帮助。 可能比较简陋,存在一定的遗漏,欢迎…...
OpenClaw调试技巧:QwQ-32B任务失败的根本原因分析
OpenClaw调试技巧:QwQ-32B任务失败的根本原因分析 1. 问题背景与诊断框架 上周我在尝试用OpenClaw对接本地部署的QwQ-32B模型时,遇到了一个典型问题:简单的文件整理任务总是执行到一半就中断,控制台只显示"模型响应超时&qu…...
ApiPost实战指南:从接口创建到自动化测试的全流程解析
1. 从零开始创建你的第一个API接口 作为一个常年和API打交道的开发者,我深知新手第一次接触接口工具时的迷茫。ApiPost作为一款国产的API开发工具,用起来确实比Postman更顺手,特别是对中文用户特别友好。下面我就带你一步步创建第一个接口&am…...
用Rust还是JavaScript?Tauri 2.0系统托盘开发的两种姿势与选型建议
Tauri 2.0系统托盘开发:Rust与JavaScript的技术选型深度解析 当桌面应用需要常驻后台运行时,系统托盘功能便成为用户体验的关键组件。Tauri 2.0作为新一代跨平台桌面框架,允许开发者在前端JavaScript与后端Rust两种技术栈中实现这一功能。本文…...
pykg2vec功能mastery:知识图谱嵌入模型的高级配置与优化
pykg2vec功能mastery:知识图谱嵌入模型的高级配置与优化 【免费下载链接】pykg2vec 项目地址: https://gitcode.com/gh_mirrors/py/pykg2vec 问题导入 知识图谱嵌入模型训练中,开发者常面临三大痛点:模型参数调优耗时且效果不佳、不…...
2026 LinkedIn账号安全机制分析与稳定运营实践
随着 LinkedIn 风控机制的不断完善,账号的登录环境、行为模式以及网络条件,都会直接影响账号的稳定性。对于需要长期运营账号的用户来说,理解平台的风控逻辑,比单纯增加操作频率更为重要。本文将从使用场景、常见环境问题、账号行…...
老旧Mac如何重获新生?OCLP-Mod带来的系统升级解决方案
老旧Mac如何重获新生?OCLP-Mod带来的系统升级解决方案 【免费下载链接】OCLP-Mod A mod version for OCLP,with more interesting features. 项目地址: https://gitcode.com/gh_mirrors/oc/OCLP-Mod 随着科技的快速迭代,许多曾经性能卓越的Mac设备…...
时间切片:24小时
基于双层优化的电动汽车优化调度研究 代码主要做的是一个双层的电动汽车充放电行为优化问题,具体来讲,输电网上层优化将电动汽车与发电机、基本负荷协调,同时考虑风力发电,从而在时域内优化电动汽车的负荷周期。 然后,…...
GStreamer性能优化指南:在Jetson TX2上实现4K视频低延迟处理(基于NVMM内存)
GStreamer性能优化指南:在Jetson TX2上实现4K视频低延迟处理(基于NVMM内存) 在嵌入式视觉和实时视频处理领域,NVIDIA Jetson TX2凭借其强大的GPU和专用硬件加速单元,成为工业级应用的理想选择。但要将这块开发板的性能…...
如何用Python爬取全国空气质量监测站数据(附完整代码与避坑指南)
Python实战:构建高稳定性的空气质量监测数据爬虫系统 清晨打开天气应用时,那些跳动的PM2.5数值背后,是遍布全国的空气质量监测站在持续工作。作为数据分析师或环境研究者,直接获取这些原始监测数据往往能发现更有价值的规律。但当…...
Avalonia跨平台开发踩坑记:我的第一个带最小化/关闭按钮的MVVM应用
Avalonia跨平台开发实战:从零构建MVVM窗口控制应用 第一次接触Avalonia时,我被它"一次编写,多平台运行"的承诺所吸引。作为一个长期使用WPF的开发者,跨平台桌面应用开发一直是个痛点。但当我真正开始用Avalonia实现一个…...
