DM8读写分离集群安装部署_手动切换

news2024/11/23 23:52:36

一、安装前准备

1.1 硬件环境建议

读写分离集群安装部署前需要额外注意网络环境和磁盘 IO 配置情况,其他环境配置项建议请参考安装前准备工作。

1.1.1 网络环境

心跳网络对 mal 通讯系统的影响非常大,如果网络丢包或者延迟较大,则会严重影响 mal 系统的处理能力,从而导致整个集群出现响应服务请求慢的情况。为确保集群的稳定性,网络配置如下:

  1. 使用千兆或千兆以上网络;
  2. 集群间的心跳网络需同步数据,建议尽量使用两个交换机构建内网,以实现冗余和负载均衡;
  3. 建议服务器采用两个网卡绑定为一个逻辑网卡来使用(比如 bond 方式)。

1.1.2 磁盘 IO

磁盘 IO 的读写速率会极大影响系统性能和用户体验。因此在进行集群安装部署前,应测试 IO 性能能否满足系统功能和性能需求。
IO 性能指标与系统的并发数、热点数据等因素往往密切相关。在读写分离集群,尤其生产系统中,推荐使用高性能 SSD 磁盘,以获得更佳性能,保证集群数据的实时同步。

1.2.集群规划

不管几个节点,建议所有的节点数据库名都配置成一致的。

A机(读写)B机(读)
业务 IP192.168.40.130192.168.40.140
心跳 IP192.168.183.50192.168.183.60
实例名top01top02
实例端口52365236
MAL 端口53365336
MAL 守护进程端口54365436
守护进程端口55365536
OGUID4533145331
守护组grp1grp1
安装目录/dmdb8/dmdbms/dmdb8/dmdbms
实例目录/dmdb8/dmdata/dmdb8/dmdata
归档上限5120051200

确认监视器 IP 为 10.10.10.10。
生产建议(MAL)和业务使用的分开,且做网口级别的bond冗余
MAL_HOST:内部通讯
MAL_INST_HOST:对外服务

1.3.集群架构

搭建的读写分离集群架构如下图:
image.png

1.4.切换模式说明

该文档采用故障手动切换方式

故障切换方式dmarchdmwatcherdmmonitor监视器要求
故障手动切换ARCH_WAIT_APP
LY=0DW_MODE=
MANUALMON_DW_CON
FIRM=01、手动切换:集群各节点的 bin 目录中,存放非确认监视器配置文件。
故障自动切换ARCH_WAIT_APP
LY= 1DW_MODE=
AUTOMON_DW_CON
FIRM=12、自动切换:在确认监视器上(非集群节点),存放确认监视器配置文件,并注册后台自启服务。
  • ARCH_WAIT_APPLY 参数,设置为 0:高性能模式;设置为 1:事务一致模式。
  • 故障手动切换情境下 ARCH_WAIT_APPLY 只能为 0。故障自动切换情境下 ARCH_WAIT_APPLY 可以为 0,也可以为 1。
  • ARCH_WAIT_APPLY 参数设置的判断依据为业务是否要查询备机最新数据。如果需要,则配置为 1(较大性能衰减);如果不需要,则配置为 0。

二.集群搭建

前提2个节点都已安装数据库软件

2.1 配置主库A机(读写)

2.1.1 初始化实例并备份数据

  • 初始化实例
[dmdba@localhost ~]$ /dmdb8/dmdbms/bin/dminit PATH=/dmdb8/dmdata PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048 CASE_SENSITIVE=1 CHARSET=1 LENGTH_IN_CHAR=0  INSTANCE_NAME=top01 PORT_NUM=5236

参数解释
PAGE_SIZE:
EXTENT_SIZE:
LOG_SIZE:日志文件大小
CASE_SENSITIVE:建议从 MYSQL 和 SQLSERVER 迁移过来的系统,使用大小写不敏感,ORACLE 迁移过来的系统,使用大小写敏感,默认为区分。取值:Y、y、1 表示敏感;N、n、0 表示不敏感。默认值为 Y 。
CHARSET/UNICODE_FLAG:0 代表 GB18030,1 代表 UTF-8,2 代表韩文字符集 EUC-KR。默认为 0
DB_NAME:初始化数据库名称,默认为 DAMENG
INSTANCE_NAME:初始化数据库实例名称,默认为 DMSERVER
PORT_NUM:数据库端口号,默认5236
LENGTH_IN_CHAR:VARCHAR 类型对象的长度是否以字符为单位。取值为 1 或者 Y 表示是,取值为 0 或 N 表示否。默认值为 0
  • 启动服务
