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

深入理解Keepalived+LVS

487次阅读
没有评论

共计 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
文章数
19348
评论数
4
阅读量
7782413
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

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

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

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

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

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

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
免费领取huggingface的2核16G云服务器,超简单教程

免费领取huggingface的2核16G云服务器,超简单教程

免费领取 huggingface 的 2 核 16G 云服务器,超简单教程 前言 HuggingFace.co...
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

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

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...

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

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

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

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件 大家好,我是星哥,很多人都希望能高效地保存微信公众号的文章,用于...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的 Nano Banana Pro?附赠邪修的用法 前言 大家好,我是星哥,今天来介绍谷歌的 ...