keepalived原理及实现双vip
一、什么是keepalived?二、VRRP协议1.vrrp协议格式2.相关术语3.vrrp协议工作原理4.master选举4.1备份组中路由器的优先级4.2备份组中路由器的工作方式三、vip漂移四、脑裂现象五、双vip实验1. 安装nginx2. 配置nginx负载均衡功能 直接从LB1拷贝到LB23.启动nginx服务4. 安装keepalived文件5. 配置keepalived.conf文件 ,添加vip和相关信息6.重启keepalived7. 查看ip验证是否成功一、什么是keepalived?
keepalived是一种用 C 编写的路由软件。该项目的主要目标是为 Linux 系统和 Linux 基础设施提供简单而坚固的负载平衡和高可用性设施。负载平衡框架依赖于知名且广泛使用的Linux 虚拟服务器 (IPVS)内核模块,提供第 4 层负载平衡。Keepalive 实施一组跳棋,以便根据其健康状况动态、自适应地维护和管理负载平衡服务器池。
另一方面,VRRP协议实现了高可用性。VRRP 是路由器故障转移的基本砖块。此外,Keepalived 还向 VRRP 有限状态机器实施一组挂钩,提供低级别和高速的协议交互。为了提供最快的网络故障检测,Keepalive 实施BFD协议。VRRP 状态转换可以考虑 BFD 提示以推动快速状态过渡。保留框架可以独立使用或全部一起使用,以提供弹性基础设施。
负载均衡和高可用性是2个概念
负载均衡:将很多的请求分散到后端很多的服务器上 --》化解压力的一个软件高可用: 有2个或者多个服务器(人)做相同的事情,互相备份。
负载均衡
keepalived实现负载均衡的功能是依靠lvs这个软件里实现的负载平衡框架依赖于提供第4层负载平衡的著名且广泛使用的Linux虚拟服务器(IPVS)内核模块。
二、VRRP协议
1.vrrp协议格式
0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Version| Type | Virtual Rtr ID| Priority | Count IP Addrs|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Auth Type | Adver Int |Checksum |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|IP Address (1) |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| . || . || . |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|IP Address (n) |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Authentication Data (1) |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Authentication Data (2) |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2.相关术语
虚拟路由器:由一个Master路由器和多个Backup路由器组成。主机将虚拟路由器当作默认网关。
VRID:虚拟路由器的标识。有相同VRID的一组路由器构成一个虚拟路由器。
Master路由器:虚拟路由器中承担报文转发任务的路由器。
Backup路由器:Master路由器出现故障时,能够代替Master路由器工作的路由器。
虚拟IP地址:虚拟路由器的IP地址。一个虚拟路由器可以拥有一个或多个IP地址。
IP地址拥有者:接口IP地址与虚拟IP地址相同的路由器被称为IP地址拥有者。
虚拟MAC地址:一个虚拟路由器拥有一个虚拟MAC地址。虚拟MAC地址的格式为00-00-5E-00-01-{VRID}。通常情况下,虚拟路由器回应ARP请求使用的是虚拟MAC地址,只有虚拟路由器做特殊配置的时候,才回应接口的真实MAC地址。
优先级:VRRP根据优先级来确定虚拟路由器中每台路由器的地位。
非抢占方式:如果Backup路由器工作在非抢占方式下,则只要Master路由器没有出现故障,Backup路由器即使随后被配置了更高的优先级也不会成为Master路由器。
抢占方式:如果Backup路由器工作在抢占方式下,当它收到VRRP报文后,会将自己的优先级与通告报文中的优先级进行比较。如果自己的优先级比当前的Master路由器的优先级高,就会主动抢占成为Master路由器;否则,将保持Backup状态。
3.vrrp协议工作原理
VRRP协议是什么?
vrrp协议是为消除在静态缺省路由环境下的缺省路由器单点故障引起的网络失效而设计的主备模式的协议,使得在发生故障而进行设备功能切换时可以不影响内外数据通信,不需要再修改内部网络的网络参数。VRRP协议需要具有IP地址备份,优先路由选择,减少不必要的路由器间通信等功能。
VRRP协议工作原理
VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个),而在路由器组内部,如果实际拥有这个对外IP的路由器如果工作正常的话就是MASTER,或者是通过算法选举产生,MASTER实现针对虚拟路由器IP的各种网络功能,如ARP请求,ICMP,以及数据的转发等;其他设备不拥有该IP,状态是BACKUP,除了接收MASTER的VRRP状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP将接管原先MASTER的网络功能。
配置VRRP协议时需要配置每个路由器的虚拟路由器ID(VRID)和优先权值,使用VRID将路由器进行分组,具有相同VRID值的路由器为同一个组,VRID是一个0~255的正整数;同一组中的路由器通过使用优先权值来选举MASTER,优先权大者为MASTER,优先权也是一个0~255的正整数。
VRRP通告
VRRP协议使用组播数据来传输VRRP数据,VRRP数据使用特殊的虚拟源MAC地址发送数据而不是自身网卡的MAC地址,VRRP运行时只有MASTER路由器定时发送VRRP通告信息,表示MASTER工作正常以及虚拟路由器IP(组),BACKUP只接收VRRP数据,不发送数据,如果一定时间内没有接收到MASTER的通告信息,各BACKUP将宣告自己成为MASTER,发送通告信息,重新进行MASTER选举状态。
VRRP通告(advertisement)使用IP多播数据包进行封装,源地址是本机地址,目的地址为224.0.0.18,只有运行vrrp协议的路由器才会接受组播地址。
4.master选举
4.1备份组中路由器的优先级
VRRP根据优先级来确定备份组中每台路由器的角色(Master路由器或Backup路由器)。优先级越高,则越有可能成为Master路由器。
当两台优先级相同的路由器同时竞争Master时,比较接口IP地址大小。接口地址大者当选为Master。
VRRP优先级的取值范围为0到255(数值越大表明优先级越高),可配置的范围是1到254,优先级0为系统保留给路由器主动放弃Master位置时候使用,255则是系统保留给IP地址拥有者使用。若VRRP路由器的IP地址和虚拟路由器的接口IP地址相同,则该VRRP路由器被称为该IP地址的所有者;IP地址所有者自动具有最高优先级:255。因此,当备份组内存在IP地址拥有者时,只要其工作正常,则为Master路由器。
4.2备份组中路由器的工作方式
非抢占方式:如果备份组中的路由器工作在非抢占方式下,则只要Master路由器没有出现故障,Backup路由器即使随后被配置了更高的优先级也不会成为Master路由器。
抢占方式:如果备份组中的路由器工作在抢占方式下,它一旦发现自己的优先级比当前的Master路由器的优先级高,就会对外发送VRRP通告报文。导致备份组内路由器重新选举Master路由器,并最终取代原有的Master路由器。相应地,原来的Master路由器将会变成Backup路由器。Backup路由器接收到VRRP通告报文后,只会将自己的优先级与通告报文中的优先级进行比较,不会比较IP地址,只有自己的优先级大于通告报文中的优先级时,才会抢占成为Master。
初始创建的路由器工作在Backup状态,通过VRRP报文的交互获知虚拟路由器中其他成员的优先级:
如果VRRP报文中Master路由器的优先级高于自己的优先级,则路由器保持在Backup状态;
如果VRRP报文中Master路由器的优先级低于自己的优先级,采用抢占工作方式的路由器将抢占成为Master状态,周期性地发送VRRP报文,采用非抢占工作方式的路由器仍保持Backup状态;
如果在一定时间内没有收到VRRP报文,则路由器切换为Master状态。
三、vip漂移
vip— virtual ip 虚拟ip
vip会漂移,当master挂了后,vip会自动漂移到backup上。 master挂掉重启之后,master的优先级更高,vip会漂移回到master上,实现高可用。
如何知道master挂了
zabbix监控
负载均衡器返回数据给用户的时候,使用的是vip还是自己真实的ip?
对外使用的是vip,实现高可用内部使用的是本机IP
vip漂移时,客户机是否知道?
浏览器上没有变化,arp缓存表会产生变化。vip的mac地址为master服务器的mac地址,当vip漂移时会转变为现master服务器的mac地址
四、脑裂现象
2台或者多台负载均衡器上都有vip地址就会出现脑裂现象
有什么原因会出现脑裂
防火墙阻止了keepalived的vrrp消息的通告virtual_router_id 不一样的时候。优先级和密码不同不会出现脑裂现象 。
脑裂现象不影响用户的访问,也不影响后端服务器,反而可以起到负载均衡的作用
用户会选中一个vip的机器,用户的选择,运维不可控制,这样就留下了安全的隐患。—>用户访问到的负载均衡器是运维人员不可控制的,这样作为一个管理人员是不能接受的。
外网的用户会一直访问其中的一台负载均衡服务器,另外一台会没有访问,但是这个决定不是运维人员可以做主的,而是给了出口的路由器来做决定,这样我们内网里选好的master和backup就没有意义了
如果只是单vip,master会工作,backup服务器会闲置。如何让backup不闲置,你有什么方法?
故意制造脑裂dns域名解析 实现双vip
五、双vip实验
1. 安装nginx
在两台负载均衡器上都安装nginx
作者在LB1已经编译安装过nginx,只需将安装脚本传到LB2上安装nginx
[root@LB1 ~]# scp onekey_install_nginx.sh 192.168.0.111:/rootThe authenticity of host '192.168.0.111 (192.168.0.111)' can't be established.ECDSA key fingerprint is SHA256:iVMGjapIaq/B9GUPAueatX3CTeUTM+tM3QlHqYYFTy0.Are you sure you want to continue connecting (yes/no/[fingerprint])? yesWarning: Permanently added '192.168.0.111' (ECDSA) to the list of known hosts.root@192.168.0.111's password: onekey_install_nginx.sh [root@LB1 ~]bash onekey_install_nginx.sh #执行一键安装脚本
2. 配置nginx负载均衡功能 直接从LB1拷贝到LB2
[root@LB conf]# mv nginx.conf nginx.conf.bak #备份原来的nginx.conf文件[root@LB conf]# scp nginx.conf 192.168.0.111:/usr/local/scxx99/confroot@192.168.0.111's password: nginx.conf
3.启动nginx服务
两台负载均衡器都需要启动nginx服务
[root@LB1 ~]# systemctl start nginx[root@LB1 ~]# ps aux | grep nginx #查看nginx是否启动
4. 安装keepalived文件
在两台负载均衡器上都需要安装keepalived
[root@LB1 ~]# yum install keepalived -y
5. 配置keepalived.conf文件 ,添加vip和相关信息
[root@LB1 ~]# vim /etc/keepalived/keepalived.confvrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 105priority 120advert_int 1authentication {auth_type PASSauth_pass 11112222}virtual_ipaddress {192.168.0.198}}vrrp_instance VI_2 {state BACKUPinterface ens33virtual_router_id 110priority 100advert_int 1authentication {auth_type PASSauth_pass 11112222}virtual_ipaddress {192.168.0.199}}
[root@LB2 ~]# vim /etc/keepalived/keepalived.confvrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 105priority 120advert_int 1authentication {auth_type PASSauth_pass 11112222}virtual_ipaddress {192.168.0.198}}vrrp_instance VI_2 {state MASTERinterface ens33virtual_router_id 110priority 180advert_int 1authentication {auth_type PASSauth_pass 11112222}virtual_ipaddress {192.168.0.199}
6.重启keepalived
在两台负载均衡器上都重启keepalived
[root@LB1 ~]#systemctl restart keepalived
7. 查看ip验证是否成功
LB1
[root@LB1 ~]# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:31:00:af brd ff:ff:ff:ff:ff:ffinet 192.168.0.112/24 brd 192.168.0.255 scope global dynamic noprefixroute ens33valid_lft 5501sec preferred_lft 5501secinet 192.168.0.198/32 scope global ens33valid_lft forever preferred_lft forever[root@LB1 ~]#
LB2
[root@LB2 ~]# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:bb:a0:b0 brd ff:ff:ff:ff:ff:ffinet 192.168.0.111/24 brd 192.168.0.255 scope global dynamic noprefixroute ens33valid_lft 5379sec preferred_lft 5379secinet 192.168.0.199/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::9fea:369d:550e:e3c6/64 scope link noprefixroute valid_lft forever preferred_lft forever[root@LB2 ~]#