[dmdba@localhost ~]$ /dmdb8/dmdbms/bin/dmserver /dmdb8/dmdata/DAMENG/dm.ini
  • 开启归档
[dmdba@localhost ~]$ /dmdb8/dmdbms/bin/disql SYSDBA/SYSDBA@192.168.40.130:5236

SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/dmdb8/dmarch/DAMENG, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';
SQL> ALTER DATABASE OPEN;
  • 备份数据
SQL> BACKUP DATABASE BACKUPSET '/dmdb8/dmbak/DAMENG/BACKUP_FILE';
  • 修改 dm.ini
SQL> SP_SET_PARA_VALUE (2,'PORT_NUM',5236);
SQL> SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);  --接收守护进程消息超时时间
SQL> SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);      --不允许手工方式修改实例模式/状态/OGUID
SQL> SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);      --不允许备库OFFLINE表空间
SQL> SP_SET_PARA_VALUE (2,'MAL_INI',1);                --打开MAL系统
SQL> SP_SET_PARA_VALUE (2,'ARCH_INI',1);                --打开归档配置
SQL> SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);   --统计最近64次的日志发送信息
  • 关闭前台实例服务
SQL> shutdown immediate;

2.1.2 修改 dmarch.ini

Copy[dmdba@~]$ vi /dmdb8/dmdata/DAMENG/dmarch.ini

ARCH_WAIT_APPLY            = 0  #0:高性能   1:事务一致 
[ARCHIVE_LOCAL]
ARCH_TYPE                = LOCAL  #本地归档类型
ARCH_DEST                = /dmdb8/dmarch/DAMENG   #本地归档存放路径
ARCH_FILE_SIZE           = 1024  #单个归档大小,单位 MB
ARCH_SPACE_LIMIT         = 51200  #归档上限,单位 MB

[ARCHIVE_TIMELY1]
ARCH_TYPE                = TIMELY  #即时归档类型
ARCH_DEST                = top02   #即时归档目标实例名

2.1.3 创建 dmmal.ini

[dmdba@~]$ vi /dmdb8/dmdata/DAMENG/dmmal.ini

MAL_CHECK_INTERVAL         = 10  #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL     = 10  #判定 MAL 链路断开的时间
MAL_TEMP_PATH              = /dmdb8/dmdata/DAMENG/malpath/  #临时文件目录
MAL_BUF_SIZE               = 512  #单个 MAL 缓存大小,单位 MB
MAL_SYS_BUF_SIZE           = 2048  #MAL 总大小限制,单位 MB
MAL_COMPRESS_LEVEL         = 0  #MAL 消息压缩等级,0 表示不压缩

[MAL_INST1]
MAL_INST_NAME            = top01  #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST                 = 192.168.183.50  #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT                 = 5336  #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST            = 192.168.40.130  #实例的对外服务 IP 地址
MAL_INST_PORT            = 5236  #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT              = 5436  #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT         = 5536  #实例监听守护进程 TCP 连接的端口

[MAL_INST2]
MAL_INST_NAME            = top02  #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST                 = 192.168.183.60 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT                 = 5336 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST            = 192.168.40.140 #实例的对外服务 IP 地址
MAL_INST_PORT            = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT              = 5436  #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT         = 5536 #实例监听守护进程 TCP 连接的端口

生产建议(MAL)和业务使用的分开,且做网口级别的bond冗余
MAL_HOST:内部通讯
MAL_INST_HOST:对外服务

2.1.4 创建 dmwatcher.ini

[dmdba@~]$ vi /dmdb8/dmdata/DAMENG/dmwatcher.ini

[GRP1]
DW_TYPE                  = GLOBAL  #全局守护类型
DW_MODE                  = MANUAL  #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME            = 20  #远程守护进程故障认定时间
INST_ERROR_TIME          = 20  #本地实例故障认定时间
INST_RECOVER_TIME        = 60  #主库守护进程启动恢复的间隔时间
INST_OGUID               = 45331  #守护系统唯一 OGUID 值
INST_INI                 = /dmdb8/dmdata/DAMENG/dm.ini  #dm.ini 文件路径
INST_AUTO_RESTART        = 1  #打开实例的自动启动功能
INST_STARTUP_CMD         = /dmdb8/dmdbms/bin/dmserver  #命令行方式启动
RLOG_SEND_THRESHOLD      = 0  #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD     = 0  #指定备库重演日志的时间阈值,默认关闭

2.1.5 拷贝备份文件

