目录
4.vrrp帧里的目的mac地址(01:00:5E:00:00:12)是个什么地址?
一、什么是高可用?
一个业务不会因为某个设备或者某点出现问题而导致整个业务不能正常运转,不能有单点故障(单点故障:如果某台服务器出现故障会导致整个集群出现异常)。
简单的说,高可用(High Availability)就是一台机器出现故障,另外的机器可以顶替,继续保障整个集群的正常运转。
高可用的作用就是防止出现单点故障。
二、Keepalived简介
Keepalived是一个用C编写的路由软件,该项目的主要目标是为Linux系统和基于Linux的基础设施提供简单而强大的负载均衡和高可用性设施。
Keepalived的高可以性是通过VRRP实现的协议。VRRP是路由器故障转移的基础。
三、VRRP协议介绍
虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP),VRRP是一种容错协议,它通过把几台路由联合组成一台虚拟的路由设备,并通过一定的机制来保证当主机的下一跳设备出现故障时,可以及时将业务切换到其它设备,从而保持通信的连续性和可靠性。
1.相关概念
master:虚拟路由器中承担报文转发任务的路由器,通过优先级选举出master。
backup:Master路由器出现故障时,能够代替Master路由器工作的路由器。
vip:virtual ip, 虚拟的IP地址,对外提供服务的,vip可以有多个,哪台设备是master,vip就会配置到哪台设备的网卡上,这样master就有vip地址了,就可以对外提供服务了。
通告信息:master 给backup发送的报文,比如:master路由器周期性的发送vrrp报文,告诉backup我还是master。(advertiseinterval,宣告时间间隔,默认为1s)
2.vrrp协议数据格式
VRRP包的源地址是本机地址,目的地址必须为224.0.0.18,为一多播地址;IP协议号为112;IP包的TTL值必须为225。
224.0.0.18多播地址表示运行了vrrp协议的软件的设备都会接受这个ip。
3.vrrp协议到底是应用层协议还是网络层协议?
vrrp是网络层协议,因为根据抓包分析,vrrp协议没有tcp/udp的封装,需要依赖ip协议。
4.vrrp帧里的目的mac地址(01:00:5E:00:00:12)是个什么地址?
是一个组播mac,交换机收到目的地址是组播的mac地址的时候,会进行广播
四、脑裂现象/vip漂移
脑裂现象就是2台或多台负载均衡器上都有vip,都是master。
产生的原因又两种:
1.虚拟路由id不一样,也就是virtual_route)_id不一样
2.防火墙阻止了keepalived的vrrp消息的通告
脑裂现象有什么危害?
如果是防火墙阻止了,可能有一定的危害,会导致80端口也不能访问,这是有影响的,因为web服务器不能访问;如果是虚拟路由id不一样导致,是没有影响的,因为web服务可以访问,但是客户机访问哪台服务器,完全具有了随机性了,那台服务器先响应客户机的请求,客户机救访问谁。
vip漂移:当master出现down机或者故障时,vip就会给另一台机器
五、Keepalived部署
1.准备工作
准备两台centos系统的虚拟机,都需要安装好nginx,并且需要实现http负载均衡的功能。上一篇文章写明了如何安装。
IP:192.168.10.227 主机名:load-balancer1
IP:192.168.10.228 主机名:load-balancer2
2.安装Keepalived软件
#两台机器上都需要下载
[root@load-balancer1 ~]# yum install keepalived -y
[root@load-balancer2 ~]# yum install keepalived -y
3.配置keepalived.conf文件,添加vip和相关信息
#master的配置
[root@load-balancer1 ~]# cd /etc/keepalived/
[root@load-balancer1 keepalived]# ls
keepalived.conf
#修改keepalived.conf,下面显示的只是我们需要的,把其他的都删除,因为Keepalived有负载均衡和高可用的功能,而我们只使用它的高可用功能。
[root@load-balancer1 keepalived]# vim keepalived.conf
[root@load-balancer1 keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 { #启动一个vrrp的实例VI_1,实例名可以自定义
state MASTER #这台机器的角色是master
interface ens33 #在ens33接口上监听vrrp协议,同时绑定vip到那个接口
virtual_router_id 188 #虚拟路由id,两台机器必须一样,范围在0~255
priority 200 #优先级 0~255,master这台机器的数值要比backup大
advert_int 1 #advert interval,宣告消息时间间隔1秒
authentication { #认证
auth_type PASS #认证类型是密码认证
auth_pass 1111 #具体的密码,可以自行修改,但没必要
}
virtual_ipaddress { #vip的配置,vip可以填多个
192.168.10.240
}
}
#启动Keepalived服务
[root@load-balancer1 keepalived]# service keepalived start
Redirecting to /bin/systemctl start keepalived.service
#查看进程是否启动
[root@load-balancer1 keepalived]# ps aux|grep keepalived
root 3086 0.0 0.3 106332 2740 ? Ss 20:47 0:00 /usr/sbin/keepalived -D
root 3087 0.1 0.3 106332 3076 ? S 20:47 0:00 /usr/sbin/keepalived -D
root 3095 0.0 0.1 12344 1052 pts/0 S+ 20:47 0:00 grep --color=auto keepalived
#backup的配置
[root@load-balancer2 ~]# cd /etc/keepalived/
[root@load-balancer2 keepalived]# ls
keepalived.conf
[root@load-balancer2 keepalived]# vim keepalived.conf
[root@load-balancer2 keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 188
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.240
}
}
[root@load-balancer2 keepalived]# service keepalived start
Redirecting to /bin/systemctl start keepalived.service
[root@load-balancer2 keepalived]# ps aux|grep keepalived
root 3553 0.0 0.1 106332 1012 ? Ss 20:57 0:00 /usr/sbin/keepalived -D
root 3554 0.0 0.1 106332 1012 ? S 20:57 0:00 /usr/sbin/keepalived -D
root 3562 0.0 0.1 12344 1200 pts/1 S+ 20:57 0:00 grep --color=auto keepalived
4.测试
5. 双vip的配置
双vip的用处在于,互为master,两台机器可同时工作。下面介绍以下代码的思路。
#修改keepalived.conf文件,再添加一个vrrp实例,其他的代码只是没有复制,下面只是添加的代码。
[root@load-balancer1 keepalived]# vim keepalived.conf
[root@load-balancer1 keepalived]# cat keepalived.conf
vrrp_instance VI_2 {
state BACKUP
interface ens33
virtual_router_id 189
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.241
}
[root@load-balancer2 keepalived]# vim keepalived.conf
[root@load-balancer2 keepalived]# cat keepalived.conf
vrrp_instance VI_2 {
state MASTER
interface ens33
virtual_router_id 189
priority 200
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.241
}