达梦数据库-读写分离集群部署

读写分离集群部署

读写分离集群由一个主库以及一个或者多个(最多可以配置 8 个)实时备库组成,基于实时归档实现的高性能数据库集群,不但提供数据保护、容灾等数据守护基本功能,还具有读写操作自动分离、负载均衡等特性。同时可以配置确认监视器达到主备库自动切换实现高可用特性。读写分离集群适合读多写少的应用环境。

部署规划(REALTIME 自动切换)

1写1读2节点读写分离集群部署规划
IP规划:

主机名服务ip心跳ip数据库名实例名
dm01192.168.10.101192.168.10.101dmdbrw1
dm02192.168.10.102192.168.10.102dmdbrw2

端口规划:

实例名实例端口MAL 系统监听 TCP 连接的端口实例本地的守护进程监听 TCP 连接的端口实例监听守护进程 TCP 连接的端口
rw15236733674367536
rw25236733674367536

本地存储LVM磁盘规划:(按实际需求调整磁盘空间)
磁盘 LVM磁盘名/用途
/dev/sdc(100G) /dev/dmappvg/dmapplv (数据库安装磁盘)
/dev/sde(500G) /dev/dmdatavg/dmdatalv (数据磁盘)
/dev/sdf(500G) /dev/dmbakvg/dmbaklv (备份磁盘)

目录规划:(在对应服务器上创建目录owner为dmdba组为dinstall)
数据库软件安装目录 /home/dmdba/dmdbms
实例安装目录 /dmdata/
归档日志存放目录 /dmdata/arch
备份文件存放目录 /dmdata/dmbak/

操作系统配置

该步骤与单机部署一致,详情见 达梦数据库单机部署步骤

数据库软件安装

该步骤与单机部署一致,详情见 达梦数据库单机部署步骤

读写分离集群配置

初始化实例

2个节点完成实例初始化
执行以下命令
/home/dmdba/dmdbms/bin/dminit path=/dmdata page_size=32 extent_size=32 charset=1 log_size=2048 db_name=dmdb instance_name=dmdb SYSDBA_PWD=“password” SYSAUDITOR_PWD=“password”
以主机dmdb01为读写分离主库,启动实例
/home/dmdba/dmdbms/bin/dmserver /dmdata/dmdb/dm.ini
出现system is ready后输入exit停止数据库。

脱机备份数据库

在主机dmdb01上执行以下命令,确认主库 dmap 服务已启动:
ps -ef|grep dmap

若未启动,则先启动 DMAP 服务,dmdba 到安装目录的 bin 下执行以下命令:
./DmAPService start
dmdba用户 启动dmrman工具
/home/dmdba/dmdbms/bin/dmrman use_ap=2
执行 backup 全库:
backup database ‘/dmdata/dmdb/dm.ini’ backupset ‘/home/dmdba/bakfull’;
使用方式,如下图:
在这里插入图片描述

修改dm.ini参数

所有节点都要修改
执行以下命令:
vi /dmdata/dmdb/dm.ini
主库Dmdb01上修改以下参数值:

INSTANCE_NAME = rw1
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间

备库Dmdb02上修改以下参数值:

INSTANCE_NAME = rw2
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2

配置归档配置文件 dmarch.ini

在实例目录下新建文件 dmarch.ini,执行以下命令:
vi /dmdata/dmdb/dmarch.ini
REALTIME自动切换模式下
需要指定ARCH_WAIT_APPLY=1保证主备事务一致:
在实例目录下新建文件 dmarch.ini,执行以下命令:
vi /dmdata/dmdb/dmarch.ini
主库dmdb01上添加以下内容:

ARCH_WAIT_APPLY=1
[ARCHIVE_REALTIME1]  
ARCH_TYPE     = REALTIME  #即时归档类型
ARCH_DEST     = rw2 #即时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE     = LOCAL  #本地归档类型
ARCH_DEST     = /dmdata/arch    #本地归档文件存放路径
ARCH_FILE_SIZE    = 2048 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT  = 102400  #单位 Mb,0 表示无限制,范围 1024~4294967294M

