DM集群的高可用的配置方式(多语言)

一、介绍

强调以下:dm_svc.conf必须放置到应用服务器上才行,放到其他服务器上识别不到。

文章中有的框架可能没写到并不代表不支持,有没提到的可文章下方留言。

1.dm_svc.conf的作用:

  • dm_svc.conf文件主要是为了当DM数据库集群发生故障切换时,应用系统也能随之自动连接到切换后的集群主库上,这样应用可以做到无感切换。
  • dm_svc.conf文件在不同操作系统下文件的放置位置不同,一定要注意。
  • (重要)应用系统必须使用DM驱动连接DM数据库,DM驱动内部连接前会在当前系统的指定目录下,检查dm_svc.conf文件是否存在并解析配置。
  • 当数据库故障时,应用无感切换。必须满足连接的是高可用集群而不是单机同时dm_svc.conf文件配置正确才可以。二者缺一不可。

2.dm_svc_conf文件的位置
具体的可以看官方手册:https://eco.dameng.com/document/dm/zh-cn/pm/physical-storage.html#2.1.1.4%20dm_svc.conf
image.png

二、dm_svc.conf的配置

达梦使用服务名的方式完成高可用的链接方式,方法是在每个应用服务器的/etc目录下,使用root用户创建一个dm_svc.conf文件。
如启动应用程序非root用户,需要给dm_svc.conf文件赋予755权限,避免因权限问题导致的读取不到
当驱动链接数据库时会首先读取此目录下的文件,自动判断主备机器并尝试进行链接。

[root@VM-0-17-centos bin]# cat /etc/dm_svc.conf 
TIME_ZONE=(480)
LANGUAGE=(cn)
## 注意替换成实际的集群ip:port,几个节点就写几台
DM=(192.168.123.123:5236,192.168.123.124:5236)
[DM]
LOGIN_MODE=(1)
SWITCH_TIME=(300)
SWITCH_INTERVAL=(200)

参数说明:

  1. TIME_ZONE表示指明客户端的默认时区,这里写480就行表示东八区
  2. 配置文件第三行:DM的值里面写了两个机器格式为ip:port的形式,要替换成实际的IP,这套集群几台机器就写几台。
  3. LOGIN_MODE=1,表示只连接主库。该参数特别重要
  4. 每个参数的含义可以看官网手册https://eco.dameng.com/document/dm/zh-cn/pm/physical-storage.html#2.1.1.4.1%20dm_svc.conf%20%E9%85%8D%E7%BD%AE%E9%A1%B9

三、多语言的连接方式

注意:

  1. 操作以下的示例,请确保已经正确配置dm_svc.conf文件
  2. 驱动使用的数据库版本建议与数据库的版本一致,如果驱动版本比数据库版本低,可能会出现部分不可解释的报错
  3. 每个版本的数据库都会在安装目录的drivers目录下提供对应的版本。具体的版本对应关系请查看同级目录下的readme.txt文件

1.JAVA的方式

以下写法对springboot 、标准接口、nacos等都是通用的

#不使用服务名前的写法
conn = DriverManager.getConnection("jdbc:dm://192.168.123.123:5236", "SYSDBA", "SYSDBA");## java语言的话目前有三种写法
## 1. 使用服务名的方式(推荐)
String url = "jdbc:dm://DM";## 2. 自定义dm_svc.conf文件,建议是放到应用启动的用户下,避免权限问题
String url = "jdbc:dm://DM?dmsvcconf=/home/XXXXX(自行替换)/dm_svc.conf";## 3. 连接串中手动直接拼接
String url = "jdbc:dm://DM?DM=(192.168.123.123:5236,192.168.123.124:5236)&login_mode=1";

注:这里推荐第一种写法,统一规范识别dm_svc.conf文件。

2.ODBC的方式

#不使用服务名前的写法
sret = SQLConnect(hdbc, (SQLCHAR *)"192.168.123.123", SQL_NTS, (SQLCHAR *)"SYSDBA", SQL_NTS, (SQLCHAR *)"SYSDBA", SQL_NTS);#使用服务名的写法
sret = SQLConnect(hdbc, (SQLCHAR *)"DM", SQL_NTS, (SQLCHAR *)"SYSDBA", SQL_NTS, (SQLCHAR *)"SYSDBA", SQL_NTS);

