lvs和keepalived

lvs

lvs的主要用处是四层负载均衡。
vip:虚拟ip,路由服务或者真实服务器都可以配置。
failover:故障转移,可以通过arp协议修改路由配置
ipvs:内核模块,lvs的内核实现,属于netfilter模块的子模块
ipvs table:使用ipvsadm更新或删除集群成员。使用调度算法需要和ipvs table配合选择路由。ipvs table记录着每个连接的路由。

调度算法

轮询
加权轮询
最少连接
加权最少连接(默认算法)
基于局部性的最少连接(用于cache服务,连接建立后不想变动,或者缓存就浪费了)
带复制的基于局部性的最少连接(也是cache服务,不过是副本集的cache服务)
目的地址哈希(需要查询静态哈希表中的目的ip地址)
源地址哈希(需要查询静态哈希表中的源ip地址)
最短期望延迟
never queue
overflow-connection

服务掉线重连问题

连接变成0,可能会使所有新连接转发到这台服务,使这台服务短时间内承受很大压力。
解决方法:可以设置掉线的服务器为静默服务。

路由模式

nat模式(网络地址转换):需要两张物理网卡设备,将请求报文的地址替换成自己的面向内网的网卡ip,这个过程又称为ip伪装。流进和流出的数据报文都需要经过nat路由,容易有瓶颈。

dr模式(直接路由):就相当于一个路由器,只是路由的地址是可以负载均衡的。流出的数据报文可以走其他路由器。
dr模式的问题:路由的地址要怎么发给多台服务器中的一个,解决方法就是把多台服务器vip设置成一样,但是有相同vip的机子都会处理arp请求并给出自己的响应,所以需要把服务器的vip设置到lo回环设备上,然后设置忽略arp请求并且关闭lo网卡的arp_announce。由于源地址是cip目的地址是vip,需要从lo网卡发出去,需要设置一条路由规则,将lo网卡经由eth0转发出去。(arp一般15分钟请求一次更新mac/ip列表)

持久化数据和防火墙标记

持久化数据:每个连接断开都不会马上将记录删除,而是维护一个定时器。
防火墙标记:使用防火墙能标志更详细的信息包括协议,端口,并且效率更高。

一主一从架构

在这里插入图片描述

源码解析

1.模块注册函数 ip_vs_init
2.注册子系统 register_pernet_subsys,关键结构体 ipvs_core_ops
3.__ip_vs_init初始ipvs的netns内存空间,并注册hook: nf_register_net_hooks(ip_vs_ops),插入到ip层的hook处理函数的链表头
4.在包经过filtering,forward处理后,执行hook函数 ip_vs_ops->ip_vs_remote_request4
5.执行ip_vs_in处理包。
6.ip_vs_try_to_schedule->conn_schedule处理负载均衡算法
7.tcp执行tcp_conn_schedule->ip_vs_schedule->schedule
8.如果是rr算法,执行 ip_vs_rr_schedule得出目的地址ip_vs_dest。

keepalived

依赖lvs实现负载均衡

进程模型

1.父进程负责创建和监控子进程
2.三个子进程:
一个负责VRRP协议框架
一个负责健康检测和ipvs配置
一个负责bfd(检测两点网络故障)

使用到的内核组件

1.lvs框架:使用getsockopt和setsockopt来获取设置socket
2.netfilter框架:ipvs代码支持nat和伪装
3.netlink接口:网络接口设置和移除vrrp的虚拟ip
4.多播:可根据vrrp多播组进行多播

架构图

在这里插入图片描述

1.io多路复用使用epoll处理调度(thread_make_master启动该master线程)

2.核心组件
通用全局库:html parsing,链表,定时器,vector,string formating,buffer dump,网络工具,监控管理,pid handling,底层tcp L4

checkers:管理真实服务,可添加移除或者改变权重。还包括健康检查,检查结果会决定添加或者移除或者改变权重真实服务器,操作到lvs拓扑中。checkers使用多线程的有限状态机来实现。

vrrp栈(虚拟路由冗余协议栈):独立进程运行,不依赖于lvs,负责直接接管操作,提供底层路由备份,实现了完整的lvs和防火墙的标准以及扩展(vrrp_sync_group扩展管理持久化路由,使用MD5
-96位算法实现ipsec-ah安全的广播交互协议)。

bsd栈:也是独立进程运行,可以被vrrp进程和checker进程作为检查真实服务状态的功能。

system call:主要用来运行自定义健康检查脚本,脚本会被一个fork出来的进程运行。

Netlink Reflector:用来设置vrrp的vip,并且进程间通信(内核到用户空间的通信)也可以使用netlink内核广播。

smtp:通知管理员的邮件协议

ipvs wrapper:使用libipvs封装

健康检查

实现了以下检查形式:
TCP_CHECK,HTTP_GET,SSL_GET,MISC_CHECK(自定义脚本),SMTP_CHECK,DNS_CHECK,BFD_CHECK,UDP_CHECK,PING_CHECK,FILE_CHECK(检查文件变动)

VRRP(故障转移)

vrrp修改vip原理:使用arp广播通知刷新mac/ip列表

use_vmac:使用虚拟mac地址
vrrp_instance instance1 {
state BACKUP
interface eth0
virtual_router_id 250
use_vmac
vmac_xmit_base # Transmit VRRP adverts over physical interface
priority 150
advert_int 1
virtual_ipaddress {
10.0.0.254
}
}

路由策略

NAT:
Tunneling
Direct Routing

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值