Linux深入篇之七:配置Mysql+keepalived主从架构

一、Keepalived介绍

      keepalived是一个类似于layer3, 4 & 7交换机制的软件,也就是我们平时说的第3层、第4层和第7层交换。

       Keepalived的作用是检测web服务器的状态,如果有一台web服务器、Mysql服务器宕机,或工作出现故障,Keepalived将检测到后,会将有故障的web服务器或者Mysql服务器从系统中剔除,当服务器工作正常后Keepalived自动将web、Mysql服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的WEB和Mysql服务器。

       Layer3,4&7工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:

       Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。

      Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。

      Layer7:Layer7就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。

二、VRRP介绍

      keepalived是VRRP的完美实现,因此在介绍keepalived之前,先介绍一下VRRP的原理。

      在现实的网络环境中,两台需要通信的主机大多数情况下并没有直接的物理连接。对于这样的情况,它们之间路由怎样选择?主机如何选定到达目的主机的下一跳路由,这个问题通常的解决方法有二种:

1、在主机上使用动态路由协议(RIP、OSPF等)

2、在主机上配置静态路由

      很明显,在主机上配置路态路由是非常不切实际的,因为管理、维护成本以及是否支持等诸多问题。配置静态路由就变得十分流行,但路由器(或者说默认网关default gateway)却经常成为单点。

VRRP的目的就是为了解决静态路由单点故障问题。

      VRRP通过一竞选(election)协议来动态的将路由任务交给LAN中虚拟路由器中的某台VRRP路由器。

三、工作机制

      在一个VRRP虚拟路由器中,有多台物理的VRRP路由器,但是这多台的物理的机器并不能同时工作,而是由一台称为MASTER的负责路由工作,其它的都是BACKUP,MASTER并非一成不变,VRRP让每个VRRP路由器参与竞选,最终获胜的就是MASTER。MASTER拥有一些特权,比如拥有虚拟路由器的IP地址,我们的主机就是用这个IP地址作为静态路由的。拥有特权的MASTER要负责转发发送给网关地址的包和响应ARP请求。

      VRRP通过竞选协议来实现虚拟路由器的功能,所有的协议报文都是通过IP多播(multicast)包(多播地址 224.0.0.18)形式发送的。虚拟路由器由VRID(范围0-255)和一组IP地址组成,对外表现为一个周知的MAC地址。所以,在一个虚拟路由 器中,不管谁是MASTER,对外都是相同的MAC和IP(称之为VIP)。客户端主机并不需要因为MASTER的改变而修改自己的路由配置,对他们来 说,这种主从的切换是透明的。

      在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP广告包(VRRP Advertisement message),BACKUP不会抢占MASTER,除非它的优先级(priority)更高。当MASTER不可用时(BACKUP收不到广告包), 多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性。由于安全性考虑,VRRP包使用了加密协议进行加密。

四、Keepalived安装配置

1、编译安装

yum install syslinux kernel-devel kernel -y

tar zxf keepalived-1.2.7.tar.gz 

cd keepalived-1.2.7

./configure --with-kernel-dir=/usr/src/kernels/2.6.32-573.3.1.el6.x86_64/

报错,

wKioL1XxTCOgGBGCAAGBOspgdb0624.jpg

需要安装:yum install -y openssl openssl-devel

再次报错:

 wKiom1XxS67BDvQNAAI6jzcOiX0752.jpg

没有安装popt的开发包导致的,解决方法只要安装:yum install popt-devel -y

再次编译./configure --with-kernel-dir=/usr/src/kernels/2.6.32-573.3.1.el6.x86_64/

wKioL1XxTqbwlHV6AAMmXZTGHP0212.jpg

2、make && make install

wKiom1XxTuejrC0KAARppL1j6bM717.jpg

3、修改文件位置

安装之后的目录,需要移动到指定的位置,

wKiom1XxUNexRKWSAADHSLcGK70070.jpg

DIR=/usr/local/

cp $DIR/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ && cp $DIR/etc/sysconfig/keepalived /etc/sysconfig/ && mkdir -p /etc/keepalived && cp $DIR/sbin/keepalived /usr/sbin/ cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

查看keepalived文件详细信息:

启动文件的位置:

配置文件的位置:

wKioL1Xz7OeihONQAADN0uKUZYg057.jpg

4、修改Master服务器上keepalived.conf配置,

vim /etc/keepalived/keepalived.conf

wKioL1Xz7gfQKWDyAACJsYdnGz0101.jpg

wKiom1Xz66yCOJCAAAFGslu1YoE153.jpg

5、在master数据库上创建/data/sh/mysql.sh脚本,内容为:

pkill  keepalived

