阿里云 · HDM

简介

混合云数据库管理 (Hybrid Cloud Database Management, 简称 HDM) ,帮助企业打通混合云数据库架构,提供多环境多数据库的统一监控报警运维管理的能力,帮助文档

核心功能:集群管理、统一监控、统一告警、Dashboard、故障诊断、性能优化、安全审计、诊断报告等

目前支持数据库MySQLRedisMongoDBPostgreSQL

支持环境

环境 统一接入 统一监控 统一告警 集群管理
阿里云 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
2
3
CREATE USER 'hdm'@'%' IDENTIFIED BY PASSWORD 'Hdm@123!';
GRANT SHOW DATABASES, PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'hdm'@'%';
GRANT SELECT ON *.* TO 'hdm'@'%';

三种网络连接方式

专线

  • 专线是指阿里云接入点和本地数据中心之间的网络线路的抽象。
  • 您需要通过一条租用的运营商专线将本地 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
2
场景示例:
MySQL数据库凌晨1点发生了CPU 90%的告警,导致正常业务响应时间变长,但是等DBA登录数据库上进行排查,异常已经消失,从监控历史上只能看到CPU飙高、活跃会话增长,没有慢SQL。在这种缺少数据、缺少现场的情况下,没有办法确认根本原因,同样的问题可能会持续发生,影响业务可用性。

性能优化

慢 SQL:架构设计、SQL分析 [样本 | 优化]

死锁

可通过以下手段降低死锁发生的概率:

  • 如果不同程序会并发存取多个表,尽量约定以相同的顺序访问表,可以大大降低死锁机会;
  • 为表添加合理的索引,如果不走索引将会为表的每一行记录加锁,死锁的概率就会大大增大;
  • 避免大事务,尽量将大事务拆成多个小事务来处理;大事务占用资源多,耗时长,与其他事务冲突的概率也会变高;
  • 在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率;
  • 对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁产生的概率。

空间分析:可以查看每张表的占用空间、索引空间、碎片率等,点击表名可以查看表结构和索引,异常条件:

  • 实例的空间使用率大于 90%
  • 实例的库表总空间(物理)剩余可用天数估计不足 7 天。
  • 实例可回收空间大于 60GB,且碎片率大于 5%
  • 单表大于 6G,并且碎片率大于 30%
  • 单表大于 50GB
  • 单表行数大于 500w,且平均行长大于 10KB

安全审计

HDM 的安全审计功能,采用旁路的技术,采集并分析对数据库服务器的各类操作行为,实时地、智能地解析对数据库服务器的各种操作,自动识别高危 SQLSQL 注入新增访问来源等风险。

高危 SQL

HDM 中,会根据预设的规则库,自动识别三种类型的高危 SQL

DDL(新建表、修改表结构、修改索引、重命名表等操作);

② 全表更新(例如全表 Update 、全表 Delete 等);

③ 大请求,默认规则是满足下面三个条件中的任意一个:

  • 扫描行数 >= 100w
  • 返回行数 >= 10w
  • 更新行数 >= 10w

SQL 注入

所谓 SQL 注入,就是通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令,严重危害数据库的健康。

1
2
3
4
示例:
SELECT 'xx' FROM 'xx' WHERE 1 = 1 AND 1 = 1
- Where 子句中连续出现两个常量运算表达式
- Where 子句中有部分条件总为真

新增访问来源

和历史的访问来源纪录进行对比,自动识别新增的访问来源,帮助用户确认是否存在未知的机器在访问或者读取数据库,默认规则是过去七天没有出现过的访问来源,即为新增访问来源。

诊断报告

功能:支持用户创建查看下载诊断报告

要求:诊断时间必须小于 24小时

内容:实例信息、健康状况(CPU / 连接数 / 活跃会话 / QPS / TPS)、告警列表、活跃会话列表、Top5 慢 SQL、Top5 表空间、死锁分析、性能趋势(CPU / 网络 / 内存 / QPS and TPS / 会话 / 空间变化)

容量评估

限制:目前仅支持 MySQL RDS

功能:容量建议 | 容量评估(CPU / 内存 / IOPS / 活跃会话 / 存储空间)

FA&Q

① 有些数据库服务器未连接外网,dbgateway 无法下载,实例如何接入?

通过搭建代理服务器 Squid 进行下载,原理如下图:

squid

搭建代理服务器

青岛代理服务器地址:10.133.0.53:3128

1
2
3
4
5
6
7
8
9
10
11
# 安装squid
yum -y install squid

# 设置自启动
systemctl enable squid.service

# 配置squid
vim /etc/squid/squid.conf

# 启动squid
systemctl start squid.service

使用代理接入HDM

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 配置代理
echo "
http_proxy=http://10.133.0.53:3128
https_proxy=http://10.133.0.53:3128
ssl_proxy=http://10.133.0.53:3128
tls_proxy=http://10.133.0.53:3128
ftp_proxy=http://10.133.0.53:3128
tcp_proxy=http://10.133.0.53:3128
export http_proxy
export https_proxy
export ssl_proxy
export ftp_proxy
export tcp_proxy
export tls_proxy" >> /etc/profile ; source /etc/profile

# 配置wget代理
echo "
https_proxy=http://10.133.0.53:3128/
http_proxy=http://10.133.0.53:3128/
ftp_proxy=http://10.133.0.53:3128/" >> /etc/wgetrc ; source /etc/wgetrc

# 下载install-dbgateway
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_zqSS2oMpeyKubndD --token 3E24C01713C83B7328F9A2F4C411078DC820E63FAFBC058F6635FAC5B0B4B7F2 --endpoint master-hdm-cn-hangzhou.aliyuncs.com --region default --native

# 修改install-dbgateway,注释以下代码
curl -v --connect-timeout 3 --silent ${endpoint}:80 --output -
if [ $? != 0 -a $? != 52 ]; then
echo "Error! Can not connect to ${endpoint}:80, please check your network environment."
exit 1
fi

# 安装完成
sudo /bin/bash install-dbgateway --id idc_zqSS2oMpeyKubndD --token 3E24C01713C83B7328F9A2F4C411078DC820E63FAFBC058F6635FAC5B0B4B7F2 --endpoint master-hdm-cn-hangzhou.aliyuncs.com --region default --native

② 实例接入后,显示的 IP 不是真实的业务 IP

经与阿里云开发沟通,新版本在 /opt/dbgateway/conf/dbgateway.conf 中添加 gateway.local.ip= 配置项,dbgateway 优先使用配置中的 ip

③ 服务器断电启动后,dbgateway 服务未自动重启?

暂不支持