阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

深入理解Keepalived+LVS

497次阅读
没有评论

共计 5595 个字符,预计需要花费 14 分钟才能阅读完成。

深入理解 Keepalived+LVS

keepalived 篇:

master 和 bakeup 之间的通信(vrrp 协议)
master : 172.25.88.1
bakeup :172.25.88.2

1. 在 matser 上抓 vrrp 的包
[root@server1 ~]# /etc/init.d/keepalived start
Starting keepalived:                                      [OK]
[root@server1 ~]# tcpdump vrrp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
15:07:23.710761 IP 172.25.88.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 188, prio 102, authtype simple, intvl 1s, length 20
15:07:24.711710 IP 172.25.88.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 188, prio 102, authtype simple, intvl 1s, length 20
15:07:25.712926 IP 172.25.88.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 188, prio 102, authtype simple, intvl 1s, length 20
15:07:26.713916 IP 172.25.88.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 188, prio 102, authtype simple, intvl 1s, length 20
15:07:27.714890 IP 172.25.88.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 188, prio 102, authtype simple, intvl 1s, length 20
发现 master 在向 224.0.0.18 发送广播包,分析包文的值优先级为 102,是我们的 master

2. 在 bakeup 上抓 vrrp 的包
[root@server2 ~]# /etc/init.d/keepalived start
Starting keepalived:                                      [OK]
[root@server2 ~]# tcpdump vrrp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
15:07:38.022848 IP 172.25.88.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 188, prio 102, authtype simple, intvl 1s, length 20
15:07:39.023899 IP 172.25.88.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 188, prio 102, authtype simple, intvl 1s, length 20
15:07:40.024861 IP 172.25.88.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 188, prio 102, authtype simple, intvl 1s, length 20
15:07:41.025770 IP 172.25.88.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 188, prio 102, authtype simple, intvl 1s, length 20
15:07:42.026831 IP 172.25.88.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 188, prio 102, authtype simple, intvl 1s, length 20
由此发现,master 工作时,bakeup 不发送 vrrp 包,只是接受并返回 master 的包

3. 将 master 的 keepalived down 了
[root@server1 ~]# /etc/init.d/keepalived stop
Stopping keepalived:                                      [OK]
再次抓包

[root@server1 ~]# tcpdump vrrp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
15:22:43.293115 IP 172.25.88.2 > 224.0.0.18: VRRPv2, Advertisement, vrid 188, prio 52, authtype simple, intvl 1s, length 20
15:22:44.293714 IP 172.25.88.2 > 224.0.0.18: VRRPv2, Advertisement, vrid 188, prio 52, authtype simple, intvl 1s, length 20
15:22:45.294471 IP 172.25.88.2 > 224.0.0.18: VRRPv2, Advertisement, vrid 188, prio 52, authtype simple, intvl 1s, length 20
由优先级 prio 52 可知,现在已经是 bakeup 在组播 vrrp 包。

总结:master 只发不收,bakeup 反之
其他主机也收不到 vrrp 包,因为有 route_id 限制
 
关于接管

BACKUP 在确认没有收到 MASTER 的广播报文后,会主动发送组播报文,声明自己的 keepalived 状态,随后启用 VIP。正式接管 keepliaved。

关于谁来当 master

1. 当两个 state 均为 master 时,prio 大的为 master
2. 当两个 state 均为 master 时且 prio 优先级相同时,双方都认为自己是 master,双方会出现抢占 ip 的情况,导致地址冲突。
 
特殊说明

1. 实现不回切 bakeup

vim /etc/keepalived/keepalived.conf

29    no preempt      非抢占模式
30    priority 150    且 proi 要比 master 大,我的 master 的 proi 为 100

2. 主备的 virtual_router_id 要相同,否则都会发组播报文

virtual_router_id 188
 
LVS 篇

lvs-why

传统:DNS 负载均衡缺点:

1. 服务调度算法只支持 WRR 
2. 攻击防御能力很弱,每次有攻击靠一台机器抗。
3. 如果 server 宕了, 运维就只能把 server 的 ip 从 DNS 中删除, 但 localDNS 有大量的缓存, 至于删除操作什么时候生效不可控.

工作机制

我们都知道 netfilter 加载 iptables 模块,实现了防火墙。

其实 lvs,就是 netfilter 加载 ipvs 模块实现的!

lvs 分为 ipvs(内核)和 ipvsadm(用户空间)两部分:

用户用过 ipvsadm 编写策略,而内核加载 ipvs 在 netfilter 生效!

ipvs 结合 input 链(钩子函数在链上)工作,发现用户请求的是一个集群服务,就转发至 forward,转发至 postrouting 链,进入 RS(后端服务器)。

类型

1.nat 地址转换
定义:多目标的 dnat(目标地址转换)
cip->vip->rip->vip->cip

深入理解 Keepalived+LVS

进出的连接都要经过 DS,DR 压力大,只能负载均衡 10 个 rs 左右。

rule:

)DR 和 RS 必须在同一个网络中。
2)RS 网关指向 DIP,因为 DR 要修改目的地址由 VIP->RIP
3)RIP 为私有地址,仅用于集群通信。
4)DR 位于 client 和 real server 之间,负责处理所有通信,亚历山大,成为瓶颈。
5)DR 支持端口映射。
6)RS 可以使用任意系统
7) NAT 模式可以防 DDOS

2.dr 直接路由

原理:DS 在数据链路层直接修改 mac 地址,源 IP 和目标 IP 都没有改变

深入理解 Keepalived+LVS

