转载

每日一博 | 使用keepalived来实现MySQL的failover

场景介绍

对于小型的应用来说,我们经常使用一个MySQL实例来存放持久化的数据。在这种情况下,如果MySQL崩溃或者安装MySQL的服务器发生了故障,那么整个应用就不可用了。也就是发生单点故障。为了提高系统的可靠性,通常我们可以用两台服务器分别安装MySQL,并且让这两个MySQL实例互为主备。这样,当一台服务器发生了故障,那么另一台服务器可以自动接管数据库连接。

方案介绍

这里我们用keepalived来做failover的检测和自动切换,整个网络拓扑如下:

每日一博 | 使用keepalived来实现MySQL的failover - 两台服务器分别安装了keepalived和MySQL - keepalived 通过VRRP协议协商出一个MASTER实例,由这个实例对外提供虚拟IP的访问服务 - 两个MySQL实例之间互为主备,即每个实例都既是主也是备,利用MySQL的replication可以实现 这个架构比较简单,不过也有一些好处: 1. 对于外部应用来说,只要访问同一个IP地址(虚拟IP)。这样,底层的数据库发生切换时,应用不会感知,也不需要做任何修改。 2. 互为主备的情况下,一旦主机发生故障,备机可以立刻接管。而当主机恢复后,无需对原来的备机做任何修改,原来的主机可以继续以备机的身份继续运行。

技术要点

MySQL配置

MySQL的安装就不多说,既然已经再用,肯定已经安装好。如果从头部署,那么就自行百度了,编译或者用OS提供的安装包都可以。 主要是互为主备的配置,大致步骤是这样: 1. 配置一个实例为主,另一个实例为半同步复制 2. 反过来同样配置一次,只不过这时有几点要注意一下 下面具体讲一下步骤和配置命令(TODO)

keepalived安装配置

基础知识

这里我们首先了解一下keepalived是个什么软件,能够做什么,后面才能更好的配置和使用它。 百度百科上面描述的并不准确,其实它的官网首页就描述的比较清楚。keepalived是一个路由软件,它主要是为Linux提供负载均衡和高可用。其中负载均衡依赖于LVS,而高可用则是利用VRRP协议来实现的。keepalived本身实现了VRRP协议。

那么这里就很清楚了。我们的方案里面主要是用到高可用,因为我们没有打算让两个MySQL同时提供服务。后面我们配置的时候也只需要配置VRRP相关的配置就可以了。至于LVS,依赖于特定的内核模块,配置相对复杂,我们这里就不多说。

这里再简单说明一下VRRP协议。对于协议本身,我们无需了解过多的细节。对于我们的场景,我们只需要知道,两个主机(或者更多个主机)之间通过VRRP协议协商出一个MASTER,由这个MASTER来对外提供虚拟IP的访问服务。其他的主机就处于BACKUP状态。同时VRRP协议要求定时告知状态给其他主机。当某个主机出现故障,那么其他主机经过一小段时间就会知道。如果故障的是MASTER,那么就会重新协商出一个MASTER。如果是BACKUP故障,那么对MASTER没有影响。

由于VRRP协议是在keepalived内实现的,因此这样的检测能够发现的故障可能是keepalived或者服务器本身的故障。而我们的MySQL服务是否出现故障,通过VRRP协议是无法发现的。因此告诉keepalived,定期的检测MySQL的状态,把MySQL的状态也归到VRRP检测结果中去。这样,当MySQL故障的时候也会引起主备的切换,以达到我们切换MySQL服务的目的。 keepalived本身提供了这个接口,因此对于我们来说只要提供一个检测的脚本给keepalived即可。后面我们会在keepalived的配置一节详细描述。

安装

  • 首先从keepalived.org下载源码,官网也有不少文档可以看看,不过好久都没更新了。
  • Linux下软件的标准编译安装过程
    • ./configure --prefix=
    • make
    • make install
  • 安装目录下有服务启动脚本,可以自行放到/etc/init.d之类的目录下,配置keepalived为系统服务,开机自动运行。当然,你也可以不用,自己写一个。 (待续)
原文  http://my.oschina.net/tz8101/blog/653229?fromerr=skLOUUCa
正文到此结束
Loading...