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/
报错,
需要安装:yum install -y openssl openssl-devel
再次报错:
没有安装popt的开发包导致的,解决方法只要安装:yum install popt-devel -y
再次编译:./configure --with-kernel-dir=/usr/src/kernels/2.6.32-573.3.1.el6.x86_64/
2、make && make install
3、修改文件位置
安装之后的目录,需要移动到指定的位置,
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文件详细信息:
启动文件的位置:
配置文件的位置:
4、修改Master服务器上keepalived.conf配置,
vim /etc/keepalived/keepalived.conf
5、在master数据库上创建/data/sh/mysql.sh脚本,内容为:
pkill keepalived
#!/bin/bash
/etc/init.d/keepalived stop
6、启动keepailved
7、查看keepailved是否启动,在系统日志中查看:tail -fn 100 /var/log/messages
出错:无法初始化IPVS!
需要加载IPVS模块:modprobe ip_vs
再次查看日志信息,
二、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
2、在slave数据库上创建/data/sh/mysql.sh脚本,内容为:
pkill keepalived
#!/bin/bash
/etc/init.d/keepalived stop
3、授予执行权限:
三、启动keepailved
1、启动从设备上的数据库服务和keepailved服务:
查看服务启动情况:
2、查看keepailved服务状态,启动成功!
3、在主keeplived上授权从访问主的keepailved上的msyql数据库,
4、访问vip的msyql成功!
5、访问主msyql的真实IP上的msyql也成功了!
四、测试keepailved主、从切换
1、主数据库服务器上down了msyql服务
2、查看vip信息:
VIP已经从主服务器上转移到了从服务器上:
3、将主服务器上的MYSQL、keepailved启动,
由于主、从服务器上没有配置抢占的特性,所以当主数据库恢复上线之后,依然是从的状态!
五、模拟数据库故障
1、授权2台数据库连接后端php,
2、修改php的测试页面,
3、测试主数据库服务器宕机,
依然可以打开测试页面!
再模拟主数据库故障恢复了,keepailved并没有切换到主服务器:
主要是keepailved的配置文件设置成了不强制的特性导致的!
修改一下配置文件:
再次将主数据库、keepailved服务停止、启动,从数据库服务器上的变化:
总结:
在主、从数据库服务器的切换过程中,有部分的数据库会不一致,需要引起注意!需要做备份,再恢复!如果数据库做的是主、主模式,就可以自动保存数据,数据库副本也一致!无需再恢复!
在实际的工作环境中,只需要在优先级高的服务器上开启不抢占的特性!避免来回切换,导致网站不稳定运行!
转载于:https://blog.51cto.com/baishubing/1685887