##拷贝备份文件到 192.168.40.140 机器
[dmdba@~]$ scp -r /dmdb8/dmbak/DAMENG/BACKUP_FILE dmdba@192.168.40.140:/dmdb8/dmbak

2.1.6 注册服务

[root@~]# /dmdb8/dmdbms/script/root/dm_service_installer.sh -t dmserver -p top01 -dm_ini /dmdb8/dmdata/DAMENG/dm.ini -m mount

[root@~]# /dmdb8/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdb8/dmdata/DAMENG/dmwatcher.ini

若要删除自启,可利用如下方式:

[root@~]# /dmdb8/dmdbms/script/root/dm_service_uninstaller.sh -n DmServicetop01

[root@~]# /dmdb8/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher

补充:注册服务过程如下:

[root@localhost DAMENG]# /dmdb8/dmdbms/script/root/dm_service_installer.sh -t dmserver -p top01 -dm_ini /dmdb8/dmdata/DAMENG/dm.ini -m mount
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServicetop01.service to /usr/lib/systemd/system/DmServicetop01.service.
Finished to create the service (DmServicetop01)


[root@localhost DAMENG]# /dmdb8/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdb8/dmdata/DAMENG/dmwatcher.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmWatcherServiceWatcher.service to /usr/lib/systemd/system/DmWatcherServiceWatcher.service.
Finished to create the service (DmWatcherServiceWatcher)

2.2 配置 B 机器

2.2.1 初始化实例

[dmdba@~]$ /dmdb8/dmdbms/bin/dminit PATH=/dmdb8/dmdata PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048 CASE_SENSITIVE=1 CHARSET=1 LENGTH_IN_CHAR=0  INSTANCE_NAME=top02 PORT_NUM=5236

2.2.2 恢复数据

[dmdba@~]$ /dmdb8/dmdbms/bin/dmrman CTLSTMT="RESTORE DATABASE '/dmdb8/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmdb8/dmbak/BACKUP_FILE'"

[dmdba@~]$ /dmdb8/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dmdb8/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmdb8/dmbak/BACKUP_FILE'"

[dmdba@~]$ /dmdb8/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dmdb8/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC"

2.2.3 替换 dmarch.ini

[dmdba@~]$ vi /dmdb8/dmdata/DAMENG/dmarch.ini

ARCH_WAIT_APPLY            = 0  #0:高性能   1:事务一致 

[ARCHIVE_LOCAL]
ARCH_TYPE                = LOCAL  #本地归档类型
ARCH_DEST                = /dmdb8/dmarch/DAMENG/  #本地归档存放路径
ARCH_FILE_SIZE           = 1024  #单个归档大小,单位 MB
ARCH_SPACE_LIMIT         = 51200  #归档上限,单位 MB

[ARCHIVE_TIMELY1]
ARCH_TYPE                = TIMELY  #即时归档类型
ARCH_DEST                = top01  #即时归档目标实例名

2.2.4 配置 dm.ini、dmmal.ini 和 dmwatcher.ini

配置 dm.ini

在 B 机器上配置备库的实例名为 top02,dm.ini 参数修改如下:

SQL> SP_SET_PARA_VALUE (2,'PORT_NUM',5236);
SQL> SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);  --接收守护进程消息超时时间
SQL> SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);      --不允许手工方式修改实例模式/状态/OGUID
SQL> SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);      --不允许备库OFFLINE表空间
SQL> SP_SET_PARA_VALUE (2,'MAL_INI',1);                --打开MAL系统
SQL> SP_SET_PARA_VALUE (2,'ARCH_INI',1);                --打开归档配置
SQL> SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);   --统计最近64次的日志发送信息
配置 dmmal.ini 和 dmwatcher.ini

B 机器里 dmmal.ini、dmwatcher.ini 与 A 机器 top01 的 dmmal.ini、dmwatcher.ini 相同,参照 A 机器 dmmal.ini、dmwatcher.ini 文件进行配置。
补充:
主备库的dmmal.ini配置是一致的;dmwatcher.ini里主备的配置文件路径、命令行方式启动的路径一致的话,dmwatcher.ini一致,建议相关路径一致;特殊情况备库RLOG_APPLY_THRESHOLD 如指定备库重演日志的时间阈值,如果有需要开启的话,需在备库配置。

2.2.5 注册服务

[root@~]# /dmdb8/dmdbms/script/root/dm_service_installer.sh -t dmserver -p top02 -dm_ini /dmdb8/dmdata/DAMENG/dm.ini -m mount

[root@~]# /dmdb8/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdb8/dmdata/DAMENG/dmwatcher.ini

若要删除自启,可利用如下方式:

