数据库运维平台

项目简介

DBM 是控制台一个数据库运维管理功能模块,包括管理、监控、告警等功能,目标是构建 MySQL 数据库自动化运维能力,支撑 PSI 全量数据库,实现自动化运维。

Gitlab | 测试地址

技术选型

前端

技术 说明
Vue 前端框架
Vue-router 路由框架
Vuex 全局状态管理框架
Ant Design of Vue 前端 UI 框架
Axios 前端 HTTP 框架
Viser 前端图表框架

后端

技术 说明
Spring Boot 容器 + MVC 框架
MyBatis ORM 框架
MyBatis Generator 数据层代码生成
Swagger UI 文档生产工具
Docker 应用容器引擎
Druid 数据库连接池
Lombok 简化对象封装工具
Hibernator-Validator 验证框架

功能概览

  • 数据库
    • 阿里云 RDS
      • 显示列表
      • 基本信息
      • 监控信息
      • 备份恢复
      • 日志管理
    • 自建 MySQL
      • 显示列表
      • 基本信息
      • 监控信息

数据库表

console_db_rds:阿里云 RDS 信息表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*------- CREATE SQL---------*/
CREATE TABLE `console_db_rds` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`domain` varchar(20) NOT NULL DEFAULT '' COMMENT '领域',
`project` varchar(32) NOT NULL DEFAULT '' COMMENT '项目名称',
`instanceid` varchar(32) NOT NULL DEFAULT '' COMMENT '实例ID',
`instance` char(50) NOT NULL DEFAULT '' COMMENT '实例地址',
`port` varchar(10) NOT NULL DEFAULT '' COMMENT '端口',
`env` enum('生产','测试') NOT NULL DEFAULT '生产' COMMENT '环境',
`version` char(20) NOT NULL DEFAULT '' COMMENT '版本',
`region` varchar(20) NOT NULL DEFAULT '' COMMENT '区域',
`inst_status` int(10) unsigned NOT NULL DEFAULT '1' COMMENT '运行状态, 1:运行中,0:其他',
`config` varchar(32) NOT NULL DEFAULT '' COMMENT '实例配置',
`storage_type` varchar(32) NOT NULL DEFAULT '' COMMENT '存储类型',
`max_iops` int(6) unsigned NOT NULL DEFAULT '0' COMMENT '最大IOPS',
`max_connections` int(6) unsigned NOT NULL DEFAULT '0' COMMENT '最大连接数',
`type` varchar(32) NOT NULL DEFAULT '' COMMENT '系列',
`desc` varchar(32) NOT NULL DEFAULT '' COMMENT '描述信息',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_instanceid` (`instanceid`(20)) USING BTREE,
KEY `idx_project` (`project`(20)) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8 COMMENT='阿里云RDS信息表'

console_db_mysql:本地 MySQL 信息表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*------- CREATE SQL---------*/
CREATE TABLE `console_db_mysql` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`domain` varchar(20) NOT NULL DEFAULT '' COMMENT '领域',
`project` varchar(32) NOT NULL DEFAULT '' COMMENT '项目名称',
`instance` char(50) NOT NULL DEFAULT '' COMMENT '实例',
`ip` char(50) NOT NULL DEFAULT '' COMMENT 'IP',
`port` varchar(10) NOT NULL DEFAULT '' COMMENT '端口',
`env` enum('生产','测试') NOT NULL DEFAULT '生产' COMMENT '环境',
`version` char(20) NOT NULL DEFAULT '' COMMENT '版本',
`room` varchar(20) NOT NULL DEFAULT '' COMMENT '机房位置',
`role` enum('主','从') NOT NULL DEFAULT '主' COMMENT '角色',
`inst_status` int(2) unsigned NOT NULL DEFAULT '2' COMMENT '运行状态',
`repli_status` int(2) unsigned NOT NULL DEFAULT '0' COMMENT '复制状态',
`desc` varchar(64) NOT NULL DEFAULT '' COMMENT '描述信息',
`config` varchar(32) NOT NULL DEFAULT '' COMMENT '机器配置',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_instance` (`instance`(20)) USING BTREE,
KEY `idx_project` (`project`(20)) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=116 DEFAULT CHARSET=utf8 COMMENT='本地MySQL信息表'

开发

前端

  • 安装 Yarn
1
2
cnpm i -g yarn  //直接全局安装
yarn --version
  • 下载代码
1
git clone -b 分支名 仓库地址
  • 安装依赖
1
yarn install
  • 安装 Nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
brew install nginx

# nginx.conf 配置文件目录
/usr/local/etc/nginx

