使用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: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/24
services:
  dm_monitor:
    container_name: dm_monitor
    image: dm8:dm8_20240422_rev222308_x86_rh6_64
    networks:
      dmnet:
        ipv4_address: 172.20.0.2
    restart: always
    volumes:
      - ./data/monitor:/opt/dmdbms/data
    environment:
      - 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/bin
  dm_primary:
    container_name: dm_primary
    image: dm8:dm8_20240422_rev222308_x86_rh6_64
    networks:
      dmnet:
        ipv4_address: 172.20.0.3
    ports:
      - '30136:5236'
    restart: always
    volumes:
      - ./data/primary:/opt/dmdbms/data
    environment:
      - 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/bin
    depends_on:
      - dm_monitor
  dm_standby:
    container_name: dm_standby
    image: dm8:dm8_20240422_rev222308_x86_rh6_64
    networks:
      dmnet:
        ipv4_address: 172.20.0.4
    ports:
      - '30236:5236'
    restart: always
    volumes:
      - ./data/standby:/opt/dmdbms/data
    environment:
      - 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/bin
    depends_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_standby

cp 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>

## OR

Server[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

## OR

Server[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            CLSN
                  2024-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            CLSN
                  2024-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中分别配置了单服务器和主备服务集群的驱动模版,然后用它们又配置了主数据库和备用数据库各自的连接,以及涵盖主备数据库的集群的连接。

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android程序设计课程教学解决方案

引言 随着信息技术的飞速发展&#xff0c;智能手机和移动应用已成为现代生活不可或缺的一部分。Android作为全球最大的移动操作系统&#xff0c;其开发人才需求量巨大。高职院校作为培养高素质技能人才的重要基地&#xff0c;如何在Android程序设计课程中有效提升学生的实践能力…

7、安装依赖、连接数据库

安装依赖、连接数据库 打开datagrip软件 连接本地数据库,第一次连接会提示安装驱动,保持网络畅通跟着点击即可 创建一个sql控制台: 创建一个数据库(数据库名称可以自取) create database fullStackBlog;右击数据库新建控制台,用于创建数据表 创建一个blog的表 …

IP协议报文格式

IP协议报文格式 一: 报头格式1.1 : 4位版本1.2 : 4位首部长度1.3 : 8位服务类型 :1.4 : 16位总长度(字节数)1.5 : 8位生存时间(TTL)1.6 : 8 位协议1.7 : 32 位源IP / 32 位目的IP 一: 报头格式 1.1 : 4位版本 现在使用的也就只有IPv4,IPv6 1.2 : 4位首部长度 以 4字节为单位…

目前比较好用的LabVIEW架构及其选择

LabVIEW提供了多种架构供开发者选择&#xff0c;以满足不同类型项目的需求。选择合适的架构不仅可以提高开发效率&#xff0c;还能确保项目的稳定性和可维护性。本文将介绍几种常用的LabVIEW架构&#xff0c;并根据不同项目需求和个人习惯提供选择建议。 常用LabVIEW架构 1. …

开源VisualFbeditor中文版,vb7 IDE,VB6升级64位跨平台开发安卓APP,Linux程序

吴涛老矣&#xff0c;社区苦无64位易语言&#xff0c;用注入DLL增强菜单&#xff0c;做成VS一样的界面 终归是治标不治本&#xff0c;一来会报毒&#xff0c;二来闭源20年没更新了 开源的VB7&#xff0c;欢迎易语言的铁粉进群&#xff1a;1032313876 【Freebasic编程语言】编绎…

服务部署:解决Docker容器与虚拟机主机之间MySql连接访问问题

一、场景&#xff1a; 虚拟机上Ubuntu系统安装了Mysql&#xff0c;现在有一个服务应用需要使用docker来部署&#xff0c;服务应用需要连接mysql做数据库基础使用&#xff0c;配置文件中配置了虚拟主机的IP和端口&#xff0c;但是还是无法连接到Mysql&#xff0c;报错无法连接超…

Characters 2 01(卡通可爱人物动画模型)

● 包裹● - 26名男子; - 29个女孩。 ● 使用地点 ● - 游戏。针对游戏引擎优化的模型; -乘法; 广告和营销; - 虚拟现实/增强现实。 ● 特点 ● - 你可以很容易地改变物体的颜色 - 使用UV贴图; - 对象逻辑位置的枢轴; - 模型具有逻辑名称。 ● 几何学● 62个独特的资产(…

【MySQL】(基础篇七) —— 通配符和正则表达式

通配符和正则表达式 本章介绍什么是通配符、如何使用通配符以及怎样使用LIKE操作符进行通配搜索&#xff0c;以便对数据进行复杂过滤&#xff1b;如何使用正则表达式来更好地控制数据过滤。 目录 通配符和正则表达式LIKE操作符百分号(%)通配符下划线(_)通配符 通配符使用技巧正…

VitePress+Docker+jenkins构建个人网站

VitePress官网 VitePress | 由 Vite 和 Vue 驱动的静态站点生成器 可以理解为一个前端脚手架:快速生成个人站点 最好先大概看一遍 快速开始 | VitePress 可以在线体验一下 安装条件 node -v 检查下node版本 在D盘创建一个文件夹 例如:VitePress 进入文件夹 cmd npm ini…

xshell远程无法链接上VM的centos7

1、现象如下&#xff0c; 2.1解决办法&#xff1a;查证后发现这个默认的设置为vmnet0 2.2解决办法&#xff1a;重启win10的虚拟机网卡&#xff08;先禁用再启用&#xff09; 3.参考文章&#xff1a;Xshell连接不上虚拟机centos7_centos7的nat模式可以ping通网络,但是用xshell连…

深入浅出LLM大语言模型

一. 前言 2022年末&#xff0c;聊天程序ChatGPT的上线&#xff0c;在短短5天被注册用户就破百万。ChatGPT的爆火&#xff0c;在一夜之间&#xff0c;带领人类穿越到了真正的人工智能时代。 本文会从ChatGPT作为切入点&#xff0c;在介绍其底层的GPT模型诞生史后&#xff0c;再…

基于SSM+Jsp的交通事故档案管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

打造精细化运维新玩法(三)

实践SLO&#xff0c;概括下就是在相对标准、统一的框架下指导和推动服务质量的数字化建设&#xff0c;形成对组织有价值的数据资产和流程规范。借用在人工智能和机器学习领域的观点&#xff0c;算法的上限受限于数据质量的好坏&#xff0c;所以从源头上建设高质量的数据非常重要…

2024年城市建设、运输与智慧交通国际会议(ICUCTST 2024)

2024 International Conference on Urban Construction, Transportation, and Smart Transportation 【1】大会信息 会议简称&#xff1a;ICUCTST 2024 大会地点&#xff1a;中国厦门 会议官网&#xff1a;www.icuctst.com 投稿邮箱&#xff1a;icuctstsub-paper.com 【2】会…

打工人和学生党的福利,NewspaceGpt使用新体验

使用地址&#xff1a;https://newspace.ai0.cn/ 个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮…

2024年智能医疗与生物医药国际会议(ICIHB 2024)

2024 International Conference on Intelligent Healthcare and Biopharmaceuticals 【1】大会信息 会议简称&#xff1a;ICIHB 2024 大会地点&#xff1a;中国珠海 会议官网&#xff1a;www.icihb.com 投稿邮箱&#xff1a;icihbsub-paper.com 【2】会议简介 2024年智能医…

C++:SLT容器-->queue

C:SLT容器-->queue 1. queue容器2. queue 常用接口 1. queue容器 先进先出队列允许从一端插入元素&#xff0c;从另一端删除元素队列中只有队头和队尾可以被外界使用&#xff0c;因此队列不允许有遍历行为队列中插入数据称为入队(push)&#xff0c;删除数据称为出队(pop) …

LeetCode 算法:缺失的第一个正数c++

原题链接&#x1f517;&#xff1a;缺失的第一个正数 难度&#xff1a;困难⭐️⭐️⭐️ 题目 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输…

Leetcode刷题笔记8

162. 寻找峰值 162. 寻找峰值 - 力扣&#xff08;LeetCode&#xff09; 对于所有有效的 i 都有 nums[i] ! nums[i 1] 解法一&#xff1a;暴力解法 从第一个位置一直向后走&#xff0c;然后分情况即可1. 第二个元素就往下降&#xff0c;那么第一个元素就是峰顶 2. 一直遍历…

9、编写业务逻辑

9、编写业务逻辑 9.1 编写博客接口(新增和查询一起编写了) 响应实体:(随便封装的,可以根据自己的想法封装) // entity/Response package com.example.fullstackblogback.commen;import lombok.Data;import java.util.List;@Data public class Response<T> {pri…