(一)keepalived概述
Keepalived通过VRRP(虚拟路由冗余协议)协议实现虚拟IP的漂移。当master故障后,VIP会自动漂移到backup,这时通知下端主机刷新ARP表,如果业务是通过VIP连接到服务器的,则此时依然能够连接到正常运行的主机,RedHat给出的VRRP工作原理如下图:
本来对VIP漂移有一定了解的我,看了上面的图后,越来越懵了。因此只能根据我的个人理解,来对keepalived的VIP漂移做一个解释了,假设我现在有一套这样的环境:
主机A的IP地址为:192.168.10.11
主机B的IP地址为:192.168.10.12
我们再单独定义一个keepalived使用的VIP:192.168.10.10
当2台主机安装了keepalive并正常运行时,keepalive会选择一个节点做为主节点(这里假设为主机A,IP为192.168.10.11),由于A是主节点,所以主机A上还会生成一个IP地址192.168.10.10,即虚拟IP(Virtual IP,也称VIP),此时我们使用192.168.10.10访问主机,访问到的主机是A;假如A主机上的keepalived由于某些原因(例如服务器宕机、用户主动关闭…)关闭了,keepalived备用节点会检查与主节点keepalived的通信是否正常,检测到不正常,则会提升一个备节点为主节点,相应的虚拟IP也会在对应的主机上生成,从而实现高可用的目的。
(二)MySQL是如何结合keepalived实现高可用的
在MySQL中,通过搭建MySQL双主复制,保持2台主机上的MySQL数据库一模一样,并在2台主机上安装keepalived软件,启用VIP,用户应用程序通过VIP访问数据库。当包含VIP的主机上的数据库发生故障时,关闭keepalived,从而将VIP漂移到另一个节点,用户依然可以正常访问数据库。 (这里需要注意,虽然MySQL架构双主复制,2个节点都可以写入数据,但是我们在使用的时候,是通过VIP访问其中一个实例,并没有2个数据库实例一起使用)。这里我简单画了一个流程图,来说明keepalive与MySQL实现高可用的过程:
(三)keepalived+MySQL实现高可用过程实现
基础环境规划:
主机名
IP地址
备注
服务器A
hosta
192.168.10.11
keepalive主节点
服务器B
hostb
192.168.10.12
keepalive备节点
192.168.10.10
虚拟IP,会在keepalive启动后分配到上面2台机器的主节点上
(3.1)搭建MySQL双主复制环境
STEP2:配置双主复制参数
服务器A
服务器B
[mysqld]
basedir=/usr/local/mysql
datadir=/mysql/data
server_id = 1
binlog_format=ROW
log_bin=/mysql/binlog/master-bin
auto-increment-increment = 2 #字段变化增量值
auto-increment-offset = 1 #初始字段ID为1
slave-skip-errors = all #忽略所有复制产生的错误
gtid_mode=ON
enforce-gtid-consistency=ON
[mysqld]
basedir=/usr/local/mysql
datadir=/mysql/data
server_id = 2
binlog_format=ROW
log_bin=/mysql/binlog/master-bin
auto-increment-increment = 2 #字段变化增量值
auto-increment-offset = 2 #初始字段ID为2
slave-skip-errors = all