LVS负载基础知识

「这是我参与11月更文挑战的第25天,活动详情查看:2021最后一次更文挑战


LVS基本概述

什么是LVS

LVS的英文全称是Linux virtual server,即Linux虚拟服务器。其实它是一种cluster集群技术,主要用于负载均衡,将用户请求均匀的调度到不同的服务器上执行。

注意:LVS是基于四层IP:PORT的负载均衡。

LVS组成部分

  • ipvs:工作在内核空间,实现集群服务的"调度",借鉴了iptables的实现方式;
  • ipvsadm:工作在用户空间,负责为ipvs内核框架编写规则。定义谁是集群服务,谁是后端服务器,数据包如何调度,调度到哪个节点。

image-20211122164103866

LVS相关名词

接下来我们需要了解LVS中的名词,比如:DS、RS、CIP、VIP、DIP、RIP,通过下面的图来做了解其含义。

image-20211122163805390

名称 详细名称 描述
DS Director Server 目标服务器,即负载均衡器LVS
RS Real Server 真实应用服务,即后端服务器
CIP Client lP 客户端请求lP
VIP Virtual lP 直接面向用户的IP地址,通常为公网IP
DIP Director Server lP 用于与后端RIP通信的IP地址
RIP Real Server IP 后端真实服务器的IP地址

LVS应用场景

腾讯云负载均衡场景示例

阿里云负载均衡场景示例

LVS常见模型

LVS负载均衡模型有NAT、DR、TUN、FULL-NAT,较为常见的模型有NAT、DR,使用最为广泛的模型是DR

NAT模型

NAT:通过修改请求报文的目标IP地址,然后根据算法挑选出某台RS进行转发。(请求进入负载均衡器LVS时做DNAT,后端返回数据报文出负载均衡时做SNAT

DR模型

DR:通过修改请求报文的目标MAC地址,然后根据算法挑选出某台RS进行转发。(请求进入负载均衡器LVS时做MAC地址转换,后端返回数据报文不经过负载均衡,所以无需做转换)

LVS集群命令介绍

  • ipvsadm的用法大概分类如下两类:

    • 管理集群服务(定义负载均衡配置)

    • 管理后端RS(定义负载均衡后端节点的增删改查)

    ipvsadm - Linux virtual server administration
    ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
    ipvsadm -D -t|u|f service-address
    ipvsadm -C
    ipvsadm -R
    ipvsadm -S [-n]
    ipvsadm -a|e -t|u|f service-address -r server-address [options]
    ipvsadm -d -t|u|f service-address -r server-address
    ipvsadm -L|l [options]
    ipvsadm -Z [-t|u|f service-address]
    ipvsadm --set tcp tcpfin udp
    ipvsadm --start-daemon state [--mcast-interface interface] [--syncid sid]
    ipvsadm --stop-daemon state
    
    # COMIMANDS-cluster
            -A		, --add-service			# 添加一个集群服务
            -E		, --edit-service		# 修改已添加的集群服务
            -D		, --delete-service		# 删除虚拟服务
            -C		, --clear				# 清空集群所有规则
            -R		, --restore				# 从文件中恢复集群
            -S		, --save				# 将集群信息报文至文件中
            -L|-l	, --list				# 列出当前集群信息
            -Z		, --zero				# 清空集群计数器
            -n								# 数字格式显示ip和port,注意-n只能写在-L之后
    # COMMANDS-RS
            -a		, --add-server			# 表示要添加RS节点
            -e		, --edit-server			# 表示要修改RS节点
            -d		, --delete-server		# 表示要删除RS节点
            -t		, service-address		# 指定操作哪个节点地址与端口
    # host[:port],tcp协议
    		-u		, service-address		# 指定操作哪个节点地址与端口
    # host[:port],udp协议
            -r		, --real-server			# 指定RS节点地址与端口
            -w		, --weight				# 指定RS节点的权重
            -m		, --masquerading		# 指定LVS工作模型(NAT模型)
            -g		, --gatewaying			# 指定LVS工作模型(DR模型)
            -i		, --ipip				# 指定LVS工作模型(tun模型)
            -s		, --schedu1er			# 指定LVS调度策略,默认为wlc
            -p		, --persistent			# 持久连接超时时间
            -f		, --fwmark-service		# 防火墙标记
            -c		, --connection			# 显示ipvs连接信息
    复制代码