#!/bin/bash
/etc/init.d/keepalived stop

6、启动keepailved

wKiom1X0N3vA88EmAABiEeyd67c839.jpg

7、查看keepailved是否启动,在系统日志中查看:tail -fn 100 /var/log/messages

出错:无法初始化IPVS!

wKioL1X0OerxMbIfAARFekFG7Z8707.jpg

需要加载IPVS模块:modprobe ip_vs

wKiom1X0N-jzWBO_AACklVL3Lv4170.jpg

再次查看日志信息,

wKioL1X0OrCw6Zs7AAbjiCX-1qE298.jpg

 

 

二、slave安装keepailved

Mysql从服务器配置keepalived.conf跟master一样,只需要把Realserver IP修改成real_server 192.168.174.18 ;优先级从100改成90即可

1、修改Master服务器上keepalived.conf配置,

vim /etc/keepalived/keepalived.conf

wKioL1X0ArjB7EtyAAC47O7rs1M648.jpg

wKiom1X2k6yzUAuxAAG2-k1JANU978.jpg

2、在slave数据库上创建/data/sh/mysql.sh脚本,内容为:

pkill  keepalived

#!/bin/bash
/etc/init.d/keepalived stop

3、授予执行权限:

wKioL1X0Ps6SO7HmAADM8Tf-hMc799.jpg

 

三、启动keepailved

1、启动从设备上的数据库服务和keepailved服务:

wKiom1X2lI7g2-xIAAVdH78qoF4986.jpg

查看服务启动情况:

wKioL1X2lxvACbA0AAUcjYrZvA4138.jpg

2、查看keepailved服务状态,启动成功!

wKiom1X2lU6yL_QlAAaUAKUh4Ac897.jpg

 3、在主keeplived上授权从访问主的keepailved上的msyql数据库,

wKioL1X0RLSjUwd7AAJq1KW6e8U823.jpg

4、访问vip的msyql成功!

wKioL1X0Q1mAkW6BAAO6jfQfsyY581.jpg

5、访问主msyql的真实IP上的msyql也成功了!

wKioL1X0TKKSyeJYAAL7jrJ3omk318.jpg

 

 

四、测试keepailved主、从切换

1、主数据库服务器上down了msyql服务

wKiom1X24w7iKS-VAAL4MdP8cj0207.jpg

2、查看vip信息:

wKiom1X24XSjLb4TAAMlpEQzgr4139.jpg

wKiom1X26bngkkgUAAcjxJnad7c013.jpg

VIP已经从主服务器上转移到了从服务器上:

wKioL1X246jSgtGiAAM6NzJNvV4857.jpg

wKioL1X26-6wf4mwAAceeK466Ds252.jpg

3、将主服务器上的MYSQL、keepailved启动,

wKioL1X3eIThFKctAAR6Cxacvbk157.jpg

由于主、从服务器上没有配置抢占的特性,所以当主数据库恢复上线之后,依然是从的状态!wKiom1X3dozTPmqFAAYKI3Xd2E8537.jpg

 

 

五、模拟数据库故障

1、授权2台数据库连接后端php,

wKioL1X3gUXzW2uxAAChDaYDRLA968.jpg

2、修改php的测试页面,

wKioL1X3jl2QGCPaAADeqbgpQhM547.jpg

3、测试主数据库服务器宕机,

wKioL1X3kNmgowlYAAQzLo3i8Yo718.jpg

wKiom1X3jqbAKN5uAAQ5wWAhcnQ458.jpg

wKioL1X3kNzB4C0SAAN5XfFGO8o345.jpg

依然可以打开测试页面!

wKiom1X3jvTRjnlDAAMmxdBc5k4155.jpg

再模拟主数据库故障恢复了,keepailved并没有切换到主服务器:

wKioL1X3kkvx4r8UAAVeJSx7C4c433.jpg

主要是keepailved的配置文件设置成了不强制的特性导致的!

修改一下配置文件:

wKiom1X3lEXDHA1LAADCWFKFr74091.jpg

wKioL1X3lqPBXmvtAAC4CNvo1l4712.jpg

再次将主数据库、keepailved服务停止、启动,从数据库服务器上的变化:

wKioL1X3l4-hvQpyAAjiUw0AU_4952.jpg

wKiom1X3l33CJtEeAAM7iDHPavI733.jpg

总结:

在主、从数据库服务器的切换过程中,有部分的数据库会不一致,需要引起注意!需要做备份,再恢复!如果数据库做的是主、主模式,就可以自动保存数据,数据库副本也一致!无需再恢复!

在实际的工作环境中,只需要在优先级高的服务器上开启不抢占的特性!避免来回切换,导致网站不稳定运行!