使用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.mzph.cn/diannao/25881.shtml

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

相关文章

机器学习笔记——支持向量机

支持向量机 参数模型对分布需要假设&#xff08;这也是与非参数模型的区别之一&#xff09;间隔最大化&#xff0c;形式转化为凸二次规划问题 最大化间隔 间隔最大化是意思&#xff1a;对训练集有着充分大的确信度来分类训练数据&#xff0c;最难以分的点也有足够大的信度将…

68. UE5 RPG 处理多个角色后续bug

我们现在已经有了四个敌人角色&#xff0c;接下来&#xff0c;处理一下在战斗中遇到的问题。 处理角色死亡后还会攻击的问题 因为我们有角色溶解的效果&#xff0c;角色在死亡以后的5秒钟才会被销毁掉。所以在这五秒钟之内&#xff0c;角色其实还是会攻击。主要时因为AI行为树…

AI 大模型重点行业应用情况

1、AI 大模型重点行业应用情况总览 AI大模型将率先在互联网办公、金融等数字化程度较高的行业快速渗透&#xff0c;医疗、交通、 制造等行业的潜在渗透空间大。 2、AI 大模型在金融行业应用情况 金融行业的应用场景丰富&#xff0c;是最早进行数字化转型的机构&#xff0c;因此…

一文了解SpringBoot

1 springboot介绍 1)springboot是什么? Spring Boot是一个用于简化Java应用程序开发的框架。它基于Spring框架,继承了Spring框架原有的优秀特性,比如IOC、AOP等, 他并不是用来代替Spring的解决方案,而是和Spring框架紧密结合,进一步简化了Spring应用的整个搭建和开发过程…

angular2开发知识点

目录 文章目录 一、API 网关地址 配置二、服务注册使用三、模块组件注册使用四、html中style类动态绑定1. 单个类的绑定&#xff1a;[class.special]"isSpecial"2. 多个类的绑定&#xff1a;[ngClass]"{selected:status ,saveable: this.canSave,}"3. 单个…

LLM Algorithms(1): Flash Attention

目录 Background Flash Attention Flash Attention Algorithm 参考 NIPS-2022: Flash Attention: Fast and Memory-Efficient Exact Attention with IO-Awareness idea&#xff1a;减少资源消耗&#xff0c;提升或保持模型性能。普通attention的空间复杂度是 --》降低到F…

数据结构复习笔记

简答题 (3) 顺序表和链表的概念及异同 顺序表: 把逻辑上相邻的结点储存在物理位置上的相邻储存单元中&#xff0c;结点的逻辑关系由储存单元的邻接关系来体现.链表: 逻辑上相邻的结点存储再物理位置上非连续非顺序的存储单元中, 结点的逻辑关系由指向下一个结点的指针确保.相…

抓包工具 HttpAnalyzerFull_V7.6.4 的下载、安装、使用

目录 一、简介二、下载和安装三、如何注册四、使用介绍4.1 开始、停止、清空监控内容4.2 筛选监控内容4.3 监控内容显示 一、简介 Http Analyzer 是一款功能强大的数据包分析工具&#xff0c;它可以实时监控服务器返回的消息&#xff0c;支持64位Windows系统&#xff0c;可以同…

kaggle竞赛实战9——模型融合

有三种方法&#xff0c; 第一种&#xff1a;均值融合&#xff0c;代码如下 data pd.read_csv(\ result/submission_randomforest.csv\ ) data[randomforest] data[target].values temp pd.read_csv(\ result/submission_lightgbm.csv\ ) …

C++必修:探索C++的内存管理

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C学习 贝蒂的主页&#xff1a;Betty’s blog 1. C/C的内存分布 我们首先来看一段代码及其相关问题 int globalVar 1; static…

微信小程序毕业设计-网吧在线选座系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

力扣 T62 不同路径

题目 连接 思路 思路1 &#xff1a; BFS爆搜 class Solution { public:queue<pair<int,int>>q;int uniquePaths(int m, int n) {q.push({1,1}); // 起始位置vector<pair<int, int>> actions;actions.push_back({0, 1}); // 向下actions.push_bac…

【网络编程开发】11.IO模型 12.IO多路复用

11.IO模型 什么是IO: IO 是 Input/Output 的缩写&#xff0c;指的是输入和输出。在计算机当中&#xff0c;IO 操作通常指将数据从一个设备或文件中读取到计算机内存中&#xff0c;或将内存中的数据写入设备或文件中。这些设备可以包括硬盘驱动器、网卡、键盘、屏幕等。 通常用…

selenium自动化测试入门 —— Alert/Confirm/Prompt 弹出窗口处理!

一、Alert/Confirm/Prompt弹出窗口特征说明 Alert弹出窗口&#xff1a; 提示用户信息只有确认按钮&#xff0c;无法通过页面元素定位&#xff0c;不关闭窗口无法在页面上做其他操作。 Confirm 弹出窗口&#xff1a; 有确认和取消按钮&#xff0c;该弹出窗口无法用页面元素定…

06_深度学习历史的里程碑--重读AlexNet

1.1 介绍 AlexNet是深度学习历史上一个非常重要的卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09;模型&#xff0c;由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton在2012年设计并提出。它因在ImageNet大规模视觉识别挑战赛中的卓越表现而闻名&a…

2024世界技能大赛某省选拔赛“网络安全项目”B模块--数据包分析(jsp流量解密)

2024世界技能大赛某省选拔赛“网络安全项目”B模块--数据包分析② 任务一、网络数据包分析取证解析:任务一、网络数据包分析取证解析: A 集团的网络安全监控系统发现有恶意攻击者对集团官方网站进行攻击,并抓取了部分可疑流量包。请您根据捕捉到的流量包,搜寻出网络攻击线…

冯喜运:6.10周一黄金还会再次拉升吗?日内黄金原油操作策略

【黄金消息面分析】&#xff1a;周一(6月10日)亚市盘中&#xff0c;现货黄金交在上周五暴跌后仍然承压&#xff0c;目前金价位于2294美元/盎司左右。因强劲非农数据刺激美元大涨&#xff0c;现货黄金上周五出现暴跌。此外&#xff0c;上周五数据显示&#xff0c;最大黄金消费国…

在python中关于元组的操作

创建元组 如上图所示&#xff0c;a&#xff08;&#xff09;和b tuple(),,这两种方式都可以创建出元组。 在创建元组的时候&#xff0c;指定初始值 如上图所示&#xff0c;也可以在创建元组的时候&#xff0c;指定初始值。 同列表一样元组中的元素也可以是任意类型的。 同列…

Qt 布局管理

布局基础 1)Qt 布局管理系统使用的类的继承关系如下图: QLayout 和 QLayoutItem 这两个类是抽象类,当设计自定义的布局管理器时才会使用到,通常使用的是由 Qt 实现的 QLayout 的几个子类。 2)Qt 使用布局管理器的步骤如下: 首先创建一个布局管理器类的对象。然后使用该…

封装了一个简单理解的iOS竖直文字轮播

效果图 原理 就是持有两个视图&#xff0c;并且两个视图同时改变origin.y 动画结束之后&#xff0c;判断哪个视图是在上面并且看不到的&#xff0c; 则将该视图移动到底部&#xff0c;并且该视图展示下一跳内容 在开始下一轮动画 代码 - (void)startAnimationWithDuration:(…