Copy[root@~]# /dmdb8/dmdbms/script/root/dm_service_uninstaller.sh -n DmServicetop02

[root@~]# /dmdb8/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher

注册服务过程:

[root@localhost dmbak]# /dmdb8/dmdbms/script/root/dm_service_installer.sh -t dmserver -p top02 -dm_ini /dmdb8/dmdata/DAMENG/dm.ini -m mount
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServicetop02.service to /usr/lib/systemd/system/DmServicetop02.service.
Finished to create the service (DmServicetop02)
[root@localhost dmbak]# /dmdb8/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdb8/dmdata/DAMENG/dmwatcher.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmWatcherServiceWatcher.service to /usr/lib/systemd/system/DmWatcherServiceWatcher.service.
Finished to create the service (DmWatcherServiceWatcher)

2.3 配置监视器

  • 手动切换:集群各节点的 bin 目录中,存放非确认监视器配置文件。
  • 自动切换:在确认监视器上(非集群节点),存放确认监视器配置文件,并注册后台自启服务。

2.3.1 创建 dmmonitor.ini

[dmdba@~]$ vi /dmdb8/dmdbms/bin/dmmonitor.ini

MON_DW_CONFIRM             = 0  #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH               = ../log  #监视器日志文件存放路径
MON_LOG_INTERVAL           = 60  #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE          = 512  #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT        = 2048  #日志上限,单位 MB

[GRP1]
MON_INST_OGUID           = 45331  #组 GRP1 的唯一 OGUID 值
MON_DW_IP                = 192.168.183.50:5436  #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP                = 192.168.183.60:5436

同步传输 dmmonitor.ini至192.168.40.140备节点

scp /dmdb8/dmdbms/bin/dmmonitor.ini dmdba@192.168.40.140:/dmdb8/dmdbms/bin/dmmonitor.ini

2.3.2 注册服务(选做)

[root@~]# /dmdb8/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /dmdb8/dmdbms/bin/dmmonitor.ini

若要删除自启,可利用如下方式:

[root@~]# /dmdb8/dmdbms/script/root/dm_service_installer.sh -n DmMonitorServiceMonitor

补充:注册服务过程

[root@localhost bin]# /dmdb8/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /dmdb8/dmdbms/bin/dmmonitor.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmMonitorServiceMonitor.service to /usr/lib/systemd/system/DmMonitorServiceMonitor.service.
Finished to create the service (DmMonitorServiceMonitor)

2.3.3 监视器使用

进入监视器。
安装目录的bin目录下 ./dmmonitor 加上dmmonitor.ini路径
若ini也在bin目录,可直接执行 ./dmmonitor dmmonitor.ini

cd /dmdb8/dmdbms/bin
./dmmonitor /dmdb8/dmdbms/bin/dmmonitor.ini

可视情况执行如下命令:

命令含义
list查看守护进程的配置信息
show global info查看所有实例组的信息
tip查看系统当前运行状态
login登录监视器
logout退出登录
choose switchoverGRP1主机正常:查看可切换为主机的实例列表
switchoverGRP1.实例名主机正常:使用指定组的指定实例,切换为主机
choose takeoverGRP1主机故障:查看可切换为主机的实例列表
takeoverGRP1.实例名主机故障:使用指定组的指定实例,切换为主机
choose takeover force GRP1强制切换:查看可切换为主机的实例列表
takeover force GRP1.实例名强制切换:使用指定组的指定实例,切换为主机

主机故障后,在备机执行 SELECT SF_DW_CHECK_TAKEOVER(); 【1:可接管;0:不可接管】。

2.4 启动服务及查看信息

2.4.1 启动数据库并修改参数

##40.130 机器
[dmdba@~]$ /dmdb8/dmdbms/bin/DmServicetop01 start
[dmdba@~]$ /dmdb8/dmdbms/bin/disql SYSDBA/SYSDBA@192.168.40.130:5236
SQL> SP_SET_OGUID(45331);
SQL> ALTER DATABASE PRIMARY;

##B 机器
[dmdba@~]$ /dmdb8/dmdbms/bin/DmServicetop02 start
[dmdba@~]$ /dmdb8/dmdbms/bin/disql SYSDBA/SYSDBA@192.168.40.140:5236
SQL> SP_SET_OGUID(45331);
SQL> ALTER DATABASE STANDBY;

2.4.2 启动守护进程

##A/B机器
[dmdba@~]$ /dmdb8/dmdbms/bin/DmWatcherServiceWatcher start

--查看状态
/dmdb8/dmdbms/bin/DmWatcherServiceWatcher status