备库dmdb02上添加以下内容:

ARCH_WAIT_APPLY=1
[ARCHIVE_REALTIME1]  
ARCH_TYPE     = REALTIME
ARCH_DEST     = rw1
[ARCHIVE_LOCAL1]
ARCH_TYPE     = LOCAL
ARCH_DEST     = /dmdata/arch
ARCH_FILE_SIZE    = 2048
ARCH_SPACE_LIMIT  = 102400

配置MAL系统配置文件 dmmal.ini

在实例目录下新建文件 dmmal.ini,执行以下命令。
vi /dmdata/dmdb/dmmal.ini
主备库2个节点文件内容要相同。

MAL_CHECK_INTERVAL   = 5   #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL  = 15   #判定 MAL 链路断开的时间
[MAL_INST1]MAL_INST_NAME = rw1 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致MAL_HOST     = 192.168.10.101  #MAL 系统监听 TCP 连接的 IP 地址MAL_PORT     = 7336 #MAL 系统监听 TCP 连接的端口MAL_INST_HOST   = 192.168.10.101  #实例的对外服务 IP 地址MAL_INST_PORT   = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致MAL_DW_PORT   = 7436 #实例对应的守护进程监听 TCP 连接的端口MAL_INST_DW_PORT = 7536 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]MAL_INST_NAME = rw2MAL_HOST      = 192.168.10.102MAL_PORT          = 7336MAL_INST_HOST         = 192.168.10.102MAL_INST_PORT         = 5236MAL_DW_PORT  = 7436MAL_INST_DW_PORT = 7536

配置守护进程配置文件 dmwatcher.ini

在实例目录下新建文件 dmwatcher.ini,执行以下命令:
vi /dmdata/dmdb/dmwatcher.ini
主备库2节点文件内容要相同。配置为全局守护类型,使用自动切换模式

[GRP_RW] 
DW_TYPE    = GLOBAL #全局守护类型
DW_MODE    = AUTO #自动切换模式
DW_ERROR_TIME     = 30 #远程守护进程故障认定时间
INST_RECOVER_TIME  = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME   = 20  #本地实例故障认定时间
INST_OGUID         = 453331 #守护系统唯一 OGUID 值
INST_INI           = /dmdata/dmdb/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART  = 1 #打开实例的自动启动功能
INST_STARTUP_CMD   = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动

备份还原备库

将备份的文件/home/dmdba/bakfull拷贝到另外两台服务器上。
在主机dmdb02
使用 dmrman 工具还原备库,dmdba 用户执行:
dmrman use_ap=2
进入dmrman工具交互界面
执行 restore:
restore database ‘/dmdata/dmdb/dm.ini’ from backupset ‘/home/dmdba/bakfull’;
完成后执行 recover:
recover database ‘/dmdata/dmdb/dm.ini’ from backupset ‘/home/dmdba/bakfull’;
最后执行 recover update db_magic。
recover database ‘/dmdata/dmdb/dm.ini’ update db_magic;

注册服务

以上启动为前台方式启动,仅用户搭建过程中验证配置。配置没问题后需要将实例,守护进程和确认监视器注册为系统服务。
使用 root 用户,到数据库安装目录的script/root下。
注册守护进程服务(主备库都执行)。

./dm_service_installer.sh -t dmwatcher -p DW -watcher_ini /dmdata/dmdb/dmwatcher.ini	

注册数据库实例服务(主备库都执行):
主库:

/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p rw1 -dm_ini /dmdata/dmdb/dm.ini -m mount

备库:

/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p rw2 -dm_ini /dmdata/dmdb/dm.ini -m mount

注册之后先不启动,启动服务不以root用户,而要用dmdba用户,启动脚本在v$DM_HOME/bin目录下(也就是软件安装的bin目录),执行ll|grep Dm可以看到。