# nginx 命令目录
/usr/local/Cellar/nginx/1.17.8/bin

# nginx 相关命令
nginx
nginx -s reload
nginx -s stop
nginx -t
lsof -i tcp:port // 查看端口占用情况
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#user  nobody;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;

events {
worker_connections 1024;
#accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
#multi_accept off; #设置一个进程是否同时接受多个网络连接,默认为off
}

http {
include mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;

sendfile on;
#tcp_nopush on;

server_names_hash_bucket_size 64;

#keepalive_timeout 0;
keepalive_timeout 65;

#gzip on;

upstream console-web {
server 127.0.0.1:8040;
keepalive 10;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream console-backend {
server 10.135.7.102;
keepalive 10;
}
server {
listen 80;
server_name x-dev2.qd-ctcc.haier.net;
location / {
proxy_set_header Host "localhost" ;
proxy_set_header X-Real-IP $remote_addr ;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Connection "" ;
proxy_pass http://console-web;
}

location /api {
proxy_set_header Host "x-dev2.qd-ctcc.haier.net";
proxy_set_header X-Real-IP $remote_addr ;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ;
proxy_pass http://console-backend;
proxy_read_timeout 600s;
# 支持sse
proxy_http_version 1.1;
chunked_transfer_encoding off;
# 支持websocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}

location /api/v2 {
proxy_set_header X-Real-IP $remote_addr ;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ;
proxy_pass http://localhost:8090;
}
}
}
  • 修改 Host
1
2
3
sudo vi /etc/hosts
127.0.0.1 x-dev2.qd-ctcc.haier.net
#127.0.0.1 localhost
  • 运行
1
yarn run serve
  • 提交代码到指定分支
1
2
3
git add .
git commit -m 'database'
git push origin liuxh

后端

  • 本地 MySQL 接入监控

    • 安装 mysqld_exporter

      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
      # 下载安装包
      cd /data
      wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz
      tar -xzf mysqld_exporter-0.12.1.linux-amd64.tar.gz
      cd mysqld_exporter-0.12.1.linux-amd64

      # 编辑配置文件
      vi .my.cnf
      [client]
      user=hdm
      password=Hdm@123!
      host=10.133.0.51
      port=3306

      # 启动
      ./mysqld_exporter --config.my-cnf=/data/mysqld_exporter-0.12.1.linux-amd64/.my.cnf &

      # 检测
      ps -ef | grep mysqld_exporter

      # 打开防火墙端口:9104
      firewall-cmd --zone=public --add-port=9104/tcp
      firewall-cmd --reload

      # 测试
      10.133.0.51:9104
    • 注册 consul

      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
      # 注册
      PUT http://10.138.16.192:8500/v1/agent/service/register
      {
      "id":"mysql_10.133.0.51_3306",
      "name":"mysql",
      "address":"10.133.0.51",
      "port":9104,
      "tags":[
      "cluster=QD",
      "project=TDDS",
      "instance=10.133.0.51:3306",
      "host=10.133.0.51",
      "port=3306",
      "env=prd"
      ]
      }

      # 查看
      GET http://10.138.16.192:8500/v1/catalog/service/mysql

      # 注销
      PUT http://10.138.16.192:8500/v1/agent/service/deregister/mysql_10.133.0.51_3306

      # Prometheus
      http://10.138.16.192:9099/targets
  • 获取 CPU、内存、硬盘信息

1
2
3
cat /proc/cpuinfo | grep "cores" | uniq
free -g
fdisk -l | grep Disk

打包部署

  • 提交代码
1
2
3
4
5
6
7
8
9
10
# 提交代码到dev分支
git pull origin dev
git add .
git commit -m 'database'
git push origin dev

# 合入master分支
git checkout master
git merge dev
git push origin master

  • go 安装依赖
1
2
3
export GOPROXY=https://goproxy.cn
go mod tidy
go mod download
  • 本地构建配置环境变量
1
2
3
4
DB_MYSQL=console:suMuCaSu1e@tcp(10.138.228.243:3306)/console?parseTime=true&loc=Local
CAICLOUD_USER=admin
CAICLOUD_PASSWORD=Pwd123456
CAICLOUD_ADDRESS=10.135.7.71:6002
  • 安装 swagger
1
2
3
4
go get -u github.com/swaggo/swag/cmd/swag
go get -u github.com/swaggo/gin-swagger
go get -u github.com/swaggo/gin-swagger/swaggerFiles
swag init
  • 配置环境变量
1
HOST_PROMETHEUS=http://10.200.17.45:9090
  • 转移 docs 文档到 aliyun-adaptor