--若注册的有系统服务,可使用以下方法:
systemctl start  DmWatcherServiceWatcher
systemctl status DmWatcherServiceWatcher
systemctl enable DmWatcherServiceWatcher

2.4.3 启动监视器

##后台启动
[dmdba@~]$ /dmdb8/dmdbms/bin/DmMonitorServiceMonitor start

--查看状态
[dmdba@~]$ /dmdb8/dmdbms/bin/DmMonitorServiceMonitor status

##前台启动
[dmdba@~]$ /dmdb8/dmdbms/bin/dmmonitor /dmdb8/dmdbms/bin/dmmonitor.ini

--若注册的有系统服务,可使用以下方法:
systemctl start DmMonitorServiceMonitor
systemctl status DmMonitorServiceMonitor
systemctl enable DmMonitorServiceMonitor

2.5 启停集群

##启动
##A/B 机器
[dmdba@~]$ /dmdb8/dmdbms/bin/DmWatcherServiceWatcher start

##停止
##A/B机器
[dmdba@~]$ /dmdb8/dmdbms/bin/DmWatcherServiceWatcher stop
##A 机器
[dmdba@~]$ /dmdb8/dmdbms/bin/DmServicetop01 stop
##B机器
[dmdba@~]$ /dmdb8/dmdbms/bin/DmServicetop02 stop

三.dm_svc.conf 配置

3.1 简介

dm_svc.conf 是使用达梦数据库时非常重要的配置文件,它包含了达梦各接口和客户端工具所需要配置的一些参数。通过它可以实现达梦各种集群的读写分离和均衡负载,且必须和接口/客户端工具位于同一台机器上才能生效。
初始 dm_svc.conf 文件由达梦安装时自动生成。不同的平台生成目录有所不同,注意相应访问用户需要对该文件有读取权限。

  • 32 位的 DM 安装在 Win32 操作平台下,此文件位于 %SystemRoot%\system32 目录;
  • 64 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\system32 目录;
  • 32 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\SysWOW64 目录;
  • 在 Linux 平台下,此文件位于 /etc 目录。

但在某些情况下,所使用的用户没有读取和修改 /etc 目录下文件的权限,这时就需要将 dm_svc.conf 文件放到有权限的目录下,并修改 url 连接串的内容。以 Linux 平台,文件放在 /home/dmdba 目录下为例:

  • 在 /home/dmdba 目录下,编辑 dm_svc.conf 文件:
TIME_ZONE=(480)
LANGUAGE=(cn)
dm=(ip:端口)
[dm]
KEYWORDS=(需要排除的关键字)
  • 修改连接串
jdbc:dm://dm?dmsvcconf=/home/dmdba/dm_svc.conf

dm_svc.conf 配置文件的内容分为全局配置区和服务配置区。全局配置区在前,可配置所有的配置项,服务配置区在后,以“[服务名]”开头,可配置除了服务名外的所有配置项。服务配置区中的配置优先级高于全局配置区(服务配置区的相同配置项会覆盖全局配置区对应的配置项)。

3.2 常用配置项介绍

  • 服务名

用于连接数据库的服务名,参数值格式为:
服务名=(IP[:PORT],IP[:PORT],…)。

  • TIME_ZONE

指明客户端的默认时区设置范围为:-779~840M,如 60 对应 +1:00 时区,+480 对于东八区,如果不做配置默认是操作系统的时区。

  • KEYWORDS

该参数可以用于屏蔽数据库关键字,如果数据库关键字在 SQL 语句中以单词的形式存在,无法识别需要加上双引号或者可以通过该参数来屏蔽关键字,建议大小写都写入参数中。
屏蔽后如果sql中有关键字执行sql会报错语法分析出错,所以建议表名、表字段等尽量不要出现关键字。
例如:KEYWORDS=(versions,VERSIONS,type,TYPE)

  • LOGIN_MODE

指定优先登录的服务器模式。0:优先连接 PRIMARY 模式的库,NORMAL 模式次之,最后选择 STANTBY 模式;1:只连接主库;2:只连接备库;3:优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式;4:优先连接 NORMAL 模式的库,PRIMARY 模式次之,最后选择 STANDBY 模式。
注意
在 2021 年版本之后,此参数的默认值由 0 变更为 4。该参数详细介绍及使用办法请参考《DM 数据守护与读写分离集群》-5.8 章节。手册位于数据库安装路径 /dmdbms/doc 文件夹。

  • SWITCH_TIMES

表示以服务名连接数据库时,若未找到符合条件的库成功建立连接,将尝试遍历服务名中库列表的次数。有效值范围 1~9223372036854775807,默认值为 1,可以设置至少 3 次用来避免由于网卡的波动,造成数据库连接测频繁切换。

  • SWITCH_INTERVAL

