目录
出现了脑裂现象的时候,怎么确定访问的是哪一台负载均衡服务器呢。
什么是单点故障?
单点故障:某个重要的功能,只有一份,容易这个点出现问题,导致全局无法使用
单点故障:本质上是一份,没有其他设备
因此我们可以调用两个nginx作为负载均衡器
单点故障在系统架构中,我们需要尽量避免的
一、什么是高可用
“高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性,是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。
假设系统一直能够提供服务,我们说系统的可用性是100%。
如果系统每运行100个时间单位,会有1个时间单位无法提供服务,我们说系统的可用性是99%。
很多公司的高可用目标是4个9,也就是99.99%,这就意味着,系统的年停机时间为8.76个小时。
百度的搜索首页,是业内公认高可用保障非常出色的系统,甚至人们会通过www.baidu.com 能不能访问来判断“网络的连通性”,百度高可用的服务让人留下啦“网络通畅,百度就能访问”,“百度打不开,应该是网络连不上”的印象,这其实是对百度HA最高的褒奖。
通俗来讲:就是进行备份,一个坏了,另一个可以顶替,核心业务基本不受到影响
二、如何保障系统的高可用
我们都知道,单点是系统高可用的大敌,单点往往是系统高可用最大的风险和敌人,应该尽量在系统设计的过程中避免单点。方法论上,高可用保证的原则是“集群化”,或者叫“冗余”:只有一个单点,挂了服务会受影响;如果有冗余备份,挂了还有其他backup能够顶上。
保证系统高可用,架构设计的核心准则是:冗余。
有了冗余之后,还不够,每次出现故障需要人工介入恢复势必会增加系统的不可服务实践。所以,又往往是通过“自动故障转移”来实现系统的高可用。
三、负载均衡器的高可用性
为了屏蔽负载均衡服务器的失效,需要建立一个备份机。主服务器和备份机上都运行High Availability监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供服务;当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主管理器就开始再次进行集群管理的工作了。为在主服务器失效的情况下系统能正常工作,我们在主、备份机之间实现负载集群系统配置信息的同步与备份,保持二者系统的基本一致。
可以说是花钱消灾 --》 HA
简介:
设备:
我们需要2个负载均衡器,需要两台linux机器
负载均衡器上都需要安装nginx,使用nginx做7层负载均衡
当用户去访问www.sc.com
实现dns的负载均衡记录
www.sc.com 192.168.227.144
www.sc.com 192.168.227.148
什么是keepalived?
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
官网:www.keepalived.org
keepalived 的2个核心功能:
1、loadbalance 负载均衡 LB:ipvs -->lvs软件在linux内核里已经安装,不需要单独安装了
2、high-availability 高可用 HA :vrrp协议
什么是vrrp协议?
虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)是由IETF提出的解决局域网中配置静态网关出现单点失效现象的路由协议,1998年已推出正式的RFC2338协议标准。VRRP广泛应用在边缘网络中,它的设计目标是支持特定情况下IP数据流量失败转移不会引起混乱,允许主机使用单路由器,以及即使在实际第一跳路由器使用失败的情形下仍能够维护路由器间的连通性。(工作在网络层)
简单的解释为:
一组路由器系统工作,担任不同的角色,有master角色,也有backup角色
master角色的路由器(的接口)承担实际的数据流量转发任务
backup角色的路由器 监听 master路由器的状态,并在master路由器发生故障的时候,截图其工作,从而保障业务流量的平滑切换,随时待命,即为备胎的作用
VRRP协议详解[通俗易懂] - 腾讯云开发者社区-腾讯云 (tencent.com)
如何得到vrrp协议呢?
我们需要每台机器安装keepalived软件就可以允许vrrp协议
只要通过vrrp协议就可以选举出master角色和backup角色
vrrp协议 会往传统的网络里发送数据包,这些数据包只要是安装了keepalived软件的机器都可以接收到
vip是虚拟的ip地址,真正对外提供服务的IP地址,可以告诉用户的
步骤:
1、安装keepalived软件,在两台负载均衡器上都需要
yum isntall keepalived -y
2、修改配置文件
cd /etc/keepalived/
vim keepalived.conf
需要修改的为:
vrrp_instance VI_1 { #定义一个vrrp协议的实例 名字叫VI_1 第一个vrrp实例
state MASTER #做master角色 可以修改为backup(大写)
interface eth33 #指定监听网络的接口,其实就是vip绑定的
virtual_router_id 55 #表示的是虚拟路由器的id 可以随便修改 但是两边必须一样
priority 100 #优先级 0~255 越大越有可能成为master
advert_int 1 #宣告消息的时间间隔 1s
authentication {
auth_type PASS #密码认证
auth_pass 1111 #具体密码
}
virtual_ipaddress { #vip 虚拟IP地址 自己定义 自己的网段如192.168.2.222
192.168.200.16
192.168.200.17
192.168.200.18
}
}
也需要关闭 # vrrp_strict (在global_defs里面) (可以自行去寻找它的意思)
此外:
还需要给另一个负载均衡器下载keepalived,并且为其修改配置,做为 backup 角色
3、运行keepalived
service keepalived restart
4、检查是否运行成功
ps aux|grep keepalived
三个进程:
一个父进程,负责监控子进程
一个是vrrp子进程,另外一个是checkers子进程
我们能在LB1负载均衡服务器上看到自己定义的vip
当我们访问vip的时候,vrrp协议就会自动帮我们转接到master角色的负载均衡器上去
vip是虚拟的ip地址,真正对外提供服务的IP地址,可以告诉用户的
什么是vip漂移呢?
如果当master 挂了, vip会漂到backup角色的负载均衡器上去
但是当master又修好了,vrrp协议会重新选定master角色,然后vip再漂移到对应的master上面去
如何实现vip漂移呢?
如在master上关闭一下keepalived服务就可以了,然后在backup上通过ip add查看是否存在vip地址
什么是脑裂?
就是多台LB上都有vip地址,也就是出现了多个master。
出现的原因是:
- 防火墙阻止了keepalived的vrrp消息的通告(网络通信问题)。
- virtual_router_id不一样的时候。
- 认证密码不一样也会出现脑裂
例如:我可以设置一个防火墙来阻止master接收vrrp消息
[root@mysql ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@mysql ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT #设置tcp的22号端口可以通信
[root@mysql ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@mysql ~]# iptables -P INPUT DROP #默认设置拒绝了其他协议和数据的进入
[root@mysql ~]# iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@mysql ~]#
下面是还原iptables的设置
[root@mysql ~]# iptables -P INPUT ACCEPT #重新设置默认规则为ACCEPT
[root@mysql ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@mysql ~]# iptables -F #清除iptables的规则
[root@mysql ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@mysql ~]#
这样就会导致出现了多台负载均衡器出现了相同的vip地址
脑裂的危害和好处(从两个原因来分析)
出现脑裂的原因:
- 防火墙阻止了keepalived的vrrp消息的通告
后果:会导致80端口不能够访问,则是会有危害和影响的
- virtual_router_id不一样的时候
后果:在虚拟IP访问正常的情况下,对于web服务器上没有危害,反而还有好处,起到负载均衡的作用。
但是脑裂恢复的时候,还是会有短暂的影响的,会短暂的中断服务,影响业务
出现了脑裂现象的时候,怎么确定访问的是哪一台负载均衡服务器呢。
这种情况是对于VRID不同而出现的脑裂的情况来说的,因为若是防火墙导致出现的脑裂,则不可以访问web服务。
方法:查看客户机里的arp缓存表,查看192.168.29.188对应的mac地址。vip会使用真是机器的ens33接口上的mac地址。通过mac地址来判断我们的客户机使用的是哪一台机器上的vip。
[root@ngingx-kafka01 ~]# curl 192.168.29.199 # 使用别的机器来访问虚拟地址 查看对应的MAC地址
[root@ngingx-kafka01 ~]# arp -a
? (192.168.29.99) at 00:0c:29:4c:e5:16 [ether] on ens33
? (192.168.29.30) at <incomplete> on ens33
? (192.168.29.1) at 00:50:56:c0:00:08 [ether] on ens33
gateway (192.168.29.2) at 00:50:56:ee:e5:6d [ether] on ens33
? (192.168.29.52) at <incomplete> on ens33
nginx-kafka03 (192.168.29.128) at 00:0c:29:16:6a:88 [ether] on ens33
? (192.168.29.199) at 00:0c:29:4c:e5:16 [ether] on ens33 #由这里可以得知是访问的99这台负载均衡服务器的
nginx-kafka02 (192.168.29.155) at <incomplete> on ens33
# 但是我们又用不同的机器后面测试了,发现这个访问哪台机器是随机的。
底层原因:当我们一台客户机访问虚拟地址,知道IP(192.168.29.199)不知道mac地址,就会发arp广播。哪台配置的VIP的机器先响应了客户机,客户机就会使用哪台机器的VIP对应的mac地址。所以这种情况出现的脑裂,访问就有了随机性,而且不受运维人员控制的。
另外arp缓存表是动态的,所以隔一段时间后,我们再用相同的机器访问虚拟IP地址,得到的mac地址可能会一样,也可能会不一样。
干预脑裂现象
- 硬件、网线冗余
- 脚本检测(检测arp包,拿mac地址,若是有两个就是出现了脑裂现象)
脑裂是因为考虑不周或者误操作导致,我们一般不去故意制造脑裂。另外我们可以使用arping来检测是否一个虚拟IP被两个机器使用。
四、单vip架构 和 双vip架构
1、单vip架构:只有master上有vip, backup上没有vip, 这个时候master会比较忙,backup机器会比较闲,设备使用率比较低
2、双vip架构:启动2个vrrp实例,每台机器上都启用2个vrrp实例,一个做master,一个做backup,启用两个vip,这会导致每台机器上都会有一个vip,这两个vip都对外提供服务,这样就可以避免单vip情况下,一个很忙,一个很闲。所以说双vip架构可以提升设备的使用率的。
在配置文件中复制一个vrrp配置,改名为VI_2 并且改为BACKUP,vip为192.168.227.199 等
另一台也这样配置
刷新服务 service keepalived restart
最后通过ip add 可以查看每台机器上对应的vip
因此,可以说双vip架构可以提升设备的使用率的。