使用docker-compose搭建达梦数据库主备集群

目录

1. Docker集群的搭建

2. 检查主备数据库

3. 主备集群的JDBC连接设置


1. Docker集群的搭建

达梦的镜像文件都是tar文件,通过docker load命令导入:

docker load -i dm8_20240422_x86_rh6_64_rq_ent_8.1.3.140.tar

成功导入后,可看到镜像的仓库名和标签:

docker images
REPOSITORY   TAG                                 IMAGE ID       CREATED       SIZE
dm8          dm8_20240422_rev222308_x86_rh6_64   c6c32f5a271c   6 weeks ago   1.25GB

选择一个目录创建我们的docker-compose.yml文件:

networks:dmnet:driver: bridgeipam:config:- subnet: 172.20.0.0/24
services:dm_monitor:container_name: dm_monitorimage: dm8:dm8_20240422_rev222308_x86_rh6_64networks:dmnet:ipv4_address: 172.20.0.2restart: alwaysvolumes:- ./data/monitor:/opt/dmdbms/dataenvironment:- MODE=docker_dmwatcher- PAGE_SIZE=16- CASE_SENSITIVE=1- UNICODE_FLAG=1- LENGTH_IN_CHAR=1- SYSDBA_PWD=SYSDBA001- DMWATCHER_ROLE=monitor- CLUSTER_IPS="172.20.0.2,172.20.0.3,172.20.0.4"- LD_LIBRARY_PATH=/opt/dmdbms/bindm_primary:container_name: dm_primaryimage: dm8:dm8_20240422_rev222308_x86_rh6_64networks:dmnet:ipv4_address: 172.20.0.3ports:- '30136:5236'restart: alwaysvolumes:- ./data/primary:/opt/dmdbms/dataenvironment:- MODE=docker_dmwatcher- PAGE_SIZE=16- CASE_SENSITIVE=1- UNICODE_FLAG=1- LENGTH_IN_CHAR=1- SYSDBA_PWD=SYSDBA001- DMWATCHER_ROLE=primary- DW_NO=1- CLUSTER_IPS="172.20.0.2,172.20.0.3,172.20.0.4"- LD_LIBRARY_PATH=/opt/dmdbms/bindepends_on:- dm_monitordm_standby:container_name: dm_standbyimage: dm8:dm8_20240422_rev222308_x86_rh6_64networks:dmnet:ipv4_address: 172.20.0.4ports:- '30236:5236'restart: alwaysvolumes:- ./data/standby:/opt/dmdbms/dataenvironment:- MODE=docker_dmwatcher- PAGE_SIZE=16- CASE_SENSITIVE=1- UNICODE_FLAG=1- LENGTH_IN_CHAR=1- SYSDBA_PWD=SYSDBA001- DMWATCHER_ROLE=standby- DW_NO=2- CLUSTER_IPS="172.20.0.2,172.20.0.3,172.20.0.4"- LD_LIBRARY_PATH=/opt/dmdbms/bindepends_on:- dm_primary

就在这个docker-compose.yml文件的目录下,执行docker-compose载入配置:

docker-compose up -d --wait

载入完成后可以查看运行着的3个容器:

docker ps --format "table {{.Image}}\t{{.Ports}}\t{{.Names}}"
IMAGE                                   PORTS                                           NAMES
dm8:dm8_20240422_rev222308_x86_rh6_64   52141/tcp, 61141/tcp, 0.0.0.0:30236->5236/tcp   dm_standby
dm8:dm8_20240422_rev222308_x86_rh6_64   52141/tcp, 61141/tcp, 0.0.0.0:30136->5236/tcp   dm_primary
dm8:dm8_20240422_rev222308_x86_rh6_64   5236/tcp, 52141/tcp, 61141/tcp                  dm_monitor

可以检查日志来确认3个容器都初始化完成:

docker logs dm_primary | more
docker logs dm_standby | more
docker logs dm_monitor | more

