简介
混合云数据库管理 (Hybrid Cloud Database Management, 简称 HDM) ,帮助企业打通混合云数据库架构,提供多环境、多数据库的统一监控、报警、运维、管理的能力,帮助文档。
核心功能:集群管理、统一监控、统一告警、Dashboard
、故障诊断、性能优化、安全审计、诊断报告等
目前支持数据库:MySQL
、Redis
、MongoDB
、PostgreSQL
支持环境:
环境 | 统一接入 | 统一监控 | 统一告警 | 集群管理 |
---|---|---|---|---|
阿里云 RDS |
支持 | 支持 | 支持 | 支持 |
阿里云 ECS 自建数据库 |
支持 | 支持 | 支持 | 支持 |
本地 IDC 自建数据库 |
支持 | 支持 | 支持 | 支持 |
其他云数据库 | 支持 | 支持 | 支持 | 支持 |
目标用户:DBA
登录地址:入口
RAM账号:sre@1596633715004367.onaliyun.com
实践
开通服务
实例接入
接入方式:阿里云 RDS、阿里云 ECS 自建数据库、本地 IDC 自建数据库、账号直连
功能对比:
功能 | 直连接入 | 集中模式接入 | 主机模式接入(推荐) |
---|---|---|---|
数据库监控指标 | 支持 | 支持 | 支持 |
实时性能 | 支持 | 支持 | 支持 |
实时会话 | 支持 | 支持 | 支持 |
空间分析 | 支持 | 支持 | 支持 |
SQL诊断 | 支持 | 支持 | 支持 |
慢请求分析 | 支持 | 支持 | 支持 |
主机监控指标 | 不支持 | 不支持 | 支持 |
请求诊断 | 不支持 | 不支持 | 支持 |
全量请求分析 | 不支持 | 不支持 | 支持 |
请求响应时间 | 不支持 | 不支持 | 支持 |
安全审计 | 不支持 | 不支持 | 支持 |
接入步骤:
第一步:选择网络类型
- 如果是有公网的自建数据库,请选择“公网(经典网络)”。
- 如果是通过专线/
VPN
方式连接阿里云VPC
的本地IDC
或者其他云,请选择“专有网络”。
第二步:部署网关
1 | sudo wget -O install-dbgateway http://hdm-dbgateway-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/DBGateway/install-dbgateway && sudo /bin/bash install-dbgateway --id idc_iQn5Df7QC5docekj --token 70EE4B0C444E215700BEFD8B14DB026EF6A958FBE42DACDEE304FC91880A933D --endpoint master-hdm-cn-hangzhou.aliyuncs.com --region default --native |
第三步:授权验证
1 | CREATE USER 'hdm'@'%' IDENTIFIED BY PASSWORD 'Hdm@123!'; |
三种网络连接方式:
专线
- 专线是指阿里云接入点和本地数据中心之间的网络线路的抽象。
- 您需要通过一条租用的运营商专线将本地
IDC
连接到阿里云接入点,建立专线连接。 - 物理专线的私网连接不通过公网,因此与传统的公网相比,专线连接更加安全、可靠、速度更快、延迟更低。
VPN
VPN
网关是一款基于互联网通信技术,通过加密通道将企业数据中心和阿里云专有网络安全可靠地连接起来的服务。
互联网
本地 IDC
直接通过互联网和阿里云公有云互联,HDM
会对数据访问链路进行加密,用户无需担心安全问题。
统一监控
MySQL Server
TPS/QPS
QPS (Queries Per Second),每秒 SQL
语句执行次数
TPS (Transactions Per Second),每秒事务操作次数
指标 | 单位 | 含义 |
---|---|---|
mysql.tps | Per Second | 计算公式:(Com_commit + Com_rollback) / Uptime |
mysql.qps | Per Second | 计算公式:Questions / Uptime |
会话连接
指标 | 单位 | 含义 |
---|---|---|
mysql.threads_created | Count | 当前新创建的线程 |
mysql.threads_cached | Count | 当前 cached 线程 |
mysql.threads_connected | Count | 当前全部线程数 |
mysql.threads_rejected | Count | 当前 rejected 线程 |
mysql.threads_running | Count | 当前活跃线程数 |
执行次数
指标 | 单位 | 含义 |
---|---|---|
mysql.insert_ps | Per Second | 平均每秒 insert 语句执行次数 |
mysql.select_ps | Per Second | 平均每秒 select 语句执行次数 |
mysql.update_ps | Per Second | 平均每秒 update 语句执行次数 |
mysql.delete_ps | Per Second | 平均每秒 delete 语句执行次数 |
mysql.replace_ps | Per Second | 平均每秒 replace 语句执行次数 |
流量吞吐(单位:KB
)
指标 | 单位 | 含义 |
---|---|---|
mysql.bytes_received | KByte | 平均每秒从所有客户端接收到的字节数 |
mysql.bytes_sent | KByte | 平均每秒发送给所有客户端的字节数 |
InnoDB 存储引擎
InnoDB Buffer Pool 命中率(%)
指标 | 单位 | 含义 |
---|---|---|
mysql.innodb_bp_dirty_pct | % | 脏页比率:Innodb_buffer_pool_pages_dirty / Innodb_buffer_pool_pages_data * 100% |
mysql.innodb_bp_hit | % | 读缓存命中率:(Innodb_buffer_pool_read_requests - Innodb_buffer_pool_reads) / Innodb_buffer_pool_read_requests * 100% |
mysql.innodb_bp_usage_pct | % | 使用率:innodb_buffer_pool_pages_data / ( innodb_buffer_pool_pages_data + innodb_buffer_pool_pages_free ) * 100% |
InnoDB Data 读写吞吐量(单位:KB
)
指标 | 单位 | 含义 |
---|---|---|
mysql.innodb_data_written | KByte | InnoDB 平均每秒写字节数 |
mysql.innodb_data_read | KByte | InnoDB 平均每秒读字节数 |
InnoDB Row Operations
指标 | 单位 | 含义 |
---|---|---|
mysql.innodb_rows_deleted | Per Second | InnoDB 平均每秒删除的行数 |
mysql.innodb_rows_read | Per Second | InnoDB 平均每秒读取的行数 |
mysql.innodb_rows_inserted | Per Second | InnoDB 平均每秒插入的行数 |
mysql.innodb_rows_updated | Per Second | InnoDB 平均每秒更新的行数 |
MySQL 服务进程
MySQL CPU 利用率(%)
指标 | 单位 | 含义 |
---|---|---|
mysql.cpu_usage | % | MySQL 服务进程 CPU 使用率( 200% 代表使用 2 个 CPU Core ) |
MySQL 内存使用量(单位:GB
)
指标 | 单位 | 含义 |
---|---|---|
mysql.mem_used | GByte | MySQL 服务进程内存使用量 |
MySQL 存储空间使用量(单位:GB
)
指标 | 单位 | 含义 |
---|---|---|
mysql.storage.data.used | GByte | 数据文件目录的空间使用量 |
mysql.storage.log.used | GByte | 日志文件目录的空间使用量 |
主机
主机 Load 负载
在 UNIX
系统中,系统负载是对当前 CPU
工作量的度量,被定义为特定时间间隔内运行队列中的平均线程数对于单个 CPU
,有人认为如果 Load
超过 0.7
就算是超出正常范围了,这个值越低越好,负载过高会导致机器无法处理其他请求及操作,甚至导致宕机。
指标 | 单位 | 含义 |
---|---|---|
load1 | Count | 主机负载 load1 |
主机 CPU 利用率(%)
指标 | 单位 | 含义 |
---|---|---|
host.cpu.user_usage | Count | 系统 CPU user 利用率 |
host.cpu.si_usage | Count | 系统 CPU 软中断利用率 |
host.cpu.usage | Count | 系统 CPU 利用率 |
host.cpu.hi_usage | Count | 系统 CPU 硬中断利用率 |
host.cpu.iowait_usage | Count | 系统 CPU iowait 利用率 |
host.cpu.sys_usage | Count | 系统 CPU sys 利用率 |
主机内存使用量(单位:MB
)
指标 | 单位 | 含义 |
---|---|---|
mem.buffers | MByte | 系统 IO Buffer 占用内存大小 |
mem.used | MByte | 系统已用内存 |
mem.cached | MByte | 系统 Page Cache 占用内存大小 |
gw.pidstat.mem_used | MByte | DBGateway 内存使用量 |
mem.swap_used | MByte | 系统 swap 使用大小 |
mem.total | MByte | 系统总可用内存 |
主机网络吞吐(单位:KB
)
指标 | 单位 | 含义 |
---|---|---|
net.recv | KByte | 网卡每秒接收数据量 |
net.send | KByte | 网卡每秒发送数据量 |
统一告警
告警功能:配置模版、触发规则、屏蔽告警、解除屏蔽、告警订阅等
告警配置:告警模板 -> 告警联系组 -> 关联资源,告警模板默认配置 8
条告警,可自定义
告警项 | 告警规则 | 发送间隔 | 告警类型 | 告警对象 | 通知方式 |
---|---|---|---|---|---|
主机 CPU 使用率 |
连续 3 次 ≥ 90 |
30 分钟 |
阈值告警 | 联系组 | 短信 / 邮件 / 钉钉 |
主机内存使用率 | 连续 3 次 ≥ 95 |
30 分钟 |
阈值告警 | 联系组 | 短信 / 邮件 / 钉钉 |
主机网络发送带宽使用率 | 连续 3 次 ≥ 95 |
30 分钟 |
阈值告警 | 联系组 | 短信 / 邮件 / 钉钉 |
主机网络接收带宽使用率 | 连续 3 次 ≥ 95 |
30 分钟 |
阈值告警 | 联系组 | 短信 / 邮件 / 钉钉 |
数据库无法连接 | 连续 3 次 |
30 分钟 |
事件告警 | 联系组 | 短信 / 邮件 / 钉钉 |
MySQL 复制中断 |
连续 3 次 |
30 分钟 |
事件告警 | 联系组 | 短信 / 邮件 / 钉钉 |
MySQL 复制延迟 |
连续 3 次 ≥ 1800 |
30 分钟 |
阈值告警 | 联系组 | 短信 / 邮件 / 钉钉 |
MySQL 活跃会话数 |
连续 3 次 ≥ 100 |
30 分钟 |
阈值告警 | 联系组 | 短信 / 邮件 / 钉钉 |
问题诊断
实例会话:原理是执行 show processlist
,查看活跃会话和全部会话,可快速诊断阻塞的 SQL
,紧急情况下先结束会话,释放资源。
拓扑结构
注意:目前实例拓扑仅支持
MySQL
性能快照
与告警规则关联,通过自动触发方式产生性能快照,保存异常现场,方便 DBA 排查数据库异常。
1 | 场景示例: |
性能优化
死锁
可通过以下手段降低死锁发生的概率:
- 如果不同程序会并发存取多个表,尽量约定以相同的顺序访问表,可以大大降低死锁机会;
- 为表添加合理的索引,如果不走索引将会为表的每一行记录加锁,死锁的概率就会大大增大;
- 避免大事务,尽量将大事务拆成多个小事务来处理;大事务占用资源多,耗时长,与其他事务冲突的概率也会变高;
- 在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率;
- 对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁产生的概率。
空间分析:可以查看每张表的占用空间、索引空间、碎片率等,点击表名可以查看表结构和索引,异常条件:
- 实例的空间使用率大于
90%
。 - 实例的库表总空间(物理)剩余可用天数估计不足
7
天。 - 实例可回收空间大于
60GB
,且碎片率大于5%
。 - 单表大于
6G
,并且碎片率大于30%
。 - 单表大于
50GB
。 - 单表行数大于
500w
,且平均行长大于10KB
。
安全审计
HDM
的安全审计功能,采用旁路的技术,采集并分析对数据库服务器的各类操作行为,实时地、智能地解析对数据库服务器的各种操作,自动识别高危 SQL、SQL 注入、新增访问来源等风险。
高危 SQL
在 HDM
中,会根据预设的规则库,自动识别三种类型的高危 SQL
:
① DDL
(新建表、修改表结构、修改索引、重命名表等操作);
② 全表更新(例如全表 Update
、全表 Delete
等);
③ 大请求,默认规则是满足下面三个条件中的任意一个:
- 扫描行数 >=
100w
- 返回行数 >=
10w
- 更新行数 >=
10w
SQL 注入
所谓 SQL
注入,就是通过把 SQL
命令插入到 Web
表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL
命令,严重危害数据库的健康。
1 | 示例: |
新增访问来源
和历史的访问来源纪录进行对比,自动识别新增的访问来源,帮助用户确认是否存在未知的机器在访问或者读取数据库,默认规则是过去七天没有出现过的访问来源,即为新增访问来源。
诊断报告
功能:支持用户创建、查看、下载诊断报告
要求:诊断时间必须小于 24小时
内容:实例信息、健康状况(CPU
/ 连接数 / 活跃会话 / QPS
/ TPS
)、告警列表、活跃会话列表、Top5 慢 SQL、Top5 表空间、死锁分析、性能趋势(CPU
/ 网络 / 内存 / QPS and TPS
/ 会话 / 空间变化)
容量评估
限制:目前仅支持
MySQL RDS
功能:容量建议 | 容量评估(CPU
/ 内存 / IOPS
/ 活跃会话 / 存储空间)
FA&Q
① 有些数据库服务器未连接外网,dbgateway
无法下载,实例如何接入?
通过搭建代理服务器 Squid 进行下载,原理如下图:
搭建代理服务器
青岛代理服务器地址:
10.133.0.53:3128
1 | # 安装squid |
使用代理接入HDM
1 | # 配置代理 |
② 实例接入后,显示的 IP
不是真实的业务 IP
?
经与阿里云开发沟通,新版本在 /opt/dbgateway/conf/dbgateway.conf
中添加 gateway.local.ip=
配置项,dbgateway
优先使用配置中的 ip
。
③ 服务器断电启动后,dbgateway
服务未自动重启?
暂不支持