精华内容
下载资源
问答
  • lvs

    2020-03-29 23:27:12
    lvs

    1、基本概念

    LVS(Linux Virtual Server)作者为章文嵩博士,是一款传输层负载均衡调度器。

    vs:Virtual Server
    rs:Real Server

    CIP:Client IP
    VIP: Virtual serve IP
    RIP: Real server IP
    DIP: Director IP

    2、工作模式

    2.1 LVS-NAT

    在这里插入图片描述
    当请求报文到达vs,vs修改目的IP:vip→rip,使其能够路由到后端rs
    当响应报文到达vs,vs修改源IP:rip→vip,使vs能够完成代理工作

    我们可知:

    1. vs处理请求和响应报文,所以vs会成为系统瓶颈
    2. 为确保rs能够将报文交给vs,所以rs的网关应指向vs的dip
    3. 在2的前提下,dip、rip和dip应处于同一子网,不能跨网段

    2.2 LVS-DR

    在这里插入图片描述

    当请求报文到达vs,vs修改vmac为rmac地址,经由交换机二层寻址到rs
    rs以vip作为源地址封装,按照正常发包过程到pc

    我们可知:

    1. 响应报文不再经由vs,消除系统瓶颈
    2. 由于报文不在经由vs,所以网关不在指向dip
    3. 由于vs上存在vip,所以rs不能以arp通告vip,防止交换机mac地址震荡
    4. rip和dip应处于同一子网,不能跨网段

    2.3 LVS-TUN

    在这里插入图片描述

    当请求报文到达vs,vs外层封装一层源目IP,通过internet找到rs
    rs解开外层封装IP得到真实地址,直接封装vip和cip,将响应报文通过internet发给pc
    vip、dip、rip处于同一网段

    我们可知:

    1. 通过隧道,即封装IP首部实现跨网段
    2. 由于在internet传输,即dip、rip、vip均为公网地址

    3、调度算法

    3.1 静态方法

    • RR(roundrobin)轮询
      调度器会将所有的请求平均分配给每个服务器,可认为RR是后端rs的权重一样的WRR

    • WRR(Weighted RR)加权轮询
      在RR的基础上添加权重,服务器性能较高的应分配较大权重,调度器转发给其请求更多,即它能处理更多请求

    • SH(Source Hashing)源地址hash
      对请求的源地址进行hash,用于反向代理,保证同一ip的请求总是发往同一后端rs。但由于nat,会导致调度器请求分配不均

    • DH(Destination Hashing)目标地址hash
      对请求的目的地址进行hash,用于正向代理

    3.2 动态方法

    • LC(least connections)最少连接
      动态评估后端rs的连接数,调度器将连接分配给最少连接数的服务器,可认为LC是后端rs权重一样的WLC
      算法:overhead=activeconns*256+inactiveconns
      overhead谁小选谁

    • WLC(Weighted LC)加权最少连接
      在LC的基础上添加权重,服务器性能较高的应分配较大权重,调度器转发给其请求更多,即它能处理更多请求
      算法:overhead=(activeconns*256+inactiveconns)/weight
      overhead谁小选谁

    • SED(Shortest Expection Delay)最短期望延迟
      基于WLC
      算法:overhead=(activeconns+1)*256/weight
      overhead谁小选谁

    • NQ(Never Queue)永不排队
      改进的SED
      后端rs如果有连接数为0的直接分配请求,当后端所有rs的连接数不为0,进行SED

    • LBLC(Locality-Based Least-Connection)基于局部性的最少连接
      动态的DH算法,对目的地址hash,找到对应后端rs,如果该rs没有超载荷,则请求分配给它,如果超载荷,则使用LC选出连接数最少的rs进行分配

    • LBLCR (Locality-Based Least-Connection with Replication)带复制的基于局部性的最少链接
      LBLC算法维护从一个目标IP地址到一台服务器的映射,而LBLCR算法是维护从一个 目标IP地址到一组服务器的映射。对目的地址hash,找到对应的后端服务器组,在按照LC选出组中连接数最少的rs,若该rs未超载,则分配请求;若该rs超载,则从整个集群中按LC找出连接数最小的rs进行分配,并将rs添加进这个组。同时,服务器组一段时间内未修改,则将最忙的服务器从组中删除,以降低复制的程度

    4、管理工具

    ipvs工作在TCP/IP的第四层,与netfilter一样是直接工作在内核。netfilter是使用iptables管理,同样ipvs也有管理工具ipvsadm

    查看内核是否支持ipvs

    [root@node1 ~]# grep -i -A 7 "# IPVS transport protocol load balancing support" /boot/config-4.18.0-147.el8.x86_64 
    # IPVS transport protocol load balancing support
    #
    CONFIG_IP_VS_PROTO_TCP=y
    CONFIG_IP_VS_PROTO_UDP=y
    CONFIG_IP_VS_PROTO_AH_ESP=y
    CONFIG_IP_VS_PROTO_ESP=y
    CONFIG_IP_VS_PROTO_AH=y
    CONFIG_IP_VS_PROTO_SCTP=y
    

    可确认支持TCP、UDP、AH、ESP、AH_ESP、SCTP协议的负载均衡

    [root@node1 ~]# grep -i -A 14 "# IPVS scheduler" /boot/config-4.18.0-147.el8.x86_64 
    # IPVS scheduler
    #
    CONFIG_IP_VS_RR=m
    CONFIG_IP_VS_WRR=m
    CONFIG_IP_VS_LC=m
    CONFIG_IP_VS_WLC=m
    CONFIG_IP_VS_FO=m
    CONFIG_IP_VS_OVF=m
    CONFIG_IP_VS_LBLC=m
    CONFIG_IP_VS_LBLCR=m
    CONFIG_IP_VS_DH=m
    CONFIG_IP_VS_SH=m
    # CONFIG_IP_VS_MH is not set
    CONFIG_IP_VS_SED=m
    CONFIG_IP_VS_NQ=m
    

    查看支持与不支持的调度算法

    4.1 工具安装

    [root@node1 ~]# yum search ipvsadm
    ipvsadm.x86_64 : Utility to administer the Linux Virtual Server
    [root@node1 ~]# yum info ipvsadm
    Name         : ipvsadm
    Version      : 1.29
    Release      : 8.el8
    Architecture : x86_64
    Size         : 57 k
    Source       : ipvsadm-1.29-8.el8.src.rpm
    Repository   : AppStream
    Summary      : Utility to administer the Linux Virtual Server
    URL          : https://kernel.org/pub/linux/utils/kernel/ipvsadm/
    License      : GPLv2+
    Description  : ipvsadm is used to setup, maintain, and inspect the virtual server
                 : table in the Linux kernel. The Linux Virtual Server can be used to
                 : build scalable network services based on a cluster of two or more
                 : nodes. The active node of the cluster redirects service requests to a
                 : collection of server hosts that will actually perform the
                 : services. Supported Features include:
                 :   - two transport layer (layer-4) protocols (TCP and UDP)
                 :   - three packet-forwarding methods (NAT, tunneling, and direct routing)
                 :   - eight load balancing algorithms (round robin, weighted round robin,
                 :     least-connection, weighted least-connection, locality-based
                 :     least-connection, locality-based least-connection with
                 :     replication, destination-hashing, and source-hashing)
    [root@node1 ~]# yum -y install ipvsadm
    Installed:
      ipvsadm-1.29-8.el8.x86_64                                                                                                             
    
    Complete!
    

    程序文件:

    [root@node1 ~]# rpm -ql ipvsadm 
    /etc/sysconfig/ipvsadm-config				#配置文件
    /usr/lib/systemd/system/ipvsadm.service		#服务文件
    /usr/sbin/ipvsadm							#管理工具
    /usr/sbin/ipvsadm-restore					#规则重载
    /usr/sbin/ipvsadm-save						#规则保存
    

    4.2 工具使用

    [root@node1 ~]# ipvsadm -h
    Commands:
      --add-service     -A					添加VS
      --edit-service    -E					编辑VS
      --delete-service  -D					删除VS
      --clear           -C					清空整张表
      --restore         -R					从标准输入重载
      --save            -S					从标准输出保存
      --add-server      -a					添加RS
      --edit-server     -e					编辑RS
      --delete-server   -d					删除RS
      --list            -L|-l				列出整张表
      --zero            -Z					清空计数
      --set tcp tcpfin udp					设置连接超时
      --start-daemon						开启连接同步后台进程
      --stop-daemon							停止连接同步后台进程
      --help            -h					帮助
    
    virtual-service:
      --tcp-service|-t  service-address		服务器地址ip:port,tcp协议
      --udp-service|-u  service-address		服务器地址ip:port,udp协议
      --sctp-service    service-address		服务器地址ip:port,sctp协议
      --fwmark-service|-f fwmark			防火墙标记ipv4
    
    Options:
      --ipv6         -6						防火墙标记ipv6
      --scheduler    -s scheduler			负载均衡算法rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
    										默认wlc.
      --persistent   -p [timeout]			持久连接
      --real-server  -r server-address		RS地址
      --gatewaying   -g						网关(DR)
      --ipip         -i						IP封装(tunneling)
      --masquerading -m						地址伪装(NAT)
      --weight       -w weight				RS的权重
      --u-threshold  -x uthreshold			连接上限
      --l-threshold  -y lthreshold			连接下限
      --connection   -c						输出当前ipvs连接
      --timeout								输出超时时间(tcp tcpfin udp)
      --daemon								输出后台进程信息
      --stats								输出统计信息
      --rate								输出速率信息
      --exact								显示精确信息
      --thresholds							输出阈值信息
      --persistent-conn						输出持久连接信息
      --ops          -o						单包调度
      --numeric      -n						数字格式显示ip和port
    

    4.3 集群管理

    1. 添加集群
    ipvsadm -A -t|u|f service-address [-s scheduler] [-p [timeout]]
    
    1. 查看集群
    ipvs -l [-c] [-n] [--state] [--rate]
    
    1. 修改集群
    ipvs -E -t|u|f service-address [-s scheduler] [-p [timeout]]
    修改时-t|u|f service-address即为选定要修改的server
    
    1. 删除集群
    ipvsadm -D -t|u|f service-address
    

    4.4 RS管理

    1. 添加RS
    ipvsadm -a -t|u|f service-address -r server-address [-g|i|m] [-w weight]
    
    1. 查看RS
    ipvs -l [-c] [-n] [--state] [--rate]
    
    1. 修改RS
    ipvsadm -e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
    
    1. 删除RS
    ipvsadm -d -t|u|f service-address -r server-address
    

    4.5 其他管理

    1. 清空规则
    ipvsadm -C
    
    1. 清空计数
    ipvsadm -Z [-t|u|f service-address]
    
    1. 保存规则
    ipvsadm-save > /PATH/IPVSADM_FILE
    或
    ipvsadm -S > /PATH/IPVSADM_FILE
    
    1. 重载规则
    ipvsadm-restore < /PATH/IPVSADM_FILE
    或
    ipvsadm -R < /PATH/IPVSADM_FILE
    

    5 实验

    5.1 LVS-NAT

    5.1.1 实验环境

    在这里插入图片描述

    5.1.2 VS配置

    1、删除DIP的网关

    GATEWAY IP							#不在网络配置文件中指明网关
    ip route del default via IP			#如果指明网关可删除默认路由
    

    2、打开网络转发

    echo 1 > /proc/sys/net/ipv4/ip_forward
    

    3、ipvsadm配置

    ipvsadm -A -t 10.10.20.10:80 -s wlc
    ipvsadm -a -t 10.10.20.10:80 -r 10.10.10.20:80 -m -w 2
    ipvsadm -a -t 10.10.20.10:80 -r 10.10.10.21:80 -m -w 2
    

    5.1.3 RS配置

    1、添加默认网关

    ip route add default via 10.10.10.10 dev ens33
    

    5.2 LVS-DR

    arp_ignore
    控制收到arp请求时,arp响应的动作

    • 0:响应所有网卡接受到的arp请求,包括lo环回地址
    • 1:只响应目的IP地址为接收网卡上的本地地址的arp请求
    • 2:只响应目的IP地址为接收网卡上的本地地址的arp请求,并且arp请求的源IP必须和接收网卡同网段
    • 3:如果ARP请求的IP地址对应的本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包
    • 4~7:保留未使用
    • 8:不回应所有的arp请求

    arp_announce
    控制系统在对外发送arp请求时,如何选择arp请求数据包的源IP地址

    • 0:允许使用任意网卡上的IP地址作为arp请求的源IP
    • 1:尽量避免使用不属于该发送网卡子网的本地地址作为发送arp请求的源IP地址
    • 2:忽略IP数据包的源IP地址,选择该发送网卡上的本地地址作为arp请求的源IP地址

    在这里插入图片描述

    5.2.1 VS配置脚本

    #!/bin/bash
    
    vip="10.10.10.9"
    vprefix=32
    dip="10.10.10.10"
    vport="80"
    rip=("10.10.10.20" "10.10.10.21")
    weight=("1" "1")
    rport="80"
    sheduler="wlc"
    type="-g"
    iface="net1"
    lockFile="/var/lock/subsys/ipvsadm"
    
    case $1 in
    start)
    	#增加ip地址
    	ip tuntap add mode tap dev $iface &> /dev/null
    	ip addr add $vip/$vprefix dev $iface &> /dev/null
    	ip link set $iface up
    
    	#添加路由
    	ip route add $vip/$vprefix dev $iface &> /dev/null
    
    	#清空防火墙规则
    	iptables -F
    	iptables -X
    	iptables -Z
    
    	#开启ip转发
    	echo 1 > /proc/sys/net/ipv4/ip_forward
    
    	#清空ipvs规则
    	ipvsadm -C
    
    	#添加directory规则
    	ipvsadm -A -t $vip:$vport -s $sheduler
    
    	#添加realserver规则
    	declare count=0
    	for i in ${rip[*]} ; do
    		ipvsadm -a -t $vip:$vport -r $i:$rport $type -w ${weight[$count]}
    		let count++
    	done
    
    	#创建锁文件
    	touch $lockFile
    ;;
    
    stop)
    	#判断服务是否启动
    	if [ ! -e $lockFile ] ; then
    		echo "ipvsadm is stopped"
    	else
    	#删除ip地址
    		ip tuntap del mode tap $iface
    		#ip addr del $vip/$vprefix dev $iface &> /dev/null
    	#关闭ip转发
    		echo 0 > /proc/sys/net/ipv4/ip_forward
    	#清空ipvs规则
    		ipvsadm -C
    	#删除锁文件
    		rm -fr $lockFile
    	fi
    ;;
    
    status)
    	if [ ! -e $lockFile ] ; then
    		echo "ipvsadm is stopped"
    	else
    		echo "ipvsadm is running"
    	fi
    ;;
    
    *)
    echo "Usage: $0 {start | stop |status}"
    exit 1
    ;;
    esac
    

    5.2.2 RS配置脚本

    #!/bin/bash
    
    vip="10.10.10.9"
    vprefix="32"
    iface="net1"
    
    case $1 in
    start)
    	#配置ip
    	ip tuntap add mode tap dev $iface &> /dev/null
    	ip addr add $vip/$vprefix dev $iface &> /dev/null
    	ip link set $iface up
    
    	#配置路由
    	ip route add $vip/$vprefix dev $iface &> /dev/null
    	
    	#关闭arp
    	echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
    	echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
    	echo 1 >/proc/sys/net/ipv4/conf/$iface/arp_ignore
    	echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce
    	echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
    	echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
    ;;
    
    stop)
    	#恢复arp
    	echo 0 >/proc/sys/net/ipv4/conf/lo/arp_ignore
    	echo 0 >/proc/sys/net/ipv4/conf/all/arp_ignore
    	echo 0 >/proc/sys/net/ipv4/conf/lo/arp_announce
    	echo 0 >/proc/sys/net/ipv4/conf/all/arp_announce
    
    	#删除ip
    	ip tuntap del mode tap dev $iface
    ;;
    
    *)
    	echo "Usage: $0 {start | stop |status}"
    	exit 1
    ;;
    esac
    

    5.3 状态检测脚本

    #!/bin/bash
    
    vip="10.10.10.9"
    vport="80"
    dip="10.10.10.10"
    rip=("10.10.10.20" "10.10.10.30")
    weight=("1" "1")
    declare -a status
    rport="80"
    sheduler="wlc"
    type="-g"
    chknum=3
    online=0
    
    #添加rs
    addrs(){
    	ipvsadm -a -t $vip:$vport -r $1:$rport $type -w $2 &> /dev/null
    	if [ $? -eq 0 ]; then
    		let online++
    		return 0
    	else
    		return 1
    	fi
    }
    
    #删除rs
    delrs(){
    	ipvsadm -d -t $vip:$vport -r $1:$rport
    	if [ $? -eq 0 ]; then
    		let online--
    		return 0
    	else
    		return 1
    	fi
    }
    
    #检测rs
    chkrs(){
    	local i=1
    	while [ $i -le $chknum ]; do
    		curl --connect-timeout 1 -I http://$1 &> /dev/null 
    		[ $? -eq 0 ] && return 0
    		let i++
    	done
    	return 1
    }
    
    #初始rs状态
    initrs(){
    	local i=0
    	for r in ${rip[*]}; do
    		ipvsadm -ln | grep "$r:$rport" &> /dev/null
    		if [ $? -eq 0 ]; then
    			status[$i]=1
    	       		let online++
    		else
    			status[$i]=0
    		fi
    		let i++
    	done
    }
    
    initrs
    
    #for s in ${status[*]}; do
    #	echo $s
    #done
    
    while :; do
    	i=0
    	for r in ${rip[*]}; do
    		if chkrs $r; then
    			if [ ${status[$i]} -eq 0 ]; then
    				addrs $r ${weight[$i]}
    				[ $? -eq 0 ] && status[$i]=1
    			fi
    		else
    			echo $i
    			if [ ${status[$i]} -eq 1 ]; then
    				delrs $r
    				[ $? -eq 0 ] && status[$i]=0
    			fi
    		fi
    		let i++
    	done
    
    	if [ $online -eq 0 ]; then
    		ipvsadm -ln | grep "127.0.0.1:80" &> /dev/null
    		[ $? -eq 0 ] ||  ipvsadm -a -t $vip:$vport -r 127.0.0.1:80 $type -w 1
    	else
    		ipvsadm -ln | grep "127.0.0.1:80" &> /dev/null
    		[ $? -eq 0 ] && ipvsadm -d -t $vip:$vport -r 127.0.0.1:80
    	fi
    
    	sleep 1
    done
    
    展开全文
  • LVS

    2020-05-26 10:36:26
    LVSlvs1.lvs 简介2.lvs 特点3.lvs 常见的术语4.lvs 工作原理4.1 lvs-NAT模式4.2 lvs-DR模式4.3 lvs-TUN模式5.lvs 配置 lvs 1.lvs 简介 LVS,是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩...

    lvs

    1.lvs 简介

    LVS,是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目。LVS由用户空间的ipvsadm和内核空间的IPVS组成,ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工作。现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。

    2.lvs 特点

    • 高并发连接:LVS基于内核网络层面工作,有超强的承载能力和并发处理能力。单台LVS负载均衡器,可支持上万并发连接。稳定性强:是工作在网络4层之上仅作分发之用,这个特点也决定了它在负载均衡软件里的性能最强,稳定性最好,对内存和cpu资源消耗极低。
    • 成本低廉:硬件负载均衡器少则十几万,多则几十万上百万,LVS只需一台服务器和就能免费部署使用,性价比极高。
    • 配置简单:LVS配置非常简单,仅需几行命令即可完成配置,也可写成脚本进行管理。
    • 支持多种算法:支持多种论调算法,可根据业务场景灵活调配进行使用
    • 支持多种工作模型:可根据业务场景,使用不同的工作模式来解决生产环境请求处理问题。
    • 应用范围广:因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括http、数据库、DNS、ftp服务等

    3.lvs 常见的术语

    术语解释
    ipvsadm用户空间的命令行工具,用于管理集群服务及集群服务上的RS等
    IPVS工作于内核上的netfilter INPUT HOOK之上的程序,可根据用户定义的集群实现请求转发
    VSVirtual Server ,虚拟服务
    Director, Balancer负载均衡器、分发器
    RSReal Server 后端请求处理服务器
    CIPClient IP,客户端IP
    VIPDirector Virtual IP,负载均衡器虚拟IP
    DIPDirector IP,负载均衡器IP
    RIPReal Server IP,后端请求处理服务器IP

    4.lvs 工作原理

    在这里插入图片描述
    工作原理:

    1. 当客户端的请求到达负载均衡器的内核空间时,首先会到达PREROUTING链。
    2. 当内核发现请求数据包的目的地址是本机时,将数据包送往INPUT链。
    3. LVS由用户空间的ipvsadm和内核空间的IPVS组成,ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工作,IPVS工作在INPUT链上,当数据包到达INPUT链时,首先会被IPVS检查,如果数据包里面的目的地址及端口没有在规则里面,那么这条数据包将经过INPUT链送至用户空间,交给用户空间的进程来处理。
    4. 如果数据包里面的目的地址及端口在规则里面,那么这条数据报文将被修改目的地址为事先定义好的后端服务器,并送往POSTROUTING链。
    5. 最后经由POSTROUTING链发往后端服务器。

    LVS有很多种模式来供我们选择,生产场景中一般使用的都是NAT模式和DR模式,当然,也并不是说其他模式并不会使用,还是要根据实际的生产场景来决定选择什么样的方案。

    4.1 lvs-NAT模式

    Virtual Server via NAT(VS-NAT):用地址翻译实现虚拟服务器。地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址。外界看起来包是来自地址转换器本身,当外界包送到转换器时,它能判断出应该将包送到内部网的哪个节点。优点是节省IP 地址,能对内部进行伪装;缺点是效率低,因为返回给请求方的数据包经过调度器。
    在这里插入图片描述
    工作流程:

    1. 当用户请求到达DirectorServer,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
    2. PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链。
    3. IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP ,在这个过程完成了目标IP的转换。
    4. POSTROUTING链通过选路,将数据包发送给Real Server。
    5. Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP 。
    6. Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP。

    4.2 lvs-DR模式

    Virtual Server via Direct Routing(VS-DR):用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在同一个网段时可以用此方法,控制管理的计算机接收到请求包时直接送到参与集群的节点。直接路由模式比较特别,很难说和什么方面相似,前种模式基本上都是工作在网络层上(三层),而直接路由模式则应该是工作在数据链路层上(二层)。
    在这里插入图片描述
    工作流程:
    客户端的CIP向LVS的VIP发送请求,这里虽然调度器和RS上都有VIP,但是请求报文必须经过调度器,所以RS端需要配置关闭通告,所以只有调度器上的VIP才能接收客户端的请求,LVS服务器(调度器)收到请求后会进行封装,通过算法算出应该把请求发送给后端的哪一台RS服务器,RS服务器收到请求后会解封装,解封装后发现对方找的是VIP,刚好自己有VIP所以会处理请求,处理好请求后将封装成响应报文发送给客户端的CIP,此时不需要经过调度器,源ip为真实服务器的RIP目的IP为客户端的CIP。

    4.3 lvs-TUN模式

    TUN(Virtual Server via IP Tunneling),即IP隧道技术实现虚拟服务器。它跟VS/NAT基本一样,但是Real server是直接返回数据给客户端,不需要经过Diretor server,这大大降低了Diretor server的压力。
    在这里插入图片描述
    工作流程:

    1. 客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。
    2. 负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。
    3. RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡(这个网卡一般指和调度器在一个网段的网卡)直接发送给客户端。注意:需要设置lo接口的VIP不能在公网上出现。

    5.lvs 配置

    - ipvsadm的用法:

    **ipvsadm 的用法和格式如下:**
    
    ipvsadm -A|E  -t|u|f  virutal-service-address:port [-s scheduler] [-p[timeout]] [-M netmask]
    #添加/编辑一条新的虚拟服务器记录。
    ipvsadm -D -t|u|f virtual-service-address
    #删除一条记录
    ipvsadm -C
    #清除所有记录
    ipvsadm -R
    #恢复虚拟服务器规则
    ipvsadm -S [-n]
    #保存虚拟服务器规则
    
    命令选项解释:
    -A   --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也
    就是增加一台新的虚拟服务器。
    -E   --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。
    -D   --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。
    -C   --clear 清除内核虚拟服务器表中的所有记录。
    -R   --restore 恢复虚拟服务器规则
    -S   --save 保存虚拟服务器规则,输出为-R 选项可读的格式
    -s   --scheduler scheduler 使用的调度算法,有这样几个选项
    		rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
    -p   --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客
    户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。
    -M   --netmask netmask persistent granularity mask
    

    - 配置:

    主机名ip服务名
    lvs192.168.206.129负载均衡器
    rs1192.168.206.130后端服务器
    rs2192.168.206.131后端服务器
    **lvs调度器主机:**
    配置之前请先确保虚拟机有ip。
    下载ipvsadm:
    		yum   install  -y  ipvsadm
    配置添加一个vip:
    语法: ifconfig   ens33:0   vip/32  broadcast   vip  up
    	ifconfig   ens33:0 192.168.206.250/32 broadcast  192.168.206.250  up
    
    **rs1主机:**
    配置之前请确保虚拟机有ip。
    配置rip:
    		vim   /etc/sysctl.conf
    加入以下内容:
    		net.ipv4.conf.all.arp_ignore = 1
    		net.ipv4.conf.all.arp_announce = 2
    检查(出现添加内容为成功):sysctl  -p
    配置vip:
    语法: ifconfig   lo:0   vip/32  broadcast   vip  up
    	ifconfig   lo:0 192.168.206.250/32 broadcast  192.168.206.250  up
    
    **rs2主机:**
    配置之前请确保虚拟机有ip。
    配置rip:
    		vim   /etc/sysctl.conf
    加入以下内容:
    		net.ipv4.conf.all.arp_ignore = 1
    		net.ipv4.conf.all.arp_announce = 2
    检查(出现添加内容为成功):sysctl  -p
    配置vip:
    语法: ifconfig   lo:0   vip/32  broadcast   vip  up
    	ifconfig   lo:0 192.168.206.250/32 broadcast  192.168.206.250  up
    		
    **配置路由信息:**
    lvs上:
    语法: route  add  -host  vip  dev  interface:0
    	route  add  -host  192.168.206.250  dev  ens33:0
    rs1上:
    		route  add  -host  192.168.206.250  dev  lo:0
    rs2上:
    		route  add  -host  192.168.206.250  dev  lo:0
    
    **在lvs上执行添加并保存规则:**
    语法:ipvsadm   -A(添加)  -t(tcp) vip:port  -s  wrr(算法)
    	ipvsadm   -A  -t   192.168.206.250:80  -s  wrr
    语法:ipvsadm  -a  -t(tcp) vip:port  -r  rip:port   -g(DR模式)
    	ipvsadm  -a  -t  192.168.206.250:80  -r  192.168.206.130:80  -g  
    	ipvsadm  -a  -t  192.168.206.250:80  -r  192.168.206.131:80  -g
    保存规则:
    		ipvsadm   -S  >  /etc/sysconfig/ipvsadm
    关闭防火墙:
    		systemctl   stop   firewalld
    
    **rs1主机上:**
    		systemctl   stop   firewalld
    		yum  install  -y  httpd
    		cd  /var/www/html
    		echo   "123456789"  >  index.html
    		systemctl   restart  httpd
    
    **rs2主机上:**
    		systemctl   stop   firewalld
    		yum  install  -y  httpd
    		cd  /var/www/html
    		echo   "987654321"  >  index.html
    		systemctl   restart  httpd
    

    - 验证:
    在这里插入图片描述
    多次刷新:
    在这里插入图片描述

    展开全文
  • LVS安装配置说明.pdf

    2021-09-08 19:02:03
    LVS
  • 一、LVS简介 LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系...

    一、LVS简介

           LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如图1所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。最后根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,LVS工作模式分为NAT模式、TUN模式、以及DR模式。


    二、三种工作模式的解析。

    1、基于NAT的LVS模式负载均衡

          NAT(Network Address Translation)即网络地址转换,其作用是通过数据报头的修改,使得位于企业内部的私有IP地址可以访问外网,以及外部用用户可以访问位于公司内部的私有IP主机。VS/NAT工作模式拓扑结构如图2所示,LVS负载调度器可以使用两块网卡配置不同的IP地址,eth0设置为私钥IP与内部网络通过交换设备相互连接,eth1设备为外网IP与外部网络联通。

           第一步,用户通过互联网DNS服务器解析到公司负载均衡设备上面的外网地址,相对于真实服务器而言,LVS外网IP又称VIP(Virtual IP Address),用户通过访问VIP,即可连接后端的真实服务器(Real Server),而这一切对用户而言都是透明的,用户以为自己访问的就是真实服务器,但他并不知道自己访问的VIP仅仅是一个调度器,也不清楚后端的真实服务器到底在哪里、有多少真实服务器。

       第二步,用户将请求发送至124.126.147.168,此时LVS将根据预设的算法选择后端的一台真实服务器(192.168.0.1~192.168.0.3),将数据请求包转发给真实服务器,并且在转发之前LVS会修改数据包中的目标地址以及目标端口,目标地址与目标端口将被修改为选出的真实服务器IP地址以及相应的端口。

        第三步,真实的服务器将响应数据包返回给LVS调度器,调度器在得到响应的数据包后会将源地址和源端口修改为VIP及调度器相应的端口,修改完成后,由调度器将响应数据包发送回终端用户,另外,由于LVS调度器有一个连接Hash表,该表中会记录连接请求及转发信息,当同一个连接的下一个数据包发送给调度器时,从该Hash表中可以直接找到之前的连接记录,并根据记录信息选出相同的真实服务器及端口信息。


    2、基于TUN的LVS负载均衡

           在LVS(NAT)模式的集群环境中,由于所有的数据请求及响应的数据包都需要经过LVS调度器转发,如果后端服务器的数量大于10台,则调度器就会成为整个集群环境的瓶颈。我们知道,数据请求包往往远小于响应数据包的大小。因为响应数据包中包含有客户需要的具体数据,所以LVS(TUN)的思路就是将请求与响应数据分离,让调度器仅处理数据请求,而让真实服务器响应数据包直接返回给客户端。VS/TUN工作模式拓扑结构如图3所示。其中,IP隧道(IP tunning)是一种数据包封装技术,它可以将原始数据包封装并添加新的包头(内容包括新的源地址及端口、目标地址及端口),从而实现将一个目标为调度器的VIP地址的数据包封装,通过隧道转发给后端的真实服务器(Real Server),通过将客户端发往调度器的原始数据包封装,并在其基础上添加新的数据包头(修改目标地址为调度器选择出来的真实服务器的IP地址及对应端口),LVS(TUN)模式要求真实服务器可以直接与外部网络连接,真实服务器在收到请求数据包后直接给客户端主机响应数据。


    3、基于DR的LVS负载均衡

    在LVS(TUN)模式下,由于需要在LVS调度器与真实服务器之间创建隧道连接,这同样会增加服务器的负担。与LVS(TUN)类似,DR模式也叫直接路由模式,其体系结构如图4所示,该模式中LVS依然仅承担数据的入站请求以及根据算法选出合理的真实服务器,最终由后端真实服务器负责将响应数据包发送返回给客户端。与隧道模式不同的是,直接路由模式(DR模式)要求调度器与后端服务器必须在同一个局域网内,VIP地址需要在调度器与后端所有的服务器间共享,因为最终的真实服务器给客户端回应数据包时需要设置源IP为VIP地址,目标IP为客户端IP,这样客户端访问的是调度器的VIP地址,回应的源地址也依然是该VIP地址(真实服务器上的VIP),客户端是感觉不到后端服务器存在的。由于多台计算机都设置了同样一个VIP地址,所以在直接路由模式中要求调度器的VIP地址是对外可见的,客户端需要将请求数据包发送到调度器主机,而所有的真实服务器的VIP地址必须配置在Non-ARP的网络设备上,也就是该网络设备并不会向外广播自己的MAC及对应的IP地址,真实服务器的VIP对外界是不可见的,但真实服务器却可以接受目标地址VIP的网络请求,并在回应数据包时将源地址设置为该VIP地址。调度器根据算法在选出真实服务器后,在不修改数据报文的情况下,将数据帧的MAC地址修改为选出的真实服务器的MAC地址,通过交换机将该数据帧发给真实服务器。整个过程中,真实服务器的VIP不需要对外界可见。


    三、LVS负载均衡调度算法

          根据前面的介绍,我们了解了LVS的三种工作模式,但不管实际环境中采用的是哪种模式,调度算法进行调度的策略与算法都是LVS的核心技术,LVS在内核中主要实现了一下十种调度算法。

    1.轮询调度

    轮询调度(Round Robin 简称'RR')算法就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单。轮询算法假设所有的服务器处理请求的能力都一样的,调度器会将所有的请求平均分配给每个真实服务器。

    2.加权轮询调度

    加权轮询(Weight Round Robin 简称'WRR')算法主要是对轮询算法的一种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器A的权值为1,服务器B的权值为2,则调度器调度到服务器B的请求会是服务器A的两倍。权值越高的服务器,处理的请求越多。

    3.最小连接调度

    最小连接调度(Least Connections 简称'LC')算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态的调度算法,它通过服务器当前活跃的连接数来估计服务器的情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中断或者超时,其连接数减1。

    (集群系统的真实服务器具有相近的系统性能,采用最小连接调度算法可以比较好地均衡负载。)

    4.加权最小连接调度

    加权最少连接(Weight Least Connections 简称'WLC')算法是最小连接调度的超集,各个服务器相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

    5.基于局部的最少连接

    基于局部的最少连接调度(Locality-Based Least Connections 简称'LBLC')算法是针对请求报文的目标IP地址的 负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群客户请求报文的目标IP地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和Cache命中率,从而提升整个集群系统的处理能力。LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则使用'最少连接'的原则选出一个可用的服务器,将请求发送到服务器。

    6.带复制的基于局部性的最少连接

    带复制的基于局部性的最少连接(Locality-Based Least Connections with Replication  简称'LBLCR')算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统,它与LBLC算法不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。按'最小连接'原则从该服务器组中选出一一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按'最小连接'原则从整个集群中选出一台服务器,将该服务器加入到这个服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

    7.目标地址散列调度

    目标地址散列调度(Destination Hashing 简称'DH')算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。

    8.源地址散列调度U

    源地址散列调度(Source Hashing  简称'SH')算法先根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同,它的算法流程与目标地址散列调度算法的基本相似。

    9.最短的期望的延迟

    最短的期望的延迟调度(Shortest Expected Delay 简称'SED')算法基于WLC算法。举个例子吧,ABC三台服务器的权重分别为1、2、3 。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用SED算法后会进行一个运算

    A:(1+1)/1=2   B:(1+2)/2=3/2   C:(1+3)/3=4/3   就把请求交给得出运算结果最小的服务器。

    10.最少队列调度

    最少队列调度(Never Queue 简称'NQ')算法,无需队列。如果有realserver的连接数等于0就直接分配过去,不需要在进行SED运算。


    展开全文
  • calibre lvs

    2019-04-17 08:51:46
    calibre 软件 drc 或 lvs 语法规则,详细介绍了calibre软件的关键字
  • lvs
  • 但在实际的生产环境中会发现,LVS调度在大压力下很容易就产生瓶颈,其中瓶颈包括ipvs内核模块的限制,CPU软中断,网卡性能等,当然这些都是可以调优的,关于LVS的调优,会在这里详细讲LVS调优攻略。回到主题,那当...
  • LVS在基本的生产环境中,都会同时运行在二台硬件相近的服务器上:LVSRouter(主LVS),一个作为备份LVS(备份LVS)。主LVS服务器在网站的前端起二个作用:(1.均衡负载压力到真实服务器(如apache)上.(2.检查后面真实...
  • lvs-manager是lvs cluster的Web管理系统。关于lvs cluster的架构这里 功能 性能图标 lvs累积整体流量 各vip的流量 lvs整合整体包数量 各vip的包数量 lvs管理 页面配置上线,下线,修改,回滚,发布服 管理保持活力 ...
  • LVS配置

    2012-11-08 14:23:26
    LVS配置

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 87,122
精华内容 34,848
关键字:

lvs