随着互联网及信息化的迅猛发展,企业运营所产生的数据量越来越大,所以大多数公司选择将重要商业数据存储在数据库中。如果数据库系统突然停机或发生其它故障,必然会影响公司的收入,声誉甚至导致用户投诉,如何保证数据库系统的正常运转,一直是公司关心的核心问题。这就要求 DBA 对数据库运行的各种状态进行实时监控,在发生故障之前解决它,将隐患消灭在摇篮中。本文给出使用 “MySQL Monitor” Shell 脚本来实现 MySQL 的实时监控,讨论了如何实现 MySQL的短信报警功能模块,同时结合一个真实应用场景来演示 “MySQL Monitor” 是如何工作的。
背景
南风公司遇到的问题
南风公司是一家互联网公司,该公司在北京网通1区机房有 10 台服务器,2 区机房有 10 台服务器,在上海电信 1 区机房也有 10 台服务器......,鉴于公司数据的重要性,DBA 必须实施一系列的监控措施来保证数据库良性运转,设置了包括操作系统磁盘空间检查、数据库表空间检查、数据库表状态检查、双机互备情况检查等 20 个检查点,DBA 有哪些选择去实施如此宠大的监控方案呢?下面是传统的解决方案:
这是一种低效的串行工作方式,DBA 必须每天从早上 10:00 开始逐台检查数据库服务器的 20个检查点,非常耗时,这种传统的方案会让 DBA 每天重复做机械化的工作,当有几百台被监控服务器时,这个传统的方案对 DBA 的来说就是噩梦,那么如何才能更有效的监控数据库成为 DBA 迫切需要解决的问题?
南风公司的解决方案
智慧的 MySQL,需要用智慧的方式去驾驭。南风公司的 DBA 开发了一套 “MySQL Monitor” 解决方案,这套方案充分利用了 “Shell 脚本” + “Linux Cron定时器服务” + “中国移动飞信免费发短信 API 接口” 的优势,只有在数据库检查点出现问题时才会向 DBA 发送短信进行报警,实现了真正意义上无人值守的大量数据库服务器监控框架,下面是全新的解决方案:
这是一种高效的并行工作方式,为了便于管理,我们先将数据库服务器进行了分组,每组服务器对应一个监控线程,并且这些监控线程部署在“监控工作站”上,大家 一定注意到“时间轴”消失了,这是因为这些监控线程是每 1 分钟运行一次,“时间轴”已经没有什么意义了。如果有一切正常,这些监控线程只会写日志,不会有其它的操作;如果当某台数据库服务器有异常情况发生,那么 “监控工作站”会给 DBA 终端发送短信提醒,这样 DBA 就可以在第一时间发现问题解决问题,即使 DBA 身边没有电脑终端也一样可以及时的了解 MySQL 服务器的运行情况。
核心技术
下面我们将简单介绍一下 “Shell” 、 “Cron” 、 “飞信API接口” 。
1、Shell 简介
Shell 是一种具备特殊功能的程序,它为我们和 Linux/Unix 系统之间提供了一个交互的接口。用户既可以输入命令来跟操作系统交互,也可以通过编写 Shell 脚本,从而完成更加自动化和复杂的操作。因此 Shell 被称作 Linux/Unix 系统的窗口,它的作用就是按照一定的语法规范将用户指令加以转化并传给系统进行处理。
跟 DOS 可以分为 MS-DOS,PC-DOS,FreeDOS,ROM-DOS 一样,每种 Linux/Unix 操作系统都有它们自已的 Shell。它可以简单的理解为一个应用程序,可以在独立于操作系统本身的情况下进行修改、更新或是增删功能。Linux/Unix 操作系统提供了几种不同的 Shell, 如 Bourne Shell(/bin/sh)、Korn Shell(/bin/ksh)、Bourne Again Shell(/bin/bash)、Tenex C Shell(tcsh)、C Shell(/bin/csh) 等,其中 Bourne Again Shell(即bash) 是自由软件基金会(GNU)支持开发的一个 Shell 版本,它是 Linux 系统中一个默认的 Shell,Bash 不但与其它几种 Shell 兼容,而且还继承发扬了它们的优点。
让我们看一个 Shell 代码示例,我们将这个文件命令为 create_folder_daily.sh :
清单 1. Shell 代码示例
current_date=`date +%Y%m%d`
mkdir $current_date
这段代码的功能是:在当前目录下创建一下以当前日期(如:20091016)为命名的目录,运行演示如下:
清单 2. Shell 代码运行演示
总计 4
-rwxrwxrwx 1 root root 61 10-17 07:32 create_folder_daily.sh
[root@localhost workdir]# ./create_folder_daily.sh
[root@localhost workdir]# ll
总计 8
drwxr-xr-x 2 root root 4096 10-17 07:46 20091017
-rwxrwxrwx 1 root root 61 10-17 07:32 create_folder_daily.sh
2、Linux Cron 定时器服务
Linux Cron 是一个常驻服务,它提供定时器的功能,让用户在特定的时间得以执行预设的指令或程序。只要用户会编辑计时器的配置文件,就可以使用定时器的功能。
cron 的配置格式如下:Minute Hour Day Month DayOFWeek [UserName] Command
字段名 描述 |
Minute 分钟,表示每个小时的第几分钟来执行。范围是从 0-59 |
Hour 小时,表示从第几个小时来执行,范围是从 0-23 |
Day 日期,表示从每个月的第几天执行,范围从 1-31 |
Month 月,表示每年的第几个月来执行,范围从 1-12 |
DayOFWeek 周,表示每周的第几天执行,范围从 0-6,其中 0 表示星期日 |
UserName 用户名,也就是执行程序要通过哪个用户来执行,这个一般可以省略 |
Command 要执行的命令(命令可以是 ls /proc >> /tmp/proc 之类的命令,也可以是执行你自行编写的脚本的命令) |