软件设计 2017-09-14
Keepalived实现双机热备:
双机热备一般指的是两台机器设备同时在运行,但是只有一台处于提供服务的状态。当其中一台设备出现故障,那么另一台设备接管角色,继续提供服务,他们之间的切换时间非常之短,基本是无缝切换,所以避免了因为某台服务器出现故障,导致系统软件不能正常运行的问题。
· Keepalived
· 热备架构图
· 安装及配置
· 测试及验证
一、Keepalived
Keepalived的运行原理是基于VRRP(虚拟路由冗余协议)机制,在VRRP中有两个重要的概念:VRRP路由器和虚拟路由器,主控路由器和备份路由器。
VRRP路由器是一种实体路由器设备,而虚拟路由器则是基于VRRP协议构建的虚拟路由器,是软性的虚拟概念,一组VRRP路由器协同工作,共同构造一台虚拟服务器。
VRRP协议支持一种选举机制,主要用来选出用来提供服务的路由即主控路由,其它的就是备份路由了,当主控路由失效之后,备份路由中重新选出一个主控路由(往往按照设置好的优先级别重新分配),接管主控服务,继续工作,来保证不间断的提供服务。
二、热备架构图
1、环境准备
因为资源条件限制,这里使用虚拟机代替物理主机,具体如下:
master : 192.168.132.10(主控服务器)
backup : 192.168.132.11(备用服务器)
vip : 192.168.132.101
2、架构图解
NOTE:
Vip:虚拟服务器;
Node A:物理主服务器;
Node B:物理备用服务器;
在这种模式下,虚拟IP某一时刻只能属于一个物理节点,另一个作为备份节点存在,当主节点不可用时,备份节点接管虚拟IP,继续提供正常的服务。
3、Keepalived的原理
Keepalived被安装在两台物理服务器上,并且彼此监控对方当前是否处于正常状态,当Node A正常时,其上的keepalived会发送广播:192.168.132.101 这个ip对应的节点为Node A的网卡MAC地址;反之,如果NodeB正常时,其上的keepalived也会发送广播:192.168.132.101这个ip对应的节点为Node B的网卡MAC地址;此时,相关的电脑及客户端的ARP会发生更新,对应192.168.132.11的MAC地址与Node B网卡的MAC地址相同。
三、安装及配置
1、虚拟IP配置
$vim /etc/sysconfig/network-scripts/ifcfg-eth2:0
DEVICE=eth2:0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
DNS1=192.168.232.2
IPADDR=192.168.132.101
NETMASK=255.255.255.0
GETWAY=192.168.232.2
2、主备机器安装keepalived
$tar -zxvf keepalived-1.2.6.tar.gz
$cd keepalived-1.2.6
$sudo ./configure
$make & make install
3、主节点keepalived配置
global_defs {
router_id NodeA
}
vrrp_instance VI_11 {
state MASTER #设置为主服务器
interface eth2 #设置监听网络接口
priority 101 #设置优先级,值越大代表优先级越高
advert_int 1 #设置VRRP广播周期秒数
authentication {
auth_type PASS #VRRP认证方式,主备必须一致
auth_pass 1234 #验证密码
}
virtual_router_id 52 #主备必须一致
}
virtual_ipaddress {
192.168.132.101/24 #VRRP HA虚拟地址
}
4、备用节点keepalived配置
global_defs {
router_id NodeB
}
vrrp_instance VI_11 {
state BACKUP #设置为备用服务器
interface eth2 #设置监听网络接口
priority 100 #设置优先级,值越大代表优先级越高
advert_int 1 #设置VRRP广播周期秒数
authentication {
auth_type PASS #VRRP认证方式,主备必须一致
auth_pass 1234 #验证密码
}
virtual_router_id 52 #主备必须一致
}
virtual_ipaddress {
192.168.132.101/24 #VRRP HA虚拟地址
}
5、启动主备keepalived服务
$keepalived -D –f /etc/keepalived/keepalived.conf
查看logs日志:
$tail -f /var/log/messages
通过日志,可以查看节点的ARP消息daemon[4029]:
Registering new address record for192.168.132.101 on eth0.
6、安装web服务器
在两台物理服务器上安装web服务器,比如:nginx,apacache或tomcat等,在这里省略,请自行查阅资料安装。
四、测试及验证
1、在Node A节点上创建一个html文件,内容如下:
this is the test page
<br/>
from server 192.168.132.10
访问:
通过访问http://192.168.132.101/test/test/html
2、在Node B节点上创建一个html文件,内容如下:
this is the test page
<br/>
from server 192.168.132.11
访问:
通过访问http://192.168.132.11/test/test/html访问是可以访问的,但是在Node A正常情况下,访问http://192.168.132.101/test/test/html是访问的Node A节点。
3、验证Node B节点的可用性
首先,将节点A的keepalived服务器关闭来模拟故障:
$killall keepalived
其次,通过下面的Url访问:
http://192.168.132.101/test/test.html
那么访问的就是Node B节点了,内容:
this is the test page
<br/>
from server 192.168.132.11
4、查看日志
此时查看日志,会发现Node B现在为主节点,发送ARP广播信息。而当Node A恢复之后,Node B释放角色,将继续由Node A为主服务器,继续服务。
daemon[3769]:
Registering new address record for 192.168.132.101 on eth0.
NOTE:
这里只介绍使用keepalived实现双机热备的功能和流程,至于Web服务器的安装等辅助技术,这里不做介绍。
附加:
一般情况下,主备服务器的选型是不同的,也就是主服务器要高配,因为其会被经常使用,出现故障只是特殊情况,而备用服务器是为了保证服务器的持续服务,但是最终还是要恢复并使用主服务器来作为主控路由服务器,也是为了缩小不必要的开销的考虑。
环境说明:本环境由两台mysql 数据库和heartbeat 组成,一台的ip 为192.168.10.197,一台为192.168.10.198,对外提供服务的vip 为192.168.10.200