表示在服务器之间切换的时间间隔,单位为毫秒,有效值范围 1~9223372036854775807。与参数 SWITCH_TIMES、EP_SELECTOR 配合使用,EP_SELECTOR 设置为 0,等待 SWITCH_INTERVAL 后会切换尝试连接下一个服务器,EP_SELECTOR 设置为 1,等待 SWITCH_INTERVAL 后会继续尝试连接该服务器,直到 SWITCH_TIMES 次再切换下一个服务器。

  • RW_SEPARATE

表示是否启用读写分离。0:不启用;1:启用;2:启用,备库由客户端进行选择,且只会选择服务名中配置的节点。

  • RW_PERCENT

表示读写分离分发比例,有效值范围 0~100,主库占所有事物数的比例。可以根据主备库的实际压力来设定。

  • EP_SELECTOR

表示连接数据库时采用何种模型建立连接,0:依次选取列表中的不同节点建立连接,使得所有连接均匀地分布在各个节点上,1:选择列表中最前面的节点建立连接,只有当前节点无法建立连接时才会选择下一个节点进行连接。缺省值0

  • AUTO_RECONNECT

表示连接发生异常或一些特殊场景下连接处理策略。0:关闭连接,1:当连接发生异常时自动切换到其他库,无论切换成功还是失败都会抛一个 SQLEXCEPTION,用于通知上层应用进行事务执行失败时的相关处理;2 配合 EP_SELECTOR=1 使用,如果服务名列表前面的节点恢复了,将当前连接切换到前面的节点上,可以根据应用的实际要求设定。缺省值0

3.3 常用配置

dbeaver不支持

3.3.1 单机配置

配置示例

##以#开头的行表示是注释
##全局配置区
TIME_ZONE=(480)
LANGUAGE=(en)
DM=(192.168.40.130:5236)

连接示例:

  • Disql 连接:
[dmdba@localhost~]$/dmdb8/dmdbms/bin/disql SYSDBA/SYSDBA@DM
  • 通过管理工具连接:

image.png

3.2.2 读写分离集群配置

  • 配置示例

1.服务器上配置

cat /etc/dm_svc.conf
##以#开头的行表示是注释
##全局配置区
TIME_ZONE=(480)  #指明客户端的默认时区 +480东八区
LANGUAGE=(en)
DMRW=(192.168.40.130:5236,192.168.40.140:5236)
##服务配置
[DMRW]
LOGIN_MODE=(1)  #0:优先连接 PRIMARY 模式的库,NORMAL 模式次之,最后选择 STANTBY 模式;1:只连接主库;2:只连接备库;3:优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式;4:优先连接 NORMAL 模式的库,PRIMARY 模式次之,最后选择 STANDBY 模式。
RW_SEPARATE=(1) #是否启用读写分离。0:不启用;1:启用;2:启用,备库由客户端进行选择,且只会选择服务名中配置的节点。
RW_PERCENT=(30) #读写分离分发比例,有效值范围 0~100,主库占所有事物数的比例
SWITCH_TIMES=(60) #以服务名连接数据库时,若未找到符合条件的库成功建立连接,将尝试遍历服务名中库列表的次数。
SWITCH_INTERVAL=(1000) #在服务器之间切换的时间间隔,单位为毫秒

建议使用服务名连接是为了防止当集群发生切换时应用连接不到切换后的主库。默认主备集群是连接到主库进行读和写操作的,备库只是在灾备库。
2.客户端配置
win64:C:\Windows\System32\dm_svc.conf

##以#开头的行表示是注释
##全局配置区
TIME_ZONE=(480)  #指明客户端的默认时区 +480东八区
LANGUAGE=(en)
DMRW=(192.168.40.130:5236,192.168.40.140:5236)
##服务配置
[DMRW]
LOGIN_MODE=(1)  #0:优先连接 PRIMARY 模式的库,NORMAL 模式次之,最后选择 STANTBY 模式;1:只连接主库;2:只连接备库;3:优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式;4:优先连接 NORMAL 模式的库,PRIMARY 模式次之,最后选择 STANDBY 模式。
RW_SEPARATE=(1) #是否启用读写分离。0:不启用;1:启用;2:启用,备库由客户端进行选择,且只会选择服务名中配置的节点。
RW_PERCENT=(30) #读写分离分发比例,有效值范围 0~100,主库占所有事物数的比例
SWITCH_TIMES=(60) #以服务名连接数据库时,若未找到符合条件的库成功建立连接,将尝试遍历服务名中库列表的次数。
SWITCH_INTERVAL=(1000) #在服务器之间切换的时间间隔,单位为毫秒

