高可用,少不了影子节点!

开发 架构
无论你后端的服务部署的多么复杂,最后都会聚焦到网关和负载均衡上。比如nginx、HAProxy,更有甚者用上了LVS。但这些负载均衡组件,又是如何能保证它的高可用呢?

[[402051]]

本文转载自微信公众号「小姐姐味道」,作者小姐姐养的狗。转载本文请联系小姐姐味道公众号。

现在的服务,都要求7x24小时不间断运行。就凭这一点,就可以看出机器,比大多数996社畜能熬。

无论你后端的服务部署的多么复杂,最后都会聚焦到网关和负载均衡上。比如nginx、HAProxy,更有甚者用上了LVS。但这些负载均衡组件,又是如何能保证它的高可用呢?

这不得不提一下Keepalived这个组件。使用它,你可以为你的服务,做一个影子节点。使用虚IP漂移的方式,你的服务宕机的时候,影子节点就能够瞬间顶上去,能为原服务的替身。

但大多数时候,它就静静的呆在哪里,什么都不做。真的像一个影子一样。

1. 小小体验一把!

在开始之前,可以使用yum一键安装。keepalived虽然古老但是一直保持更新,最新的版本是2.2.2,让人用起来非常放心。

  1. yum install keepalived -y 

首先,看一下自己机器的网卡。由于我这里用的是虚拟机,然后有多块的网卡,我们选用的是名字叫做enp0s8的一块网卡去做接下来的操作。在命令行输入ip addr就可以找到它。

为了避免额外信息的干扰,我们做了一个干干净净的配置文件,它的位置在/etc/keepalived/keepalived.conf。这个配置文件的意思是,我们将对enp0s8这块网卡,再分配一个192.168.56.128的地址。使得后端的服务,能够通过这个ip地址访问,也能够通过原来的ip地址访问。

  1. global_defs { 
  2.     vrrp_version 3 
  3. vrrp_instance VI_1 { 
  4.     interface                  enp0s8 
  5.     priority                   101 
  6.     virtual_router_id          51 
  7.     advert_int                 1 
  8.     accept 
  9.     garp_master_refresh        5 
  10.     garp_master_refresh_repeat 1 
  11.     virtual_ipaddress { 
  12.         192.168.56.128 
  13.     } 

为了模拟后端的服务,我们使用python命令简单的启动了一个小服务。

  1. python -m SimpleHTTPServer 

然后,把keepalived启动。

  1. systemctl start keepalived 

此时,通过这个新加的ip地址,我们能够访问后端的服务了。

同时,我们再次查看服务器的网卡,发现被绑定的网卡上,已经多了一个虚拟地址。这很好啊,证明了我们第一步操作非常的棒。

2. 让vip做一下漂移!

事实证明,每块网卡上,是可以绑定多个ip地址的。只不过我们平常使用的方式就是绑定一个,所以养成了一个不正确的直观印象。

我们成功的通过keepalived,让网卡多了一个地址。但漂移体现在何方呢?又该如何去做?

为了达到这个目的,我们对刚才的8000端口,做一个高可用的判定。

  1. n=`netstat -ltpn | grep 8000 | wc -l` 
  2.  
  3. if [ $n -eq '0' ]; then 
  4.  echo "start up server" 
  5.  nohup python -m SimpleHTTPServer &  
  6. fi 

把上面的脚本,保存成check.sh,然后放在root目录下。它将在8000端口不再监听的时候,重新把它启动。

我们对keepalived的配置文件,进行一点点微小的改造。

  1. global_defs { 
  2.     vrrp_version 3 
  3.  
  4. vrrp_script check_server { 
  5.     script "/root/check.sh" 
  6.     interval 2 
  7.     weight -20 
  8.  
  9. vrrp_instance VI_1 { 
  10.     state BACKUP 
  11.     nopreempt 
  12.     interface                  enp0s8 
  13.     priority                   101 
  14.     virtual_router_id          51 
  15.     advert_int                 1 
  16.     accept 
  17.     garp_master_refresh        5 
  18.     garp_master_refresh_repeat 1 
  19.     
  20.     track_script { 
  21.     check_server 
  22.     } 
  23.     virtual_ipaddress { 
  24.         192.168.56.128 
  25.     } 

在配置文件中,我们加入了刚才的检查脚本,它将每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的应用也非常广泛,因为它实在是太简单了。典型的使用场景如下,但也有土豪公司会启用多于1个的备份节点。所以keepalived通常会作为负载均衡器的高可用方案。

VRRP全称Vritrual Router Redundancy Protocol(虚拟路由冗余协议)。从上面的示例可以看出,健康检查和失败切换是keepalived的两大核心功能。它的一大特性,就是虚拟,虚拟就是逻辑概念的意思,这个路由器并不存在,而是分散在各个机器上的软路由。

路由又分为主路由(master)和备份路由(backup),正常运行时,master会一直发送vrrp的广播包,告诉别人自己还活着。在发生问题的时候,会通过选举机制进行选举。一般情况下,只有一个backup则选无可选。

它的定期ICMP数据包,是工作在Layer3,也就是IP层的,使用tcpdump可以抓取到它的广播数据。

End

Keepalived应用非常广泛,尤其对于入口端的高可用建设,可以说是必备的。如果你喜欢这样的影子如影随从,或者想要体验替身的感觉,那么Keepalived正好适合你。

作者简介:小姐姐味道 (xjjdog),一个不允许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不一样的味道。我的个人微信xjjdog0,欢迎添加好友,进一步交流。

责任编辑:武晓燕 来源: 小姐姐味道
相关推荐

2021-01-08 13:00:12

CPU处理器软件

2020-02-03 09:29:32

JavaScript代码断点

2023-10-14 15:36:14

PodKubernetes

2023-02-20 14:37:25

2017-07-06 12:58:13

算法MATLAB

2019-08-30 08:51:48

物联网产品盈利物联网

2017-01-03 19:01:33

WIFI网络信号路由器

2022-10-27 15:03:23

2016-07-28 10:34:12

云计算

2023-07-10 08:50:49

ESLint格式化工具

2017-09-14 18:33:29

Python编程语言开发

2018-08-21 16:54:03

显示器

2018-09-04 11:09:58

容灾灾备系统

2017-12-07 10:07:36

容灾备份

2018-03-13 09:00:01

IT架构

2010-09-06 13:30:47

DB2数据库优化

2022-03-19 12:16:49

Redis高并发系统集群部署

2010-08-04 14:49:52

2019-12-16 14:53:44

机器学习人工智能计算机

2016-04-07 10:31:39

Wi-Fi无线部署信锐技术
点赞
收藏

51CTO技术栈公众号