首页 数据库,日记

写在前面:达梦技术社区上线啦,https://eco.dameng.com/community/question 欢迎大家进来学习,提问

功能特性

dmProxy是DM提供的数据库管理中间件工具,其在数据库访问结构中位于数据库服务器之上,数据库访问接口之下,提供应用程序对DM数据库服务器的连接和访问管理。基于dmProxy的数据库访问模型如图所示。
微信图片_20220222152503.png

dmProxy的好处:

1.可以避免应用程序直接连接数据库造成的数据库真实物理地址的暴露、登录数据库的账号密码信息的泄露,从而避免上述泄露信息被恶意利用而导致数据库遭受攻击;
2.可以避免因数据库管理员的误操作而执行危险的数据库操作(如删除核心数据)而导致数据库结构或完整性遭到破坏;
3.在保证多个数据库数据同步时,可将对一个数据库的访问通过预设规则自动分配到多个数据库,减轻数据库承受的访问压力;
4.可以对数据库的运行状态进行监控,避免利用数据库自身的运行状态监控消耗数据库资源的问题。

问题背景:

该项目采用dmproxy,在日常运维过程中发现proxy运行一段时间后,从DEM中查看MS和PS的拓扑图,发现MS与PS间的连接中断,无法采集PS上的连接数,并且MS在线修改用户信息配置后无法同步到PS,业务未受到影响。

问题分析:

起初数据库与中间件未设置ntp对时,根据以往经验以为是服务器间时间不一致导致,而后配置ntp后发现该现象并未恢复,于是大胆猜想由于并发登录场景下多线程通过PS映射连接数据库导致MS与PS断开,无法接受MS的在线配置变更。

解决思路

尝试在测试环境复现生产环境的场景,需要满足场景:通过中间件并发连接测试库,查看DEM拓扑图中的连接线并在线修改MS配置观察并验证PS1和PS2是否收到相应。
(1)、使用同事提供的测试工具制造并发登录场景,制造MS与PS1,PS2连接异常场景。
工具:para_login.zip、dm8.zip
先看下问题重现场景:
MS异常.png

(2)para_login.zip的使用方法:
链接:https://pan.baidu.com/s/1Q0sZuUXIr23XtLGWJyqfBA
提取码:q5hl
--来自子督@小窝的BD网盘,以上为小公举的下载连接请各位基佬自行下载,如果连接过期,那么请后台留言~
使用方法:
①解压压缩包
微信图片_20220224095523.png

②测试机需要安装gcc环境,修改makefile需要修改位置为红色方框
微信图片_20220224095717.png

③修改t_para_login.c文件修改位置和行数为红色
注:PARA_THR_NUM参数为并发登录数
微信图片_20220224100024.png

微信图片_20220224100100.png

④添加/etc/profile环境变量

cat /etc/profile
export LD_LIBRARY_PATH=/home/dmdba/dmdbms/bin
source /etc/profile

⑤执行make进行编译后执行./ t_para_login
注:测试环境为一台MS,端口号5000,另外一台为PS1和PS2端口号分别为5001和5002,将这个工具复制两份,分别进行PS1和PS2的登录测试,执行一段时间后,重新连接DEM中MS查看拓扑图就会出现MS和PS断开问题。
(3)复现后尝试从DEM在线修改MS配置,验证PS1和PS2是否收到变更,此时MS配置刷新后,PS无法接受到更新后的配置
(4)目前该问题已经修复,如果使用请大家下载最新的版本进行享用

书山有路勤为径
学海无涯苦作舟


文章评论