3.manager连接工具连接
image.png

  • jdbc 连接串
jdbc:dm://DMRW
jdbc:dm://DM?DM=(192.168.40.130:5236)

参考链接:https://eco.dameng.com/document/dm/zh-cn/ops/RWC-installation-cluster.html#1.2%20%E9%9B%86%E7%BE%A4%E8%A7%84%E5%88%92

3.4.问题处理

读写分离架构下数据库连接工具连接失败

问题描述
主备、客户端/etc/dm_svc.conf 文件配置如下:
[dmdba@localhost ~]$ cat /etc/dm_svc.conf 
##全局配置区
TIME_ZONE=(480)  #指明客户端的默认时区 +480东八区
LANGUAGE=(en)
DMRW=(192.168.40.130:5236,192.168.40.140:5236)
##服务配置
[DMRW]
LOGIN_MODE=(1)  #0:优先连接 PRIMARY 模式的库,NORMAL 模式次之,最后选择 STANTBY 模式;1:只连接主库;2:只连接备库;3:优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式;4:优先连接 NORMAL 模式的库,PRIMARY 模式次之,最后选择 STANDBY 模式。
RW_SEPARATE=(1) #是否启用读写分离。0:不启用;1:启用;2:启用,备库由客户端进行选择,且只会选择服务名中配置的节点。
RW_PERCENT=(30) #读写分离分发比例,有效值范围 0~100,主库占所有事物数的比例
SWITCH_TIMES=(60) #以服务名连接数据库时,若未找到符合条件的库成功建立连接,将尝试遍历服务名中库列表的次数。
SWITCH_INTERVAL=(1000) #在服务器之间切换的时间间隔,单位为毫秒

--服务器上访问正常
[dmdba@localhost ~]$ /dmdb8/dmdbms/bin/disql SYSDBA/SYSDBA@DMRW

Server[192.168.40.130:5236]:mode is primary, state is open
login used time : 10.786(ms)
disql V8
解决办法

客户端需配置
win64:C:\Windows\System32\dm_svc.conf
配置后manager连接工具需重启
参考链接:https://eco.dameng.com/document/dm/zh-cn/ops/RWC-installation-cluster.html

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

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

相关文章

解决 vue3 element 表格和图片预览样式有冲突

查看表格中的预览出现样式问题冲突 <el-image:src"${realSrc}"fit"cover":style"width:${realWidth};height:${realHeight};":preview-src-list"realSrcList":append-to-body"true"><template #error><div c…

用placement label代替keep margin解决绕线问题

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 通常我们用keepout margin去降低多pin cell类型的密度&#xff0c;这里提供一种替代方案&#xff0c;即使用placement label。好处是只限制多pin cell彼此间距&#xff0c;不会…

No202.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

【MySQL系列】 第四章 · 约束

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

Django视图层()

视图层 django视图层&#xff1a;Django项目下的views.py文件&#xff0c;它的内部是一系列的函数或者是类,用来处理客户端的请求后处理并返回相应的数据 三板斧 HttpResponse # 返回字符串 render # 返回html页面&#xff0c;并且在返回浏览器之前还可以给html文件…

java springboot2.7 JSR303与Hibernate进行Bean的数据校验

我们如果对数据能进行格式校验 做个安全检查就会容易很多 其实 各个系统中都必然后拥有数据校验&#xff0c;这也不是新东西 J2EE规范中JSR303就规范定义了一组有关数据校验的API 首先 我们在 pom.xml 中 注入依赖 <dependency><groupId>javax.validation</gr…

vue day1(主要是指令)

1、引包 或者&#xff1a;cdn网址 2、创建实例&#xff0c;初始化渲染 3、插值表达式 {{}} 表达式&#xff1a;可以被求值的代码 4、响应式数据&#xff1a;数据发生变化&#xff0c;视图自动更新&#xff08;底层是dom操作&#xff09; data中数据会被添加到实例上&#x…

【机器学习】朴素贝叶斯算法:多项式、高斯、伯努利,实例应用(心脏病预测)

1. 朴素贝叶斯模型 对于不同的数据&#xff0c;我们有不同的朴素贝叶斯模型进行分类。 1.1 多项式模型 &#xff08;1&#xff09;如果特征是离散型数据&#xff0c;比如文本这些&#xff0c;推荐使用多项式模型来实现。该模型常用于文本分类&#xff0c;特别是单词&#xf…

