DMSQLCOPY引流工具在不影响源端数据库运行的情况下,通过抓取应用与源端数据库的网络通信内容,通过相应的协议解析出应用对源端数据库的操作并将相应的操作转发到目的库执行。支持解析 的源端数据库类型有 oracle11、oracle12、oracle18、oracle19、mysql、pg、dm6、dm7 、 dm8。
组成主要由嗅探器、分析器、执行器三部分组成
图谱如下:
嗅探器的功能是捕获用户对数据库的操作发送的网络数据包。用户需指定需要捕获的网卡、数据库ip及端口号,根据数据库ip和端口号可以过滤得到与数据库通信的网络数据包。
嗅探器模块可以与其他模块集成运行,也可以单独作为一个独立模块运行。 当处于集成运行模式时,所捕获到的网络数据包通过内存直接发送到分析器分析处理;
处于独立运行模式时,此时会存在在线和离线两种方式。
离线运行,捕获到的数据包直接存入到指定的文件缓存文件夹中,当缓存文件个数达到最大数量时,由用户决定是否对缓存文件覆盖继续写入;
在线运行,会首先判断缓存文件夹中有无缓存文件,存在缓存文件时,读取缓存文件通过socket发送给分析器处理,后续捕获到的数据包当缓存文件发送完后才会存入内存缓存中,否则放入文件缓存中。
独立运行时的缓存模块由内存缓存和硬盘缓存组成,离线模式下只会开启硬盘缓存;在线运行时,会同时开启内存缓存和硬盘缓存,硬盘缓存存在文件时,为保证顺序,之后捕获的数据包写入文件缓存,当文件缓存达到最大时,此时会将抓包服务关闭
集成运行模式
该模式下所有模块一起启动。嗅探器将捕获的网络数据包通过内存发送给协议分析器。协议分析器处理 后传递给执行器。执行器将所收到的SQL语句在目的库上再次执行,并将执行结果写入到本地文件系统。该模式只需要配置 sqlcopy.ini 配置文件,将 STANDALONE 设为 false ,需要设置 SNIFFER_NETWORK_IP 、 SNIFFER_DATABASE_IP 、 SNIFFER_DATABASE_PORT 、 PACP_BUFFER_SIZE 等参数,其他参数根据实际情况填写,通过 start.bat/sh 启动。
修改sqlcopy.ini文件
ANALYZER_STANDALONE_FLAG=false
######################### 执行器 ##########################
# 执行器支持的数据库连接信息。
EXECUTOR_DB_TYPE1=dm8
EXECUTOR_DB_DRIVER_PATH1=/data/dmdata/dmdbms/drivers/jdbc/DmJdbcDriver18.jar
EXECUTOR_DB_DRIVER1=dm.jdbc.driver.DmDriver
#目的端数据库连接信息
EXECUTOR_DB_URL1=jdbc:dm://25.18.25.167:5236
EXECUTOR_DB_USER1_1=SYSDBA
EXECUTOR_DB_PASSWORD1_1=SYSDBA
######################## 嗅探器 ###########################
# ANALYZER_STANDALONE_FLAG=false,以下配置生效
# 嗅探器部署机器的网卡ip
SNIFFER_NETWORK_IP1=25.18.25.190
# 源端数据库ip端口配置, 多个配置格式: 192.168.92.3:5236,192.168.92.4:5236 (本地回环网卡配127.0.0.1)
SNIFFER_NETWORK_DB1=25.18.25.190:5236
独立运行模式
离线模式
该模式只需单独启动嗅探器,嗅探器将捕获到的网路数据包存入本地磁盘文件,只需配置 sniffer.ini 配置文件,将参数 RUN_TYPE 设为 offline ,其他参数根据实际情况填写,通过 sniffer_start.bat/sh 运行。
修改sniffer.ini 配置文件
修改数据库连接信息
目前测试情况来看离线模式只能采集本机的信息。
# 嗅探器独立运行方式 offline 离线 online 在线
RUN_TYPE=offline
# 网卡ip以及目标数据库配置、本机ip地址。
NETWORK_IP1=25.18.25.190
NETWORK_DB1=25.18.25.190:5236
修改缓存文件
# 文件存储文件夹
CACHE_DIR = /data/dmsqlcolynew/mj_data
在线模式
该模式需要将嗅探器模块与其他模块分开启动,嗅探器将捕获到的网络数据包通过 socket 发送给分析器处理,若数据发送失败,则会将多的数据缓存存入硬盘中,此时同时配置 sniffer.ini 与 sqlcopy.ini 配置文件,将 sniffer.ini 的参数 RUN_TYPE 设为 online ,设置 SOCKET_DST_IP 和 SOCKET_DST_PORT 参数;将 sqlcopy.ini 的参数 STANDALONE 设为 true 、 CACHE_READ 设为 false ,设置 ANALYZER_SOCKET_PORT 参数,其他参数根据实际情况填写,分别通过 sniffer_start.bat/sh 与 start.bat/sh 启动嗅探器和其他模块。
修改配置文件sniffer.ini
# 嗅探器独立运行方式 offline 离线 online 在线
RUN_TYPE=online
# 网卡ip以及目标数据库配置,本地地址
NETWORK_IP1=25.18.25.190
NETWORK_DB1=25.18.25.190:5236
# socket发送对应的ip和端口号,要和sqlcopy.ini 文件中ANALYZER_SOCKET_PORT对应。
SOCKET_DST_IP=25.18.25.190
SOCKET_DST_PORT=5566
修改配置文件sqlcopy.ini
ANALYZER_STANDALONE_FLAG=true
# ANALYZER_STANDALONE为true时, 是否读缓存文件进行解析
ANALYZER_CACHE_READ_FLAG=false
# 当“STANDALONE=true”且“CACHE_READ=false”时,分析器发送数据包的socket端口和sniffer.ini中SOCKET_DST_PORT
ANALYZER_SOCKET_PORT=5566
分析器的功能是将嗅探器所捕获到的请求/响应数据进行分析,最终得到数据包所携带的命令、或SQL、或参数、或参数类型等。根据嗅探器的运行方式,分析器获取嗅探器所捕获数据的方式有三种:集成运行模式,由嗅探器直接在应用程序内部传递给分析器;独立运行socket接收模式,当分析器正在运行时由嗅探器通过Socket发送给分析器;独立运行读缓存模式,嗅探器将捕获到的网络通信包缓存起来,分析器在设置好的缓存目录读取解析。
独立运行读缓存模式
该模式除嗅探器外其他模块都运行,协议分析器直接读取缓存文件,然后处理后传递给执行器,执行器将所收到的SQL语句在目的库上再次执行,并将执行结果写入到本地文件系统。该模式只需要配置 sqlcopy.ini 配置文件,将 STANDALONE 设为 false 、 CACHE_READ 设为 true ,需要设置 CACHE_PATH 参数,其他参数根据实际情况填写,通过 start.bat/sh 启动。
==# sqlcopy.ini 配置
ANALYZER_STANDALONE_FLAG=true
# ANALYZER_STANDALONE为true时, 是否读缓存文件进行解析 ANALYZER_CACHE_READ_FLAG=true ==
# 缓存路径
ANALYZER_CACHE_DIR=F:\tmp\sqlcopy\caches
执行器的主要功能是根据所收到的命令在目的数据库上执行分析器分析出来的SQL或其他命令,以及统计执行后的结果并写入到用户指定的文件夹下以便于查看。测试数据端支持单独使用DM数据库或Oracle数据库,或者同时使用DM数据库和Oracle数据库。执行器可根据配置项(EXECUTOR_CACHE_ANALYSIS)来决定其是否缓存分析结果。该配置项为“true”时表示缓存分析结果,执行器不会立即执行这些分析结果而是将其缓存到文件系统中,由用户后续的操作来决定其执行时间和次数。该项配置成“false”时表示不缓存分析结果,也即立即执行分析结果中携带的命令。执行器模块内部维护一个源端数据库连接与目的数据库连接的映射关系,该映射以IP和端口作为键,以目的数据库连接为值。当收到新的数据库操作时,通过该映射中查找连接,如果找到对应的连接则使用该连接来执行操作,如果查找不到则创建新的连接执行操作。找不到这种情况一般会出现在部署嗅探器后在线库没有重启时,此时源端库上已经存在有活动的连接,嗅探器捕获不到登录操作,只能通过使用预先配置的用户创建连接。执行器同时为每个测试连接维护一个语句句柄映射关系,用于保证在源端库同一个语句句柄上的操作在目的数据库上也是在同一个语句句柄上执行。以上描述的维护的数据库连接映射和句柄映射中的资源都是需要被关闭的资源。是否关闭的取决于是否收到对应的关闭操作。如果收到了连接的关闭命令,该连接所对应的全部语句句柄都会被关闭。上述的数据库连接一一对应的映射关系有个前提,即不限制目的数据库的连接数量(EXECUTOR_MAX_CONNECTION_SIZE=-1)。如果限制了目的数据库连接数量,该连接的映射关系可能由一对一变成多对一,即源端数据库的多个连接在目的数据库上是使用同一个数据库连接完成。执行器产生的执行结果有三种类型:成功、失败和过滤。执行成功的情况属于正常情况,说明一切正常。失败的情况常见于数据库的差异,比如SQL语句的功能是查询在线库的A表,若目的数据库没有与之一样的A表则会出现执行失败的异常;SQL语句的功能是创建A表,但在目的数据库已经有了A表等等情况。过滤的情况主要有两种:一是在线库执行失败的SQL;二是分析器解析失败的SQL
WEB控制台主要是用于展示嗅探器、分析器和执行器综合作用的结果,以及提供修改配置参数和控制应用启动停止的方法。启动应用后使用浏览器访问,端口是用户预先在文件sqlcopy.ini指定的。
执行嗅探器启动报错
出现于ARM cpu上
修改方式
改为系统java或者达梦数据库安装目录下java
或者修改启动脚本文件sniffer_start.bat/sh
PATH="$APP_HOME/jdk/bin/java"
修改为数据库安装目录下的java或使用linux系统下的java
DMSQLCOPY 在arm下启动报错修复
/data/DMSQLCOPY-V1.12-linux64/下的
wrapper wrapper.jar
用 /CloudResetPwdUpdateAgent/bin/wrapper和wrapper.jar进行替换
Vi /data/DMSQLCOPY-V1.12-linux64/wrapper/service_wrapper.conf
#set.JAVA_HOME=../jdk
set.JAVA_HOME=/CloudResetPwdUpdateAgent/depend/jre1.8.0_322/
替换
cp /data/DMSQLCOPY-V1.12-linux64/wrapper/libwrapper.so libwrapper.so_bak
cp /CloudResetPwdUpdateAgent/lib/libwrapper.so /data/DMSQLCOPY-V1.12-linux64/wrapper
文章
阅读量
获赞