链路与应用负载
为什么需要负载:
如今越来越多的服务选择上云 加入到互联网 方便人们的使用 人们对服务的访问质量要求更高
对于高可靠性:
-
电源:
往往采取双电源模式 当电源出现故障 网络不会陷入瘫痪 -
线路:
有静态聚合 将多条线路逻辑变成一条线路 数据包会负载均衡的形式从多条逻辑成一条的链路上传递
有动态聚合 著名的lacp协议 实现n条链路转发数据 另外m条用于备份防止前n条断连 -
设备:
vrrp(v1,v2)虚拟路由冗余协议: 即多台设备对同一个地址进行抢占静默双机:两台设备 配置基本一致 由ha口进行保活以及配置信息传递 备份状态的设备不会发出任何数据包 当主机失联 备机会代替主机并发送免费arp将对应ip地址的mac解析到本机上
集群: 即多台设备连接同一台交换机构成一个设备集群 通过连接保活交换机 组播保活数据包 同步配置等 对于一个业务只能有一台设备做主机 对于不同业务可以选择不同主机负责
以上都是实现高可靠的方式 能提高网络中链路设备的可用性 但不够灵活 比如链路聚合时 哪条链路走什么数据流量 是不能够被管理员灵活操作的
此时就需要链路负载
而对不同的应用服务 我们也希望能统一规划路径 此时就需要应用负载 对不同服务动态的调度流量 就像是操作系统中的cpu分配内存
负载均衡就像是网络中的cpu 负责调度流量到合适的设备
链路负载:
常用配置:

如图为本次的实验环境

此网卡为vpn分发的网卡 没有网关 但有一条默认路由 我们如果想要访问电信/联通资源 需要指定网关 并且由于远端服务器不存在到学员主机的路由 需要源nat实现路由互通

终端设备的网关写到负载 负载的下一跳有两条链路 传统的方式会写入两条路由 会导致等价路由 此时会负载均衡 主机发出的包一部分走电信 一部分走联通 当两条链路带宽或者其他不一致时 会导致丢包 而且灵活性很差
链路负载就是为了更加灵活更加全面的利用链路

上图中增加了两个链路对象 配置健康监测后会对该链路的可用性进行测试 网关则是为了实现连通性 优先级是对链路优先顺序进行排序 该数值越小越优先类似于路由表中的开销值 权重则是在调度算法中需要用到的参数
健康检查:

流量调度:

加权最小链接 可以将权重理解为比值: 比如权重为2:3 当网络中存在6台主机访问时在同等优先级情况下最终会形成2:4的局势 原因是3:3=1 2:4=0.5 2:3=0.67 2:4比3:3更接近0.5
链路的配置就类似于配置了两条静态路由 不过加入了流量调度 健康检查等机制 可用性大大提高
dns解析策略:
回忆下我们访问web页面的步骤 我们输入一个域名 域名的组成从右向左分别是 顶级域名 一级域名 二级域名 在最右侧其实存在一个根域名. 所以一个url的组成如下:
www.baidu.com.www为二级域名,百度为一级域名,com为顶级域名,.为根域
当客户端对一个url发起请求时 如果本地hosts文件没有域名对应地址 会先访问本地dns服务器
在客户端看来:
本地dns服务器收到一个域名 并通过不断访问其他域名服务器解析到ip地址 总体上讲是一个递归的过程 就是将大事件分解为小步骤然后从最小的开始逐步解决 比如www.baidu.com 这个网址首先找.再找.com再是baidu.com.最后得到www.baidu.com.整个的信息
在本地dns服务器看来:
本地dns服务器先访问根域服务器得到顶级域的地址,然后在顶级域名服务器查询二级域名服务器的地址,如此循环往复 得到最终对应url的地址 整体上看是一个循环的过程
存在dns投毒 原因是当dns服务器回应对应域名的地址时该记录会被存储到域名服务器中 而dns响应包不会做身份认证 任何对象都能发出dns响应数据包 当本地主机不断发出dns响应时 会导致本地的域名服务中的解析记录被替换从而将域名解析到恶意服务器劫持流量或者监听
dns也可以实现ddos攻击由于其请求数据包小 而响应过程复杂 可以利用请求包修改源地址 通过响应数据包对目标主机进行拒绝服务攻击
我们也可以通过控制dns的解析结果控制客户端访问服务器的链路

源地址是限制该条目的生效目标 当地址与该地址一致时才会返回a记录
dns的记录类型有 a记录 aaaa记录 mx记录 ptr记录 cname记录 soa记录等记录信息
其中轮询类似于操作系统轮询 123 3个服务器 首先问第一个服务器 如果空闲那就分配给第一个服务器以此类推 回复选项 dns返回的记录可以不止一条 服务器写的记录可以不止一条
ip是域名解析后得到的ip ttl就是记录在本地存活的时间 关联链路后 当该链路出现故障dns服务器就不会将该域名解析到对应的服务器ip地址

这个较为简单就是负载设备劫持用户的dns请求 如果匹配到了dns策略 那就返回策略对应的记录
dns透明代理
dns策略是通过修改dns响应包 返回对应想要解析的记录
dns透明代理就是通过直接修改dns请求的目标实现的 比如我访问8.8.8.8的53端口会被修改为访问61.132.163.68dns服务器

如图 我可以修改配置现在的dns服务器被修改到了39.0.0.251 当访问的入接口为vlan-if 51时会触发策略的匹配 匹配到的数据包 dns目标服务器被修改到39.0.0.251
应用负载:
应用负载是针对四层传输层的负载均衡 可以通过检测IP地址 端口将请求分配给不同的服务器 提高服务器的可用性
常见的组网方式有:
- 单臂组网
设备传输数据将先引流到负载设备 由于tcp三次握手需要地址稳定 而单臂组网会导致来回路径不一致 负载设备需要进行源nat 将源地址转换为负载设备的地址 以成功建立会话 与两侧设备都建立会话会话成功建立后 正常转发数据 - 串型组网
较为简单的组网形式 就是在负载设备后串上服务器 直接进行调度 这种方式由于来回路径不会发生变化 不需要进行地址转换 直接调度形式简单 但是容易单点故障 - 三角组网
架构与单臂一致 但是数据传输路径像是一个三角形 不需要nat 客户端请求负载设备漂浮地址 负载设备直接进行分配 服务器收到数据包 此时发现目标不为自己会丢弃 这时就需要服务器配置环回地址 且该地址与负载设备的漂浮地址一致 通过以上手段 可以使得服务器能够接受数据包并参与路由转发 并且全程使用漂浮地址与客户端建立链接
常见的算法有:
- 轮询算法:适用于服务器性能基本一致的情况 负载进行轮询 能够进行数据处理的设备会得到数据 最终的结果趋近于1
- 加权轮询:适用于服务器性能有参差的情况 负载进行轮询 优先轮询权值大的设备 最终的结果趋近于权值的比值
- 最小流量:适用于服务器性能基本一致 但是单个数据包流量大小很不一致的情况 比如视频会议 流量最小的设备会得到较多的链接
- 最小连接:使用与服务器性能基本一致的情况 最终的值会趋近于定值1 会话表中链接最少的设备会得到链接
===未完