Mount状态启动集群

以 mount 方式启动数据库实例

使用 dmdba 用户,执行以下命令(主备库都执行):
dmserver /dmdata/dmdb/dm.ini mount
主备库都要是ready状态,表示成功

在新的终端使用 disql 工具连接数据库:
disql SYSDBA/‘“password”’

主备库都修改 oguid,执行以下命令:
sp_set_oguid(453331);

主库dmdb01上修改数据库模式为 primary,执行以下命令:
alter database primary;

备库dmdb02上修改数据库模式为 standby,执行以下命令:
alter database standby;

启动守护进程
dmdba 用户下,到数据库安装目录的 bin 下执行以下命令(主备库都执行):
dmwatcher /dmdata/dmdb/dmwatcher.ini

守护进程启动后,会将 Mount 的实例 Open。这里是前台启动的方式,因为我们前面注册了服务名称,所以就没必要前台启动,直接配好主从的主备关系后crtl+C退出两个实例的前台mount启动,然后调整实例启动服务脚本里的启动状态,依次按顺序启动主、备库实例、然后再主、备库的守护DmWatcher服务。

配置监视器

守护进程配置为自动切换时,必须配置确认监视器。在主备服务器以外的服务器上(需安装有 DM 数据库软件,且与主备心跳网络端口开放)。
新建确认监视器配置文件 dmmonitor.ini,执行以下命令:
vi /dmdata/dmdb/dmmonitor.ini
添加以下内容:

MON_DW_CONFIRM    = 1 #确认监视器模式
MON_LOG_PATH    = /home/dmdba/dmdbms/log #监视器日志文件存放路径
MON_LOG_INTERVAL  = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE   = 200  #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT  = 1024 
[GRP_RW] MON_INST_OGUID    = 453331 #组 GRP1 的唯一 OGUID 值
#监视器到组 GRP1 的守护进程的连接信息;IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORTMON_DW_IP     = 192.168.10.101:7436 MON_DW_IP     = 192.168.10.102:7436 

执行以下命令,启动监视器。

/home/dmdba/dmdbms/bin/dmmonitor /dmdata/dmdb/dmmonitor.ini

启动后输入 show 命令查看集群状态。

验证主备集群同步状态

disql 客户端验证
使用 disql 客户端登录主库,创建测试表,插入数据,执行以下命令:
注意密码含有特殊字符时的转义处理
disql SYSDBA/‘“password”’@192.168.10.101:5236
SQL 提示符下执行以下命令:

create table test(id int);
insert into test values (1);
commit;

使用 disql 客户端登录备库,查询测试表验证,执行以下命令:
disql SYSDBA/‘“password”’@dameng123@192.168.10.102:5236
SQL 提示符下执行以下命令:
select * from test;
查看数据是否正常同步。

配置sql日志

所有节点修改sqllog.ini
vi /dmdata/dmdb/sqllog.ini

BUF_TOTAL_SIZE = 10240
BUF_SIZE = 1024
BUF_KEEP_CNT = 6
[SLOG_ALL]
FILE_PATH = ../log
PART_STOR = 1
SWITCH_MODE = 2
SWITCH_LIMIT = 512
ASYNC_FLUSH = 1
FILE_NUM = 5
ITEMS = 0
SQL_TRACE_MASK = 2:3:25
MIN_EXEC_TIME = 1500
USER_MODE = 0
USERS = 

客户端连接集群

客户端主机上需要配置 dm_svc.conf 文件(未安装 DM 数据库的机器新建即可),文件路径:
32 位的 DM 安装在 Win32 操作平台下,此文件位于 %SystemRoot%\system32 目录;
64 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\system32 目录;
32 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\SysWOW64 目录;
在 Linux 平台下,此文件位于/etc 目录。
文件内容:

#以#开头的行表示是注释
#全局配置区
DMRW=(192.168.10.101:5236,192.168.10.102:5236)
TIME_ZONE=(+480) #表示+8:00 时区
LOGIN_ENCRYPT=(0)
DIRECT=(Y)
#服务配置区
[DMRW]
LOGIN_MODE=(1)#只连主库
RW_SEPARATE=(1) #是否启用读写分离
RW_PERCENT=(10) #读写分离分发比例

客户端程序连接数据库时,需要指定 IP 端口处替换为服务名即可,例如:disql SYSDBA/‘“password”’@DMRW。jdbc的url为:jdbc:dm://DMRW
注意:
1)当修改了 dm_svc.conf 内容后,需要重启客户端程序,修改的配置才能生效。
2)请把该文件路径授予666权限。


到此就完成了达梦数据库读写分离集群的部署。

更多详细资料可前往达梦社区:https://eco.dameng.com

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

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

相关文章

【ALGC】探秘 ALGC—— 卓越数据处理能力的科技瑰宝

我的个人主页 我的领域:人工智能篇,希望能帮助到大家!!!👍点赞 收藏❤ 在大数据时代,如何高效地处理和分析海量数据是一个核心挑战。ALGC(Advanced Learning and Generalized Comp…

如何提高webpack的构建速度?

提高Webpack构建速度是优化Web开发流程的一个重要方面。以下是一些提升Webpack构建速度的方法: 1. 使用适当的mode选项 开发模式(development):默认情况下,Webpack以较慢的速度进行构建,以便于开发。如果…

docker仓库用户认证

保证实验环境纯净删除启动的docker 1.安装建立认证文件的工具包 [rootlocalhost ~]# yum install httpd-tools -y 2.创建目录存放认证文件 [rootlocalhost ~]# mkdir auth [rootlocalhost ~]# htpasswd -Bc auth/.htpasswd lee #-B 强制使用最安全加密方式,默认用m…

在 Windows 下生成 .tgz 文件的方法

方法 1:使用 7-Zip 7-Zip 是一个流行的免费压缩工具,支持生成 .tar.gz 格式。 步骤: 下载并安装 7-Zip。准备好要压缩的文件或文件夹。右键点击文件或文件夹,选择 7-Zip > 添加到压缩文件...。在弹出的对话框中:…

WPSJS:让 WPS 办公与 JavaScript 完美联动

随着办公自动化需求的日益增长,WPS Office 推出了 WPSJS,这是一款强大的开发者工具,允许开发者通过 JavaScript 脚本与 WPS 办公软件进行互动。无论是在表格中自动填充数据、在文档中修改格式,还是在演示文稿中插入动态内容&#…

(OCPP服务器)SteVe编译搭建全过程

注意:建议使用3.6.0,我升级到3.7.1,并没有多什么新功能,反而电表的实时数据只能看到累计电能了,我回退了就正常,数据库是兼容的,java版本换位java11,其他不变就好 背景:…

Git 的基本概念和使用

Git是一个分布式版本控制系统,它可以帮助开发人员追踪和管理代码的修改。下面是Git的基本概念和使用方式的解释: 仓库(Repository):Git使用仓库来存储代码和版本历史记录。仓库可以位于本地计算机上,也可以…

【IMU:视觉惯性SLAM系统】

视觉惯性SLAM系统简介 相机(单目/双目/RGBD)与IMU结合起来就是视觉惯性,通常以单目/双目IMU为主。 IMU里面有个小芯片可以测量角速度与加速度,可分为6轴(6个自由度)和9轴(9个自由度)IMU,具体的关于IMU的介…

Linux 基本使用和程序部署

1. Linux 环境搭建 1.1 环境搭建方式 主要有 4 种: 直接安装在物理机上。但是Linux桌面使用起来非常不友好,所以不建议。[不推荐]。使用虚拟机软件,将Linux搭建在虚拟机上。但是由于当前的虚拟机软件(如VMWare之类的)存在一些bug&#xff…

c++------------------函数

函数定义 语法格式 函数定义包括函数头和函数体。函数头包含返回类型、函数名和参数列表。函数体是用花括号{}括起来的代码块,用于实现函数的功能。例如,定义一个计算两个整数之和的函数: int add(int a, int b) {return a b; }这里int是返回…

如何在centos系统上挂载U盘

在CentOS上挂载NTFS格式的U盘,需要执行一系列步骤,包括识别U盘设备、安装必要的软件、创建挂载点,并最终挂载U盘。以下是在CentOS上挂载NTFS格式U盘的详细步骤: 一、准备工作 确认CentOS版本: 确保你的CentOS系统已经安装并正常运行。不同版本的CentOS在命令和工具方面可能…

Excel中match()函数

函数功能概述 MATCH 函数是 Excel 中用于在指定区域中查找特定值的位置的函数。它返回指定数值在指定数组区域中的位置。这个位置是相对于查找区域的相对位置,而不是绝对的单元格位置。语法结构 MATCH(lookup_value, lookup_array, match_type)lookup_value&#xf…

解决树形列表中数值层级累加

一、场景 记录解决树形列表中&#xff0c;父级中的某个属性需要由自身和子集累加的一个方法(递归)。 二、解决方案 public static void main(String[] args) throws Exception {List<NewsCategoryStaticDto> dataList new ArrayList<>();/*** 构造树形列表数据*…

【工作流】工作顺序

背景 当时的情况是&#xff1a;没有产品经理&#xff0c;后端直接和需求方对接&#xff1b;前端只能短时间投入大部分时间要忙别的&#xff1b;只有3个角色&#xff1a;需求方&#xff0c;后端&#xff0c;前端&#xff1b; 当时直接执行的 直接使用会议了解需求&#xff0c…

【人工智能-数据集】RML2018 时域信号的时序信号和星座图的图片信号生成方式(可用于多模态特征融合)

RML2018 数据集处理与多模态数据集生成指南 在现代无线通信和机器学习的交叉领域,数据集的质量和多样性对于模型的性能至关重要。RML2018 数据集作为一个涵盖多种调制方式和信噪比(SNR)的丰富资源,广泛应用于信号识别、调制分类等任务。本篇博客将深入介绍如何处理 RML201…

Android 获取屏幕物理尺寸

注&#xff1a;编译 sdk 需要使用 30 因为引入了 WindowMetrics、uild.VERSION_CODES.R 新 sdk 才存在的类和属性 某些场景处理 view &#xff0c;对 view 显示的位置要求比较精确&#xff0c;通常我们使用context.getResources().getDisplayMetrics().widthPixels 获取到的宽、…

sqoop的参数有哪些?

Sqoop 是一款用于在 Hadoop 与关系型数据库之间进行数据传输的工具&#xff0c;它有很多参数&#xff0c;可分为通用参数、导入参数和导出参数等&#xff0c;以下是一些常见的参数介绍&#xff1a; 通用参数 --connect 说明&#xff1a;指定要连接的关系型数据库的 JDBC URL。…

不同路径

不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#xff…

NS3学习——tcpNewReno算法代码详解(2)

NS3学习——tcpNewReno算法代码详解&#xff08;1&#xff09;-CSDN博客 目录 二、详解 4.TCP NewReno的注册和构造部分 5. TcpNewReno慢启动算法 6. TcpNewReno拥塞避免算法 7.IncreaseWindow函数的实现 8.其他成员函数的实现 8.1 GetName函数 8.2 GetSsThresh函数 …

OpenCV相机标定与3D重建(26)计算两个二维点集之间的部分仿射变换矩阵(2x3)函数 estimateAffinePartial2D()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算两个2D点集之间的具有4个自由度的最优有限仿射变换。 cv::estimateAffinePartial2D 是 OpenCV 库中的一个函数&#xff0c;用于计算两个二维…