如何保证数据库的可靠性?
什么是可靠性?系统的可靠性表现为在一定期间内,用户可以预测其发生的行为,也就是说,在一定的期间内,系统不会发生计划外的行为。例如,服务器运行时不会出现意外的停机、应用程序的性能符合预期、计划的停机很少发生等等。
在经常发生变化的环境中,维持系统的可靠性非常困难。例如,受业务影响,应用程序经常发生更改、伴随着用户量的增加,使用模式发生改变、操作系统升级、硬件升级所带来的环境发生变化都会导致系统的稳定性降低。
维护系统的可靠性需要做到以下几点:
衡量管理的系统
测量系统正常运行时的变量值,可以为发布系统的基线做准备。
当系统发生变化时(软硬件升级、配置发生更改、基础架构发生更改等等),需要对照基线再次对变量的值进行测量。
定期测量系统变量,对基线进行升级。其原因在于应用模式发生更改,并且数据量会随着时间的增加而增长。
当遇到问题时,与基线进行对比。如果用户能够精确定位一个问题,解决方案往往变得显而易见。
发布基线
基线的目的是定义什么是正常的,当遇到问题时可以和基线进行对比。随着时间的发展,用户不断调整的基线可以为容量规划提供有效的帮助。
通常情况下,用户需要测量操作系统的指标包括文件系统、内存和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
操作系统通过网络备份
应用程序通信
文件传输及其他服务
确保网络硬件不会形成单点故障
应用程序故障
应用程序的代码导致许多性能问题。例如,读取大文件、调用远程网络服务,对大数据集使用低效的算法排序等等。
使用应用程序概述文件识别性能问题。
应用程序的错误会导致产生错误的数据,带来安全风险。