1. 博客/

LVS NAT 负载均衡的实现

·208 字·1 分钟
Linux LVS
LVS - This article is part of a series.
Part 1: This Article

什么是LVS
#

LVS: Linux Virtual Server,即Linux虚拟服务器,是一个虚拟的服务器集群系统

LVS集群由VS(Virtual Server)负责调度,RS(Real Server)负责真正提供服务。VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS,实现负载均衡,而且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。 lvs集群的类型:

  • lvs-nat:多目标IP的DNAT(Network Address Translation),通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发—–本文将对nat模式及其实现做详细解释
  • lvs-dr:Direct Routing, LVS默认模式, 通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变
  • lvs-tun:不修改请求报文的IP首部, 在原请求IP报文之外封装一个IP首部, 将报文发往挑选出的目标RS,RS直接响应给客户端
  • lvs-fullnat:通过同时修改请求报文的源IP地址和目标IP地址进行转发,此类型kernel默认不支持

ipvsadm与ipvs:

  • ipvsadm是用户空间的命令行工具,规则管理器,实现用户管理集群服务及RealServer

管理集群服务:增、改、删 增、改:

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

删除:

ipvsadm -D -t|u|f service-address

管理集群上的RS:增、改、删 增、改:

ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [ -w weight] -g: gateway, dr类型,默认 -i: ipip, tun类型 -m: masquerade, nat类型

删:

ipvsadm -d -t|u|f service-address -r serveraddress

  • ipvs是工作于内核空间netfilter的INPUT钩子上的框架,此框架使调度器具备调度转发功能,而调度算法又决定挑选哪个RS进行转发

ipvs 调度算法: 根据其调度时是否考虑各RS当前的负载状态,分为静态方法与动态方法

  • 静态方法:仅根据算法本身进行调度
  • 动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度
ipvs scheduler

LVS-NAT 模式负载均衡的实现
#

NAT模式IP调度流程
#

lvs-nat

客户端向调度器(Director Server,VS)发送请求报文, Director通过将请求报文中的目标地址目标端口修改为某挑出的RS的RIP和PORT实现转发。此模式下请求报文和响应报文都必须经由Director,调度器易于成为系统瓶颈

http服务负载均衡实验–网络拓扑搭建
#

使用VMware搭建实验网络拓扑

网络拓扑
  • 调度器Director要打开核心转发功能

    $ echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

  • RS 网关要指向DIP

  • 配置RS httpd服务并启动

    RS1 –>$ echo “RS1 SRV” > /var/www/html/index.html

    RS2 –>$ echo “RS2 SRV” > /var/www/html/index.html

Director上管理集群服务并测试
#

添加集群服务

$ ipvsadm -A -t 172.16.253.153:80 -s rr       -- -s 指定算法为rr轮询

添加集群的RS

$ ipvsadm -a -t 172.16.253.153:80 -r 192.168.196.155 -m      -- -m指定为nat模式
$ ipvsadm -a -t 172.16.253.153:80 -r 192.168.196.196 -m
$ ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.253.153:80 rr  
-> 192.168.196.155:80           Masq    1      0          0           
-> 192.168.196.196:80           Masq    1      0          0     

客户端测试

$ for i in {1..10}; do curl 172.16.253.153;sleep 1;done
RS1 SRV
RS2 SRV
RS1 SRV
RS2 SRV
RS1 SRV
RS2 SRV
RS1 SRV
RS2 SRV
RS1 SRV
RS2 SRV

从测试结果可以看出,客户端访问VS,调度器按照轮询算法依次转发给RS1、RS2

本文的实验只演示了RR算法,还有其他算法可以选择,同时LVS-nat模式还支持端口映射,以httpd集群服务为例,RS的服务端口也可以是自定义端口(eg: 8080)。后续会更新 关于LVS-DR模式、集群服务合并及LVS高可用性的实现

LVS - This article is part of a series.
Part 1: This Article

Related

如何使用openssl工具创建私有CA
·970 字·5 分钟
Linux CA Openssl
PXE自动化安装CentOS7
·464 字·3 分钟
Linux PXE
yum客户端的配置及yum命令用法
·742 字·4 分钟
Linux Yum