LVS 负载均衡

一、概述

LVS (Linux Virtual Server),Linux 虚拟服务器。

它是一个虚拟的服务器集群系统,现在 LVS 已经是 Linux 内核标准的一部分

本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。

使用LVS可以实现负载均衡服务器集群的搭建

百科

官网: http://www.linuxvirtualserver.org/

1.相关名词:

DS :Director Server (负载均衡服务器)

RS :Real Server (真实提供服务的服务器)

VIP:Virtual IP (虚拟IP)

CIP: Client IP (客户端IP)

2.LVS组成

① ipvs

ip virtual server ,工作在内核中,负载均衡调度代码

内核,负载均衡调度代码)

② ipvsadm

ipvs管理器,工作在用户空间,负责提供集群/Real Server后端服务器等信息,用来定义集群服务和后端真实的服务器(Real Server)

3.工作模式

① NAT模式

② DR模式(使用量最大)

③ Tun模式,IP隧道模式

二、LVS 调度算法

参考:http://zh.linuxvirtualserver.org/node/2903

1.静态调度 Fixed Scheduling Method

① RR 轮询(常用)

按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

② WRR 加权轮询(常用) => weight

RR轮询的基础,增加权重

③ DH 目标地址hash

④ SH 源地址hash => 类似ip_hash => 常用:解决session共享问题

2.动态调度 Dynamic Scheduling Method

① LC 最少连接(常用)
调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。

② WLC 加权最少连接(常用)
在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

③ SED 最少期望延迟

④ vNQ 从不排队调度方法

⑤ LBLC 基于本地的最少连接

⑥ LBLCR 带复制的基于本地的最少连接

三、ipvsadm

LVS 管理工具

yum install ipvsadm -y

使用:

ipvsadm [options]
#删除RS
ipvsadm -d -t 10.1.1.100:80 -r 10.1.1.31
#重新制定负载均衡算法
ipvsadm -E -t 10.1.1.100:80 -s wrr

选项说明:

选项描述
-A添加一个虚拟服务
-t配置虚拟机服务的地址
-s负载均衡调度算法
-a增加一个RS真实服务器
-r正式服务器地址
-C消除所有规则
-w权重
-mNAT 工作模式
-gDR 工作模式

规则备份

服务器重启后,配置的规则将会丢失,所以我们需要对规则进行备份

#备份
ipvsadm -S > /tmp/lvsrules
#还原
ipvsadm -R > /tmp/lvsrules

四、NET模式

1.介绍

特性

请求和响应报文都需要经过Director Server,高负载场景中,Director Server易成为性能瓶颈

支持端口映射

RS可以使用任意操作系统

缺陷:对Director Server压力会比较大,请求和响应都需经过director server

要求

RS应该使用私有地址,RS的网关需要指向DIP

DIPRIP需要在同一个网段

2.NET 配置

环境准备:

IP描述
10.1.1.38
10.1.1.100 (VIP)
lvs (DS)
10.1.1.31web01 (RS)
10.1.1.32web02 (RS)

①DS配置调度:

#定义VIP
ifconfig ens33:0 10.1.1.100 broadcast 10.1.1.100 netmask 255.255.255.255 up
#1.定义一个集群服务,并指定负载均衡算法
ipvsadm -A -t 10.1.1.100:80 -s rr
#2.添加 RealServer
ipvsadm -a -t 10.1.1.100:80 -r 10.1.1.31 -m
ipvsadm -a -t 10.1.1.100:80 -r 10.1.1.32 -m
#3.开启IP转发功能 
    #编辑配置文件
    vim /etc/sysctl.conf
    #添加如下内容
    net.ipv4.ip_forward=1
    #生效
    sysctl -p
#4.查看规则
ipvsadm -L -n

脚本修改:

#!/bin/bash
vip=10.1.1.100
port=80
ipvsadm -A -t $vip:$port -s rr
ipvsadm -a -t $vip:$port -r 10.1.1.31 -m
ipvsadm -a -t $vip:$port -r 10.1.1.32 -m
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p

②RS配置网关:

route del default 
route add default gw 10.1.1.38

四、DR模式

1.介绍

特性

所有的请求报文经由DS,但响应报文不需要通过DS(直接返回到客户端)

RS可以使用私有地址;也可以是公网地址,如果使用公网地址,此时可以通过互联网对RIP进行直接访问

不支持地址转换,也不支持端口映射

所有的请求报文经由Director Server,但响应报文必须不能进过Director Server

缺陷:RS和DS必须在同一机房中

要求

RSlo接口配置VIPIP地址

RSDS必须在同一个物理网络

③保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS

④RS的网关绝不允许指向DIP(因为我们不允许他经过director)

2.DR 配置

环境准备:

IP描述
10.1.1.38
10.1.1.100 (VIP)
lvs (DS)
10.1.1.31web01 (RS)
10.1.1.32web02 (RS)

①DS配置调度:

#配置VIP
ifconfig ens33:0 10.1.1.100 broadcast 10.1.1.100 netmask 255.255.255.255 up
route add -host 10.1.1.100 dev ens33:0
#开启转发
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p
 
#配置转发规则
ipvsadm -A -t 10.1.1.100:80 -s rr
ipvsadm -a -t 10.1.1.100:80 -r 10.1.1.31 -g
ipvsadm -a -t 10.1.1.100:80 -r 10.1.1.32 -g

②RS配置:

#配置VIP
ifconfig lo:0 10.1.1.100  broadcast 10.1.1.100 netmask 255.255.255.255 up
route add -host 10.1.1.100 dev lo:0

#抑制VIP响应,否则会出现脑裂
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
Last modification:February 26th, 2020 at 05:59 pm