注:这里不需要调整odbc.ini、odbcinst.ini的相关配置,需要代码调整。(服务名识别不走odbc的配置文件)

3…NET的方式

##DmConnection cnn = new DmConnection();
##cnn.ConnectionString = "Server=192.168.123.123; User Id=SYSDBA; PWD = SYSDBA;Port=5236";
##cnn.Open();
##DmCommand command = new DmCommand();#不使用服务名前的写法
cnn.ConnectionString = "Server=192.168.123.123; User Id=SYSDBA; PWD = SYSDBA;Port=5236";#使用服务名的写法
cnn.ConnectionString = "Server=DM; User Id=SYSDBA; PWD = SYSDBA;";

4.GO的方式

该写法在所有的GO的ORM框架中都适用。比如说GORM、ZORM等框架

#不使用服务名前的写法
db, err := sql.Open("dm", "dm://SYSDBA:SYSDBA@192.168.123.123:5236?autoCommit=true")
# 使用服务名的写法
# 1. 标准写法(推荐)
db, err := sql.Open("dm", "dm://SYSDBA:SYSDBA@DM?autoCommit=true")
# 2. 连接串中手动直接拼接(未测试)
db, err := sql.Open("dm", "dm://SYSDBA:SYSDBA@DM=(192.168.123.123:5236,192.168.123.124:5236)

5.Python的方式

import dmPython
# 不使用服务名前的写法
conn = dmPython.connect('SYSDBA', 'SYSDBA', '192.168.123.123:5236')
# 使用服务名的写法
conn = dmPython.connect('SYSDBA', 'SYSDBA', 'DM')#sqlalchemy框架
# 不使用服务名前的写法
engine = create_engine('dm://SYSDBA:SYSDBA@192.168.123.123:5236', connect_args={'autoCommit': False})
# 使用服务名的写法
engine = create_engine('dm://SYSDBA:SYSDBA@DM', connect_args={'autoCommit': False})## django框架服务名连接数据
# 不使用服务名前的写法
DATABASES = {'default': {'ENGINE': 'django_dmPython','NAME': 'DAMENG','USER': 'SYSDBA','PASSWORD': 'SYSDBA','OPTIONS': {'schema': 'DJANGGO'},'HOST': '10.15.1.18','PORT': '5236',}
}
# 使用服务名的写法
DATABASES = {'default': {'ENGINE': 'django_dmPython','NAME': 'DAMENG','USER': 'SYSDBA','PASSWORD': 'SYSDBA','OPTIONS': {'schema': 'DJANGGO'},'HOST': 'DM','PORT': '5236',}
}

6.disql的连接方式

## 不使用高可用的连接方式
[root@VM-0-17-centos bin]# ./disql SYSDBA/SYSDBA@127.0.0.1:5236
服务器[127.0.0.1:5236]:处于主库打开状态
登录使用时间 : 9.777(ms)
disql V8
SQL> ^C## 使用高可用服务名的连接方式
[root@VM-0-17-centos bin]# ./disql SYSDBA/SYSDBA@DM服务器[188.131.177.169:5236]:处于主库打开状态
登录使用时间 : 1.906(ms)
disql V8
SQL> 

5ddad9bb4dda8c385feddc71de2dd68.png

7.PHP语言的方式

# 不使用服务名前的写法$link = dm_connect("localhost:5236", "SYSDBA", "SYSDBA")# 使用服务名的写法$link = dm_connect("DM", "SYSDBA", "SYSDBA")

8.R语言的方式

library(DBI)
library(RDameng)
#数据库地址地址
dbHost <- "192.168.145.190"
dbServerName <- "DmServiceDMSERVER"
dbUserName <- "SYSDBA"
dbPassword <- "SYSDBA"
drv <- dbDriver("Dm")# 不使用服务名前的写法
drv <- dbDriver("Dm")
connect.string <- paste("(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=", dbHost, ")(PORT= 5236))(CONNECT_DATA=(SERVICE_NAME=", dbServerName, ")))", sep = "")
dm8Con <- dbConnect(drv,username = dbUserName, password = dbPassword,dbname = connect.string) # 使用服务名的写法
dmCon <- dbConnect(drv,username = "SYSDBA", password = "123456",dbname = "DM") #查看连接信息
#dbGetInfo(oracleCon)
#查看驱动详细信息
#dbGetInfo(drv)

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

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

相关文章

PHP健身微信小程序系统源码

&#x1f3cb;️‍♀️健身新潮流&#xff01;解锁“健身微信小程序”的全方位塑形秘籍 &#x1f4f1;开篇&#xff1a;掌中健身房&#xff0c;随时随地动起来 你还在为找不到合适的健身场地或教练而烦恼吗&#xff1f;是时候告别这些束缚&#xff0c;拥抱“健身微信小程序”…

如何在数据埋点中发现和修复数据上报逻辑错误

如何发现和处理数据埋点中的逻辑错误 在大数据分析中,数据埋点是至关重要的一环。然而,当我们遇到数据上报逻辑错误时,该如何应对呢?本文将为你揭示解决这一棘手问题的有效方法。 目录 如何发现和处理数据埋点中的逻辑错误什么是数据上报逻辑错误?如何发现数据上报逻辑错误…

S32G3系列芯片Serial Boot功能详解!

《S32G3系列芯片——Boot详解》系列——S32G3系列芯片Serial Boot功能详解&#xff01;★★★ 一、Serial Boot模式概述二、串行下载协议2.1 基于UART和CAN的下载协议概述2.2 基于FlexCAN的Serial Boot2.2.1 IO配置2.2.2 时钟配置2.2.3 通信波特率2.2.4 基于FlexCAN的Serial Bo…

定义和使用自己的子程序——函数的介绍

定义和使用自己的子程序——函数的介绍 1.函数基础语法1.1.基础语法1.2.例题1——距离函数题目描述输入格式输出格式输入输出样例输入 #1输出 #1 提示 2.void类型3.变量作用域和参数传递3.1.局部变量和全局变量3.2.形式参数和实际参数3.3.例题2——歌唱比赛题目描述输入格式输出…

计算机基础(Windows 10+Office 2016)教程 —— 第6章 电子表格软件Excel 2016(下)

电子表格软件Excel 2016 6.4 Excel 2016的公式与函数6.4.1 公式的概念6.4.2 公式的使用6.4.3 单元格的引用6.4.4 函数的使用6.4.5 快速计算与自动求和 6.5 Excel 2016的数据管理6.5.1 数据排序6.5.2 数据筛选6.5.3 分类汇总6.5.4 分组显示6.5.5 合并计算 6.6 Excel 2016的图表6…

【RabbitMQ】通配符模式(Topics)

一、基本概念 生产者&#xff08;Producer&#xff09;&#xff1a;发送消息到RabbitMQ交换机的程序。生产者定义消息的路由键&#xff0c;用于标识消息的目的地。交换机&#xff08;Exchange&#xff09;&#xff1a;接收生产者发送的消息&#xff0c;并根据路由键和绑定规则…

一款.NET开源、跨平台的DASH/HLS/MSS下载工具

前言 今天大姚给大家分享一款.NET开源&#xff08;MIT License&#xff09;、免费、跨平台的DASH/HLS/MSS下载工具&#xff0c;并且支持点播和直播&#xff08;DASH/HLS&#xff09;的内容下载&#xff1a;N_m3u8DL-RE。 网络流媒体传输协议介绍 DASH DASH是一种基于HTTP的…

2024年8月1日(前端服务器的配置以及tomcat环境的配置)

[rootstatic ~]# cd eleme_web/ [rootstatic eleme_web]# cd src/ [rootstatic src]# ls views/ AboutView.vue HomeView.vue [rootstatic src]# vim views/HomeView.vue [rootstatic src]# nohup npm run serve nohup: 忽略输入并把输出追加到"nohup.out" 构建项目…

零基础入门转录组数据分析——机器学习算法之boruta(筛选特征基因)

零基础入门转录组数据分析——机器学习算法之boruta&#xff08;筛选特征基因&#xff09; 目录 零基础入门转录组数据分析——机器学习算法之boruta&#xff08;筛选特征基因&#xff09;1. boruta基础知识2. boruta&#xff08;Rstudio&#xff09;——代码实操2. 1 数据处理…

机器学习之贝叶斯方法

机器学习之贝叶斯方法 1. 贝叶斯定理基础1.1 贝叶斯定理公式1.2 先验概率 (Prior Probability)1.3 后验概率 (Posterior Probability)1.4 似然 (Likelihood)1.5 证据 (Evidence)1.6 贝叶斯定理的应用实例 2. 贝叶斯方法的基本概念2.1 条件概率 (Conditional Probability)2.2 全…

Python SDK 使用Azure Document intelligence报错(404) Resource not found

最近项目需要使用到Azure Document intelligence,于是去做POC&#xff0c;但是发现最简单的demo跑的时候都会报这个错&#xff0c;解决了一下午终于搞定了&#xff0c;记录下。 首先是官方文档&#xff1a;Quickstart: Document Intelligence (formerly Form Recognizer) clien…

反序列化漏洞vulhub靶场serial

环境搭建 下载 https://download.vulnhub.com/serial/serial.zip 解压出来就是这种 你会得到一个这样的文件&#xff0c;这里使用VMware新建一个虚拟机&#xff0c;这里记录比较重要的几部分。 这里就是使用我们刚才下过来的。 漏洞过程详解 1.信息收集 打开靶机&#xff0…

IDEA切换分支,会影响当前在跑的项目吗?

说明&#xff1a;本文测试&#xff0c;在IDEA中运行项目&#xff0c;然后切换分支&#xff0c;是否会影响当前正在跑的项目 准备工作 首先&#xff0c;创建一个Git项目&#xff0c;接口如下&#xff1a; import org.springframework.web.bind.annotation.GetMapping; import…

13. 文本框和单选题

属性说明type指定元素的类型。text、password、checkbox、radio、submit、reset、file、hidden、image和button&#xff0c;默认为textname指定表单元素的名称value元素的初始值。type为radio时必须指定一个值size指定表单元素的初识宽度&#xff0c;当type为text或password时&…

3.Java面试题之AQS

1. 写在前面 AQS&#xff08;AbstractQueuedSynchronizer&#xff09;是Java并发包&#xff08;java.util.concurrent&#xff09;中的一个抽象类&#xff0c;用于实现同步器&#xff08;如锁、信号量、栅栏等&#xff09;。AQS提供了一种基于FIFO队列的机制来管理线程的竞争和…

【RabbitMQ】路由模式(Routing)

一、基本概念 生产者&#xff08;Producer&#xff09;&#xff1a;发送消息到交换机的程序。在发送消息时&#xff0c;需要指定一个路由键。交换机&#xff08;Exchange&#xff09;&#xff1a;接收生产者发送的消息&#xff0c;并根据路由键将消息路由到与之匹配的队列。在…

1.kafka面试题之零拷贝

1. 写在前面 Kafka 是一个高性能的分布式消息系统&#xff0c;它使用了多种优化技术来提高数据传输效率&#xff0c;其中之一就是 “零拷贝”&#xff08;Zero Copy&#xff09;。零拷贝技术可以显著减少数据在内存中的复制次数&#xff0c;从而提高 I/O 操作的效率&#xff0…

volatile 关键字的两层语义

volatile 关键字的两层语义 1、可见性2、禁止指令重排序3、工作机制4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; volatile 关键字在Java并发编程中扮演着重要角色&#xff0c;它主要用于保证变量的可见性和禁止指令重排序。 1、…

python绘图 | 横坐标是日期,纵坐标是数值

需求 profit_value [0.084, 0.225, 0.234, 0.264, 0.328] time_stamp [20221111, 20230511, 20230704, 20231212, 20240315] 横坐标是日期&#xff0c;纵坐标是数值&#xff0c;我想绘图的时候&#xff0c;横坐标是按日期格式来 代码 from matplotlib import pyplot as pl…

Mallet:一款针对任意协议的安全拦截代理工具

关于Mallet Mallet是一款功能强大的协议安全分析工具&#xff0c;该工具支持针对任意协议创建用于安全审计的拦截代理&#xff0c;该工具本质上与我们所熟悉的拦截Web代理类似&#xff0c;只是通用性更强。 工具运行机制 Mallet建立在Netty框架之上&#xff0c;并且依赖于Net…