Java实现身份证号校验,最后一位校验码校验

中国居民身份证号码编码规则 第一、二位表示省&#xff08;自治区、直辖市、特别行政区&#xff09;。 第三、四位表示市&#xff08;地级市、自治州、盟及国家直辖市所属市辖区和县的汇总码&#xff09;。其中&#xff0c;01-20&#xff0c;51-70表示省直辖市&#xff1b;21-5…

《AI超级个体:ChatGPT与AIGC实战指南 》书籍分享

前言 ChatGPT是一款通用人工智能&#xff08;AI&#xff09;工具&#xff0c;使用过它的人都能感受到它的魅力。AI并不是一个新事物&#xff0c;它在全世界都发展很多年了&#xff0c;但在ChatGPT诞生之前&#xff0c;我们的AI只能算垂直AI&#xff0c;比如AlphaGo&#xff0c…

刘家窑中医医院:鲁卫星主任团队走进社区,免费义诊送健康"

北京丰台刘家窑中医医院&#xff0c;前身为中国医学会航空医学会专家门诊&#xff0c;是一家医保单位&#xff0c;无需定点即可享受医保服务。这是一家集医疗、科研、预防、保健为一体的国家非营利性特色中医院。为了更好地服务社区群众&#xff0c;提高社区居民对健康的关注&a…

Python爬虫程序网络请求及内容解析

以下是一个简单的Python爬虫程序&#xff0c;用于爬取商户的内容。这个程序使用了requests和BeautifulSoup库来进行网络请求和内容解析。 import requests from bs4 import BeautifulSoup# 爬虫爬虫IP信息 proxy_host duoip proxy_port 8000# 请求URL url 目标网站# 创建一个…

typhonjs-escomplex 代码可读性 可维护度探索

目前市面上的前端代码质量评分中的代码可维护度是大都是基于 typhonjs-escomplex 这个库扫描而来&#xff0c;但是这个库的官方文档并没有介绍相关指标数据的计算规则&#xff0c;不知道规则如何提升指标数据呢&#xff1f;所以本文对 typhonjs-escomplex 源码进行探索&#xf…

NI和EttusResearchUSRP设备之间的区别

NI和EttusResearchUSRP设备之间的区别 概述 USRP&#xff08;通用软件无线电外设&#xff09;设备是业界领先的商软件定义无线电&#xff08;SDR&#xff09;。全球数以千计的工程师使用USRPSDR来快速设计、原型设计和部署无线系统。它们以两个不同的品牌进行营销和销售&…

机器学习线性代数知识补充

线性代数知识补充 正交矩阵与正交变换方阵特征值与特征向量相似矩阵对角化二次型正定二次型 正交矩阵与正交变换 方阵特征值与特征向量 相似矩阵 对角化 二次型 正定二次型

如何在Jupyter Lab中安装不同的Kernel

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

50.批处理脚本(2/2)

目录 一、批处理命令。 &#xff08;1&#xff09;net use 连接共享文件夹或查看。 &#xff08;1.1&#xff09;连接共享文件夹。 &#xff08;1.2&#xff09;断开连接。 &#xff08;1.3&#xff09;显示当前连接。 &#xff08;1.4&#xff09;查看电脑的共享文件夹。…

[文件读取]cuberite 文件读取 (CVE-2019-15516)

1.1漏洞描述 漏洞编号CVE-2019-15516漏洞类型文件上传漏洞等级⭐⭐⭐漏洞环境VULFOCUS攻击方式 描述: Cuberite是一款使用C语言编写的、轻量级、可扩展的多人游戏服务器。 Cuberite 2019-06-11之前版本中存在路径遍历漏洞。该漏洞源于网络系统或产品未能正确地过滤资源或文件路…

计算机操作系统—经典同步问题

经典同步问题 1.生产者与消费者问题 1.1.问题概述 在现实生活中&#xff0c;当我们缺少某些生活用品时&#xff0c;就会到超市去购买。当你到超市时&#xff0c;你的身份就是消费者&#xff0c;那么这些商品又是哪里来的呢&#xff0c;自然是供应商&#xff0c;那么它们就是生…

Python基础入门----如何使用 Pipenv 在项目目录中创建虚拟环境

文章目录 引言Pipenv 简介安装 Pipenv在项目目录中创建虚拟环境1. 进入你的项目目录2. 设置环境变量3. 创建虚拟环境4. 激活虚拟环境结论引言 在Python开发中,使用虚拟环境是一种良好的实践,它可以帮助开发者管理项目的依赖,并避免不同项目间的依赖冲突。Pipenv 是一个流行…