本文转载自微信公众号“小姐姐的味道”,作者小姐姐养的狗。转载本文请联系味觉小姐公众号。当前的服务需要7x24小时不间断运行。仅凭这一点,就可以看出机器比大多数996社畜都要好。不管你的后端服务部署有多复杂,最终还是会聚焦在网关和负载均衡上。比如nginx、HAProxy,甚至LVS都有用。但是这些负载均衡组件如何保证它们的高可用呢?不得不提一下Keepalived组件。使用它,您可以为您的服务创建影子节点。使用虚拟IP漂移的方式,当你的服务宕机的时候,影子节点可以瞬间上去,替代原来的服务。但大多数时候,它只是静静地呆在那里,什么都不做。真如影子。1.有点经验!在开始之前,您可以使用yum一键安装。keepalived虽然老了,但是一直保持更新。最新版本是2.2.2,用起来很放心。yuminstallkeepalived-y首先看你机器的网卡。由于我这里使用的是虚拟机,然后有多个网卡,我们选择一个名为enp0s8的网卡进行下一步操作。您可以通过在命令行中键入ipaddr来找到它。为了避免额外信息的干扰,我们做了一个干净的配置文件,它的位置是/etc/keepalived/keepalived.conf。这个配置文件的意思是我们要给enp0s8网卡分配一个地址192.168.56.128。使得后端服务可以通过这个ip地址访问,也可以通过原来的ip地址访问。global_defs{vrrp_version3}vrrp_instanceVI_1{interfaceenp0s8priority101virtual_router_id51advert_int1acceptgarp_master_refresh5garp_master_refresh_repeat1virtual_ipaddress{192.168.56.128}}为了模拟后端服务,我们使用一个小的python命令来简单地启动它。python-mSimpleHTTPServer然后,启动keepalived。systemctlstartkeepalived此时,通过这个新添加的ip地址,我们就可以访问后端服务了。同时我们再次检查了服务器的网卡,发现绑定的网卡上多了一个虚拟地址。那很好,证明我们的第一步是很好的。2.让vip漂流!事实证明,每个网卡可以绑定多个ip地址。只是我们平时的使用方式都是绑定一个,所以形成了一个不正确的直觉印象。我们成功通过keepalived,让网卡多了一个地址。但是漂移体现在哪里呢?以及如何去做?为了达到这个目的,我们刚才对8000端口做了一个高可用判断。n=`netstat-ltpn|grep8000|wc-l`if[$n-eq'0'];thenecho"startupserver"nohuppython-mSimpleHTTPServer&fi将上述脚本保存为check.sh,放在根目录下。当端口8000不再侦听时,它将重新启动它。我们对keepalived的配置文件做一点修改。global_defs{vrrp_version3}vrrp_scriptcheck_server{script"/root/check.sh"interval2weight-20}vrrp_instanceVI_1{stateBACKUPnopreemptinterfaceenp0s8priority101virtual_router_id51advert_int1acceptgarp_master_refresh5garp_master_refresh_repeat1tra??ck_script{check_server}virtual_ipaddress{192.168.56.128}}在配置文件中,我们加入了刚才的检查脚本,它将每2秒时钟检查一次,如果进程死了,则帮助它。如果启动失败,则减20。接下来,我们正式将这个脚本挂载到track_script上。然后,使用非抢占方式nopreempt启动keepalived。做完这些之后,我们再准备一台虚拟机,做同样的配置。除了ip不同,其他都一样。这次是102机器。接下来就可以测试VIP的漂移了。可以进行以下测试。杀掉A机的python进程,vip:8000还能访问,再次拉起python进程杀掉A机的keepalived进程,vip:8000还能访问,可以查看虚拟ip此时机器B。这称为漂移。重复这个过程,你会发现除非机器A和B的keepalived同时挂掉,否则服务无法访问。这样就很好的完成了高可用。3.VRRP当然也有缺点。keepalived是基于vrrp实现的。可以实现高可用,但是不能实现负载均衡(需要结合lvs等其他应用)。同时只有同一台机器对外提供服务,另一台机器空跑,也叫影子节点,是比较大的浪费。尽管如此,keepalived还是被广泛使用,因为它太简单了。典型的使用场景如下,但也有丰富的公司启用了多个备份节点。所以keepalived通常被用作负载均衡器的高可用方案。VRRP的全称是VritualRouterRedundancyProtocol(虚拟路由器冗余协议)。从上面的例子可以看出,健康检查和故障转移是keepalived的两大核心功能。其主要特征之一是虚拟化,这意味着一个逻辑概念。这个路由器不存在,是一个散落在各种机器上的软路由器。路由分为主路由(master)和备份路由(backup)。正常运行时,master会一直发送vrrp广播包告诉别人自己还活着。当出现问题时,将通过选举机制进行选举。一般来说,如果只有一个备份,选择无。它的常规ICMP数据包工作在第3层,即IP层,它的广播数据可以使用tcpdump捕获。EndKeepalived的应用范围很广,尤其是入口端的高可用建设。可以说是一绝。如果你喜欢这种影子追随者,或者想体验一下替身的感觉,那么Keepalived正适合你。作者简介:品味小姐姐(xjjdog),一个不允许程序员走弯路的公众号。专注于基础架构和Linux。十年架构,每天百亿流量,与你探讨高并发世界,给你不一样的滋味。我的个人微信xjjdog0,欢迎加好友进一步交流。