只有进入的连接经过 DS,能负载均衡 100 个 rs 左右。
DS:dip,vip
RS:rip,vip
vip 是隐藏的,仅仅作为源地址不通信。可以配置在 lo 上,或者设置 arp 防火墙,
通信还是靠 rip 所在的网络设备

rule:

1)DR 和 RS 必须在同一个物理网络中(同一网段)
2)RS 一定网关不能指向 DIP。
3)RIP 不一定是私有地址,可以 ssh 上来管理,但有危险。
4)DR 仅处理入栈请求,响应报文由 RS 发往 client。
5)DR 不支持端口映射,因为请求端口的时候,RS 直接响应。
6)RS 可以使用大多数操作系统,因为 RS 要隐藏 vip。。

3.tun 隧道

基本同 DR,但转发的时候,要封装隧道,再添加一个 ip 首部。

rule:

1)DR 和 RS 必须可以跨越互联网
2)RIP 必须是公网地址
3)DR 仅处理入栈请求,响应报文由 RS 发往 client。
4)响应报文一定不能通过 DR
5)不支持端口映射 6)RS 必须支持隧道协议 OS4.fullnat

调度算法(schedule method)

分为静态和动态:动态则考虑服务器的负载。

静态调度算法(4 个)

    1.rr(轮叫调度)

    2.wrr(加权轮叫)

    3.sh(源地址哈希):基于 session 的会话绑定。一个用户访问过某个 RS,下次访问就由这个 RS 给他提供服务。

    4.dh(目的地址哈希):不同用户,相同的访问需求,就访问同一个 RS。

活动链接(active):客户与服务器建立连接并且有数据传送

非活动链接(inactive):只是建立连接,没有数据传送,没有断开连接

动态调度算法(6 个)

1.lc(最少链接):

算法:active*256 + inactive

因为在实际生产环境中,inactive 的数量是巨大的,所以不能忽略

2.wlc(加权最少链接)LVS 的默认算法   

算法:active*256+inactive)/weight        比 lc 多考虑了权重

3.sed(最短期望延迟)

基于 wlc 算法,避免 wlc 出现的问题。

算法:(active+1)*256/weight(活动的连接数 +1)*256/ 除以权重  谁小发给谁

4.nq(用不排队)

谁的链接数为 0,直接将请求发送给他,一般和 sed 结合使用,因为有些机器即使空着也调度不到他。

5.LBLC(基于本地的最少连接)类似于 dh,目标地址 hash

这个算法主要用于 Cache 集群系统,因为 Cache 集群的中客户请求报文的目标 IP 地址的变化,将相同的目标 URL 地址请求调度到同一台服务器,来提高服务器的访问的局部性和 Cache 命中率。从而调整整个集群的系统处理能力。但是,如果 realserver 的负载处于一半负载,就用最少链接算法,将请求发送给活动链接少的主机。

6.LBLCR(带复制的基于本地的最少链接)

该算法首先是基于最少链接的,当一个新请求收到后,一定会将请求发给最少连接的那台主机的。但这样又破坏了 cache 命中率。但这个算法中,集群服务是 cache 共享的,假设 A 的 PHP 跑了一遍,得到缓存。但其他 realserver 可以去 A 那里拿缓存,这是种缓存复制机制。

各种术语

DS:Director Server。前端负载均衡调度器。

RS:Real Server。后端真实工作的服务器。

VIP:向外部直接面向用户请求,作为用户请求的目标的 IP 地址。

DIP:Director Server IP,主要用于和服务器内部通讯的 IP。

RIP:Real Server IP,后端真实服务器的 IP 地址。

CIP:Client IP,客户端的 IP 地址。

端口映射:如用户访问 80,可在 RS 上服务实际工作在 8080。(只有 dnat 支持)

一些关于 Keepalived 相关教程集合

CentOS 7 下 Keepalived + HAProxy 搭建配置详解  http://www.linuxidc.com/Linux/2017-03/141593.htm

Keepalived 高可用集群应用场景与配置 http://www.linuxidc.com/Linux/2017-03/141866.htm

Nginx+Keepalived 实现站点高可用  http://www.linuxidc.com/Linux/2016-12/137883.htm

Nginx+Keepalived 实现站点高可用(负载均衡)  http://www.linuxidc.com/Linux/2016-12/138221.htm

构建高可用集群 Keepalived+Haproxy 负载均衡 http://www.linuxidc.com/Linux/2016-12/138917.htm

CentOS6.5 下 Keepalived 高可用服务单实例配置 http://www.linuxidc.com/Linux/2016-12/138110.htm

Keepalived 安装与配置 http://www.linuxidc.com/Linux/2017-02/140421.htm

Linux 下 Keepalived 服务安装文档  http://www.linuxidc.com/Linux/2017-03/141441.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-04/142456.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计5595字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7997413
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛 NAS-8:有了 NAS 你可以干什么?软件汇总篇 前言 哈喽各位玩友!我是是星哥,不少朋友私...
【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024 程序员】我劝你赶紧去免费领一个 AWS、华为云等的主机 每年 10 月 24 日,程序员们都会迎来...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
升级自动部署更新SSL证书系统、申请godaddy的APIKEY

升级自动部署更新SSL证书系统、申请godaddy的APIKEY

升级自动部署更新 SSL 证书系统、申请 godaddy 的 APIKEY 公司之前花钱购买的 ssl 证书快...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装 2026 年最强个人助理 ClawdBot、完整安装教程 一、前言 学不完,根本学不完!近期,一款名...