什么是可靠性?系统的可靠性表现为在一定期间内,用户可以预测其发生的行为,也就是说,在一定的期间内,系统不会发生计划外的行为。例如,服务器运行时不会出现意外的停机、应用程序的性能符合预期、计划的停机很少发生等等。
在经常发生变化的环境中,维持系统的可靠性非常困难。例如,受业务影响,应用程序经常发生更改、伴随着用户量的增加,使用模式发生改变、操作系统升级、硬件升级所带来的环境发生变化都会导致系统的稳定性降低。
维护系统的可靠性需要做到以下几点:
-
衡量管理的系统
-
测量系统正常运行时的变量值,可以为发布系统的基线做准备。
-
当系统发生变化时(软硬件升级、配置发生更改、基础架构发生更改等等),需要对照基线再次对变量的值进行测量。
-
定期测量系统变量,对基线进行升级。其原因在于应用模式发生更改,并且数据量会随着时间的增加而增长。
-
当遇到问题时,与基线进行对比。如果用户能够精确定位一个问题,解决方案往往变得显而易见。
-
发布基线
基线的目的是定义什么是正常的,当遇到问题时可以和基线进行对比。随着时间的发展,用户不断调整的基线可以为容量规划提供有效的帮助。
通常情况下,用户需要测量操作系统的指标包括文件系统、内存和CPU的使用率。在Linux上,可以使用top、iosata、vmsata、syssata、sar进行测量。Windows上,用户可以使用资源管理器和性能监视对这些指标进行测量。
当用户使用MySQL时,需要查看MySQL的状态和配置。可以通过“SHOW PROCESSLIST”和“sys.session”查看运行中的语句,也可以通过“mysqladmin extended-status”查看状态变量值。
此外,基线中包括应用程序概要文件,用以记录应用程序在不同使用场景的应答时间,包括登录、检索、创建、读取、更新及删除等。
-
应用程序概要文件
应用程序概要文件记录发生指定事件的时间、测量每部分操作发生的时间、应用程序是与多个开发环境集成还是作为插件?以及显示对数据库性能故障排除是否有用(假设调用数据库占用了函数执行的5%的时间,用户则可以对该函数的其他部分进行故障排除来获得性能提升)
当用户将应用程序概要文件做为基线的一部分时,可以看到每个功能或用例的关键部分的持续时间。这使得用户可以查看应用程序的大部分延迟是在调用数据库、建立连接时出现的,还是由于其他一些应用程序操作造成的。
数据库为什么会“坏掉”?
数据库发生故障的原因非常多,通常会包括如下:
-
服务器
-
存储
-
网络接口
-
电源、CPU、内存
-
连接
-
网络基础架构
-
防火墙
-
负载均衡
-
应用程序软件
-
面向用户的组件
-
框架的稳定性
-
不可抗力
此外,还需要考虑服务器硬件、虚拟环境、操作系统、共存的应用程序、网络故障及应用程序故障等因素。
-
服务器硬件
-
机房是数据库环境中最重要的一部分,确保机房的安全性和可靠性。
-
使用冗余的硬件,减轻服务器故障的风险。包括电源、RAID、网络适配器。
-
CPU、内存等潜在的损坏风险。
-
虚拟环境
-
与其他客户机共享硬盘、内存、网络接口,及CPU。容易受到资源争用影响。
-
受其他客户机资源分配影响,导致应用程序持续超时。
-
操作系统
-
操作系统对于运行MySQL的服务器来说至关重要,操作系统故障会直接导致MySQL故障。
-
操作系统及时更新、打补丁。
-
考虑文件系统的性能和安全机制对MySQL的影响。
-
监视操作系统的日志及变量。
-
共存的应用程序
-
安全性
-
应用程序的漏洞可能允许攻击者访问其他文件,包括MySQL的文件。
-
应用程序的错误可能会导致性能降级,引发不正常的磁盘访问。
-
性能
-
应用程序与MySQL共享CPU内存等会影响MySQL的性能。
-
网络故障
-
MySQL在以下方面使用网络通信:
-
客户端和应用程序的连接
-
复制
-
管理连接
-
监视软件
-
其他网络活动干扰MySQL
-
操作系统通过网络备份
-
应用程序通信
-
文件传输及其他服务
-
确保网络硬件不会形成单点故障
-
应用程序故障
-
应用程序的代码导致许多性能问题。例如,读取大文件、调用远程网络服务,对大数据集使用低效的算法排序等等。
-
使用应用程序概述文件识别性能问题。
-
应用程序的错误会导致产生错误的数据,带来安全风险。
基于上述原因,用户在使用MySQL数据库时,需要避免发生类似事件。这是实现系统稳定性的一个最佳实践。
感谢关注“MySQL解决方案工程师”!