有可能standby或monitor节点没有能正常启动,这时就需要手动将primary节点的数据库tar文件和备份tar文件手动复制到没有能复制的standby或monitor节点的数据目录。然后再重启相应的standby或monitor容器。

cp data/primary/*.tar data/standby
docker restart dm_standbycp data/primary/*.tar data/monitor
docker restart dm_monitor

也可以直接检查这些tar文件:

ls -l1 data/*/*.tar
data/monitor/BACKUP_FILE_01.tar
data/monitor/DAMENG.tar
data/primary/BACKUP_FILE_01.tar
data/primary/DAMENG.tar
data/standby/BACKUP_FILE_01.tar
data/standby/DAMENG.tar

2. 检查主备数据库

我们开两个Console窗口:一个窗口先进入容器dm_monitor,然后尝试连接各自主数据库和备用数据库;另一个窗口用来停止和启动主数据库和备用数据库的运行容器,从而模仿实际情况下数据库的宕机和重启。

docker exec -it dm_monitor bash

这样就以root用户登陆到了dm_monitor的命令行窗口。然后尝试连接dm_primary节点的主数据库,既可以用容器名dm_primary,也可以用docker-compose.yml文件中定义的IP地址172.20.0.3:

/opt/dmdbms/bin/disql SYSDBA/SYSDBA001@dm_primary:5236## OR/opt/dmdbms/bin/disql SYSDBA/SYSDBA001@172.20.0.3:5236

这时就会显示进入了集群数据库主节点的SQL模式:

Server[dm_primary:5236]:mode is primary, state is open
login used time : 41.247(ms)
disql V8
SQL>## ORServer[172.20.0.3:5236]:mode is primary, state is open
login used time : 11.328(ms)
disql V8
SQL>

quit退出后,又尝试备用节点dm_standby,或IP 172.20.0.4:

/opt/dmdbms/bin/disql SYSDBA/SYSDBA001@dm_standby:5236## OR/opt/dmdbms/bin/disql SYSDBA/SYSDBA001@172.20.0.4:5236

显示进入了集群数据库备用节点的SQL模式:

Server[dm_standby:5236]:mode is standby, state is open
login used time : 33.271(ms)
disql V8## ORServer[172.20.0.4:5236]:mode is standby, state is open
login used time : 11.359(ms)
disql V8

另外,可以通过跟踪dm_monitor节点的日志来判定主备服务器的状态及变化情况:

docker logs dm_monitor -f
......
[monitor]         2024-06-10 17:08:32: <MON CHECK GRP453331_DW1>
[monitor]         2024-06-10 17:08:32: Dmwatcher process GRP453331_DW1 status switching [STARTUP-->OPEN]WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN2024-06-10 17:08:32  OPEN           OK        GRP453331_DW1    OPEN        PRIMARY   VALID    4        43564           43564[monitor]         2024-06-10 17:08:32: </MON CHECK GRP453331_DW1>[monitor]         2024-06-10 17:08:32: <MON CHECK GRP453331_DW2>
[monitor]         2024-06-10 17:08:32: Dmwatcher process GRP453331_DW2 status switching [STARTUP-->OPEN]WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN2024-06-10 17:08:32  OPEN           OK        GRP453331_DW2    OPEN        STANDBY   VALID    4        43564           43564[monitor]         2024-06-10 17:08:32: </MON CHECK GRP453331_DW2>
......

请注意“INAME”和“IMODE”这两列,分别是数据库实体的名字和实体的主备模式。这里看到实体GRP453331_DW1的模式为PRIMARY,而实体GRP453331_DW2的模式为STANDBY。

3. 主备集群的JDBC连接设置

达梦的服务网站可以下载JDBC驱动程序:产品下载 | 达梦数据库,而在其技术文档中有基本的JDBC连接配置说明:JDBC 接口 | 达梦技术文档。

