百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

高可用,少不了影子节点(影子的近义词高端一点)

toyiye 2024-09-03 01:10 4 浏览 0 评论

原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。

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

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

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

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

1. 小小体验一把!

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


yum install keepalived -y

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


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

global_defs {
    vrrp_version 3
}
vrrp_instance VI_1 {
    interface                  enp0s8
    priority                   101
    virtual_router_id          51
    advert_int                 1
    accept
    garp_master_refresh        5
    garp_master_refresh_repeat 1
    virtual_ipaddress {
        192.168.56.128
    }
}

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

python -m SimpleHTTPServer

然后,把keepalived启动。

systemctl start keepalived

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


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


2. 让vip做一下漂移!

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

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

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

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

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

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

global_defs {
    vrrp_version 3
}
vrrp_script check_server {
    script "/root/check.sh"
    interval 2
    weight -20
}
vrrp_instance VI_1 {
    state BACKUP
    nopreempt
    interface                  enp0s8
    priority                   101
    virtual_router_id          51
    advert_int                 1
    accept
    garp_master_refresh        5
    garp_master_refresh_repeat 1
   
    track_script {
	check_server
    }
    virtual_ipaddress {
        192.168.56.128
    }
}

在配置文件中,我们加入了刚才的检查脚本,它将每2秒钟检查一次,如果进程死亡了,那就扶它起来。如果启动失败了,则将权重降低20。

接下来,我们在track_script上,正式挂载上这个脚本。然后,使用非抢占模式nopreempt来启动keepalived。


做好这一切之后,我们再准备一台虚拟机,然后做相同的配置。除了ip的不同,其他的都是一样的。这次是一台102的机器。


接下来,就可以试验vip的漂移了。可以做如下测试。

  1. 杀掉机器A的python进程,vip:8000依然能够访问,python进程会再次被拉起
  2. 杀掉机器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正好适合你。


推荐阅读:


1. 玩转Linux
2. 什么味道专辑

3. 蓝牙如梦
4. 杀机!
5. 架构师BUG,非比寻常

相关推荐

# Python 3 # Python 3字典Dictionary(1)

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,格式如...

Python第八课:数据类型中的字典及其函数与方法

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值...

Python中字典详解(python 中字典)

字典是Python中使用键进行索引的重要数据结构。它们是无序的项序列(键值对),这意味着顺序不被保留。键是不可变的。与列表一样,字典的值可以保存异构数据,即整数、浮点、字符串、NaN、布尔值、列表、数...

Python3.9又更新了:dict内置新功能,正式版十月见面

机器之心报道参与:一鸣、JaminPython3.8的热乎劲还没过去,Python就又双叒叕要更新了。近日,3.9版本的第四个alpha版已经开源。从文档中,我们可以看到官方透露的对dic...

Python3 基本数据类型详解(python三种基本数据类型)

文章来源:加米谷大数据Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在Python中,变量就是变量,它没有类型,我们所说的"类型"是变...

一文掌握Python的字典(python字典用法大全)

字典是Python中最强大、最灵活的内置数据结构之一。它们允许存储键值对,从而实现高效的数据检索、操作和组织。本文深入探讨了字典,涵盖了它们的创建、操作和高级用法,以帮助中级Python开发...

超级完整|Python字典详解(python字典的方法或操作)

一、字典概述01字典的格式Python字典是一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。字典的每个键值key=>value对用冒号:分割,每个对之间用逗号,...

Python3.9版本新特性:字典合并操作的详细解读

处于测试阶段的Python3.9版本中有一个新特性:我们在使用Python字典时,将能够编写出更可读、更紧凑的代码啦!Python版本你现在使用哪种版本的Python?3.7分?3.5分?还是2.7...

python 自学,字典3(一些例子)(python字典有哪些基本操作)

例子11;如何批量复制字典里的内容2;如何批量修改字典的内容3;如何批量修改字典里某些指定的内容...

Python3.9中的字典合并和更新,几乎影响了所有Python程序员

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

Python3大字典:《Python3自学速查手册.pdf》限时下载中

最近有人会想了,2022了,想学Python晚不晚,学习python有前途吗?IT行业行业薪资高,发展前景好,是很多求职群里严重的香饽饽,而要进入这个高薪行业,也不是那么轻而易举的,拿信工专业的大学生...

python学习——字典(python字典基本操作)

字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包含的元素个数不限,值...

324页清华教授撰写【Python 3 菜鸟查询手册】火了,小白入门字典

如何入门学习python...

Python3.9中的字典合并和更新,了解一下

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

python3基础之字典(python中字典的基本操作)

字典和列表一样,也是python内置的一种数据结构。字典的结构如下图:列表用中括号[]把元素包起来,而字典是用大括号{}把元素包起来,只不过字典的每一个元素都包含键和值两部分。键和值是一一对应的...

取消回复欢迎 发表评论:

请填写验证码