jdbc:dm[://host][:port][?propName1=propValue1][&propName2=propValue2]...

然而,主备集群的JDBC连接url有所不同:

jdbc:dm://dmconn?dmconn=(host1:port1,host2:port2,host3:port3)

我在DBeaver中分别配置了单服务器和主备服务集群的驱动模版,然后用它们又配置了主数据库和备用数据库各自的连接,以及涵盖主备数据库的集群的连接。

单数据库服务器的驱动模版:

以及主数据库和备用数据库各自的连接:

而集群的驱动模版设置如下:

由此设置的数据库集群连接为:

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

刚刚❗️德勤2025校招暑期实习测评笔试SHL测评题库已发(答案)

&#x1f4e3;德勤 2024暑期实习测评已发&#xff0c;正在申请的小伙伴看过来哦&#x1f440; ㊙️本次暑期实习优先考虑2025年本科及以上学历的毕业生&#xff0c;此次只有“审计及鉴定”“税务与商务咨询”两个部门开放了岗位~ ⚠️测评注意事项&#xff1a; &#x1f44…

【JAVASE】java语法(成员变量与局部变量的区别、赋值运算符中的易错点)

一&#xff1a;成员变量与局部变量的区别 区别 成员变量 局部变量 类中位置不同 …

Java:110-SpringMVC的底层原理(上篇)

SpringMVC的底层原理 在前面我们学习了SpringMVC的使用&#xff08;67章博客开始&#xff09;&#xff0c;现在开始说明他的原理&#xff08;实际上更多的细节只存在67章博客中&#xff0c;这篇博客只是讲一点深度&#xff0c;重复的东西尽量少说明点&#xff09; MVC 体系结…

2024 AEE | 风丘科技将亮相日本爱知国际会展中心——共同创造!

2024年名古屋汽车工程博览会&#xff08;Automotive Engineering Exposition 2024 NAGOYA&#xff09;将于7月17-19日在日本爱知县国际展示场&#xff08;Aichi Sky Expo&#xff09;开展。本展会是专门为活跃在汽车行业的工程师和研究人员举办的汽车技术展览&#xff0c;汇聚了…

Web自动化测试-掌握selenium工具用法,使用WebDriver测试Chrome/FireFox网页(Java

目录 一、在Eclipse中构建Maven项目 1.全局配置Maven 2.配置JDK路径 3.创建Maven项目 4.引入selenium-java依赖 二、Chrome自动化脚本编写 1.创建一个ChromeTest类 2.测试ChromeDriver 3.下载chromedriver驱动 4.在脚本中通过System.setProperty方法指定chromedriver的…

操作系统期末复习整理知识点

操作系统的概念&#xff1a;①控制和管理整个计算机系统的硬件和软件资源&#xff0c;并合理地组织调度计算机的工作和资源的分配&#xff1b;②提供给用户和其他软件方便的接口和环境&#xff1b;③是计算机中最基本的系统软件 功能和目标&#xff1a; ①操作系统作为系统资源…

搭贝请假审批应用

在现代企业管理中&#xff0c;高效的请假审批系统至关重要。搭贝的请假审批应用通过简化员工的请假流程、提升管理层的工作效率&#xff0c;确保企业运作的连贯性和透明度。本文将介绍搭贝请假审批应用的主要功能模块&#xff1a;请假分析看板、请假申请审批流、请假类型维护和…

RocketMq源码解析六:消息存储

一、消息存储核心类 rocketmq消息存储的功能主要在store这个模块下。 核心类就是DefaultMessageStore。我们看下其属性 // 配置文件 private final MessageStoreConfig messageStoreConfig; // CommitLog 文件存储实现类 private final CommitLog commitLog; …

Mybatis05-一对多和多对一处理

多对一和一对多 多对一 多对一的理解&#xff1a; 多个学生对应一个老师 如果对于学生这边&#xff0c;就是一个多对一的现象&#xff0c;即从学生这边关联一个老师&#xff01; 结果映射&#xff08;resultMap&#xff09;&#xff1a; association 一个复杂类型的关联&…

PHP实现抖音小程序用户登录获取openid

目录 第一步、抖音小程序前端使用tt.login获取code 第二步、前端拿到code传给后端 第三步、方法1 后端获取用户信息 第四步、方法2 抖音小程序拿到用户信息把用户信息传给后端 code2Session抖音小程序用户登录后端文档 第一步、抖音小程序前端使用tt.login获取code 前端 …

leetcode 所有可能的路径(图的遍历:深度优先和广度优先)

leetcode 链接&#xff1a; 所有可能的路径 1 图的基本概念 1.1 有向图和无向图 左边是有向图&#xff0c;右边是无向图。对于无向图来说&#xff0c;图中的边没有方向&#xff0c;两个节点之间只可能存在一条边&#xff0c;比如 0 和 1 之间的边&#xff0c;因为是无向图&am…

线性代数|机器学习-P12Ax=b条件下x最小值问题

文章目录 1. Axb下的最值问题-图形转换2. Gram-Schmidt 标准形3. 迭代法-Krylov子空间法 1. Axb下的最值问题-图形转换 假设我们有一个直线方程如下&#xff1a; 3 x 1 4 x 2 1 \begin{equation} 3x_14x_21 \end{equation} 3x1​4x2​1​​ 在二维平面上&#xff0c;各个范…

DDMA信号处理以及数据处理的流程---原始数据生成

Hello&#xff0c;大家好&#xff0c;我是Xiaojie&#xff0c;好久不见&#xff0c;欢迎大家能够和Xiaojie一起学习毫米波雷达知识&#xff0c;Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程&#xff0c;本系列文章将从目标生成、信号仿真、测距、测速、cfar…

LLVM 后端执行流程

异构计算程序工作流程 图4-1中的LLVM后端的主要功能是代码生成&#xff0c;其中包括若干指令生成分析转换pass&#xff0c;将LLVM IR 转换为特定目标架构的机器代码 LLVM 流水线结构 输入指令经过图4-2中的各个阶段&#xff0c;从最初的LLVM IR&#xff0c;逐步演化为Selectio…

管理数据必备;侦听器watch用法详解,vue2与vue3中watch的变化与差异

目录 一、侦听器&#xff08;watch&#xff09;是什么&#xff1f; 二、Vue2中的watch&#xff08;Options API&#xff09; 2.1、函数式写法 2.2、对象式写法 ①对象式基础写法 ②回调函数handler ③deep属性 ④immediate属性 三、Vue3中的watch 3.1、向下兼容&#xff…

两句话让LLM逻辑推理瞬间崩溃!!

一道简单的逻辑问题&#xff0c;竟让几乎所有的LLM全军覆没&#xff1f; 对于人类来说&#xff0c;这个名为「爱丽丝梦游仙境」&#xff08;AIW&#xff09;的测试并不算很难—— 「爱丽丝有N个兄弟&#xff0c;她还有M个姐妹。爱丽丝的兄弟有多少个姐妹&#xff1f;」 稍加思考…

LeetCode1143最长公共子序列

题目描述 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff08…

redis windos修复版本

遇到的问题: Django的channel插件连接安装在windows上的redis报错: unknown command BZPOPMIN, channels-redis版本和redis不兼容导致.解决方案: 更新Redis版本. 微软官方维护的 Redishttps://github.com/microsoftarchive/redis/releases 2016年后就不更新了, 版本停留在了3.x…

学生信息管理(C语言)

学生信息管理 (1)问题描述 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能: 系统以菜单方式工作学生信息录入功能(学生信息用文件保存)---输入学生信息浏览功能---输出查询、排序功能---算法1、…

前后端实现文件上传进度条-实时进度

后端接口代码&#xff1a; PostMapping("/upload")public ResponseEntity<String> handleFileUpload(RequestParam("file") MultipartFile file) {try {// 获取文件名String fileName file.getOriginalFilename();// 创建上传目标路径Path targetPa…