LVS负载均衡

LVS(Linux virtual server)

它是一个负载均衡、高可用性集群,主要针对大业务量的网络应用(比如新闻。电子商务、网上银行…)
LVS是建立在一个主控服务器(双机)及若干个真实服务器组成。真实服务器负责提供服务,主控服务器会根据指定的调度算法对真实的服务器进行控制。LVS集群结构对用户来说是透明的,客户端只与单个IP(虚拟IP)进行通信。客户端向lvs发出服务请求,主控服务器会通过特定的算法来指定某个真实服务器来应答,而客户端只与负载均衡的IP进行通信

lvs常见算法:

轮询调度RR:
将外部请求按照顺序轮流分配到真实的服务器上

加权轮询WRR:
根据真实服务器的不同处理能力来调度访问请求

最少链接数LC:
调度器通过最少连接调度算法动态的将网络请求调度到以建立的连接数最少的服务器上
(两台服务器配置差不多时使用)

加权最少连接WLC:
优化负载的性能,较高权重的服务器将承受较大比例的活动连接负载
(两台服务器 有一台比较弱时 可以使用)

基于局部性的最少连接 LBLC:
针对目标的IP地址的负载均衡,应用于cache集群上。会根据请求的目标IP地址找出该目标IP地址最近使用的服务器,如果该服务器是可用的没有超载,则将请求发送到服务器上,若服务器不存在,或服务器处于一半的工作负载,则用最少连接数选出一个服务器
带复制的基于局部性的最少连接(locality-Based Least Connections with Replication)
也是针对目标IP地址的负载均衡,用于cache集群。它与LBLC算法不同之处是它要维护的是从一个目标IP地址到一组服务器的映射,而LBLC算法维护的是从一个目标IP地址到一台服务器的映射。
目标地址散列(Destination IP Hashing)
目标地址散列调度算法根据请求的目标IP地址,作为散列键(Hash KEY)从静态分配的散列表中找出对应的服务器,若服务器是可用的且未超载,则请求发送到该服务器,否则返回空。
源地址散列
根据请求的源IP地址,作为散列键从静态分配的散列表中找出对应的服务器,若服务器是可用的且未超载,则请求发送到该服务器,否则返回空。
源IP端口散列
通过hash函数将来自用一个源IP地址和源端口号的请求映射到后端同一台服务器上。

按服务的类型分类:
随机
随机地将请求分发到不同的服务器上
典型的负载均衡集群中,包括三层次的组件,前端至少一个负载均衡调度器(LB)负责相应并发来自客户端的访问请求;后端有大量真实服务器构成服务池(server pool)提供实际的应用服务
透明性 一致性和伸缩性

第一层:
负载调度器,这是访问整个集群系统唯一入口,对外使用所有服务器共有VIP,也称为集群IP,通常会配置主备两台调度器实现热备份。

第二层:
服务器池,集群符提供的应用服务,由服务器池承担。每个节点具有独立的真实IP,只处理调度器分发过来的客户机请求。当某个节点失效时,负载调度器的容错机制会将它隔离,等排出错误后,在从新纳入服务器池

第三层:
共享存储,为服务池中的所有节点提供稳定的,一致的文件存取服务,保证整个集群的统一性
工作模式: 调度技术可以基于IP、端口、内容进行分发。基于IP的效率最高。常见的有三种,地址转换、IP隧道和直接路由。

地址转换:
简称NAT模式,类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,及作为客户机的访问入口,也是各个节点回应客户机的访问出口。服务器节点使用的是私有IP地址

IP隧道:
简称TUN模式,采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器。服务器节点分散在不同的位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信。

直接路由:
简称DR模式,采用半开放式网络结构,与TUN模式的结构类似,但是节点并不是分散的,而是与调度器位于同一物理网络。通过本地网络连接,不需要建立专用IP隧道。

LVS集群的管理工作主要包括创建虚拟服务器、添加服务器节点、查看集群节点状态、删除服务器节点和保存负载分配策略

NET模式

实验环境

主机ip
client192.168.10.10 gw:192.168.10.20
lvsip1:192.168.10.20 ip2:192.168.2.10
web1192.168.2.20 gw:192.168.2.10
web2192.168.2.30 gw:192.168.2.10

操作
web:两台操作一样

[root@wed1 ~]# systemctl stop firewalld
[root@wed1 ~]# setenforce 0
[root@wed1 ~]# yum -y install httpd
[root@wed1 ~]# echo 1111 > /var/www/html/index.html
[root@wed1 ~]# systemctl restart httpd
[root@wed1 ~]# curl 192.168.2.20
1111
[root@wed2 ~]# systemctl stop firewalld
[root@wed2 ~]# setenforce 0
[root@wed2 ~]# yum -y install httpd
[root@wed2 ~]# echo 2222 > /var/www/html/index.html
[root@wed2 ~]# systemctl restart httpd
[root@wed2 ~]# curl 192.168.2.30
2222

lvs:

[root@lvs ~]# vim /etc/sysctl.conf #添加路由转发 
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@lvs ~]# modprobe ip_vs  #加载lvs的模块
[root@lvs ~]# yum -y install ipvsadm  #安装lvs管理工具

创建lvs集群

[root@lvs ~]# ipvsadm -A -t 192.168.10.20:80 -s rr 
参数释义:
-A   #添加一个新的集群
-t     #使用tcp协议    后面加接收请求的ip   这里写的是和客户端同网段的ip
-s    #调度算法
rr    #轮询
[root@lvs ~]# ipvsadm -a -t 192.168.10.20:80 -r 192.168.2.20:80 -m -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.10.20:80 -r 192.168.2.30:80 -m -w 1
-a    #添加真实的节点 (添加后端的节点)
-r    #真实节点的ip
-m    #使用nat模式   -g DR模式    -i   TUN模式
-w    #权重
[root@lvs ~]# ipvsadm -S
-A -t lvs:http -s rr
-a -t lvs:http -r 192.168.2.20:http -m -w 1
-a -t lvs:http -r 192.168.2.30:http -m -w 1
[root@lvs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.10.20:80 rr
  -> 192.168.2.20:80              Masq    1      0          0         
  -> 192.168.2.30:80              Masq    1      0          0

如果添加错了可以用以下方法进行删除

[root@lvs ~]# ipvsadm -d -t 192.168.10.20:80 -r 192.168.2.10:80
-d    #删除真实的节点
[root@lvs ~]#  ipvsadm -D -t 192.168.10.20:80
-D  # 删除整个集群

客户端验证

[root@client ~]# curl 192.168.10.20
1111
[root@client ~]# curl 192.168.10.20
2222

直接路由:(DR模式)
简称DR模式,采用半开放式网络结构,与TUN模式的结构类似,但是节点并不是分散的,而是与调度器位于同一物理网络。通过本地网络连接,不需要建立专用IP隧道。
环境:

主机ip
client192.168.10.10
lvsip 192.168.10.20 ens33:0:192.168.10.100
web1ip:192.168.10.30 lo:0:192.168.10.100
web2ip:192.168.10.40 lo:1:192.168.10.100

两台web先安装好httpd服务
web1

[root@wed2 ~]# yum -y install httpd
[root@wed2 ~]# echo 1111 > /var/www/html/index.html
[root@wed2 ~]# systemctl restart httpd
[root@wed2 ~]# curl 192.168.10.30
1111

web2

[root@wed2 ~]# yum -y install httpd
[root@wed2 ~]# echo 2222 > /var/www/html/index.html
[root@wed2 ~]# systemctl restart httpd
[root@wed2 ~]# curl 192.168.10.40
2222

lvs

删除之前的集群
[root@lvs ~]# ipvsadm -D -t 192.168.10.20:80 
[root@lvs ~]# ipvsadm -S
添加一块虚拟网卡
[root@lvs ~]# cd /etc/sysconfig/network-scripts/
[root@lvs network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0
[root@lvs network-scripts]# vim ifcfg-ens33:0
TYPE=Ethernet
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.100
MASK=255.255.255.0
GATEWAY=192.168.10.20
[root@lvs network-scripts]# systemctl restart network

两台web操作一样
web1

添加虚拟回环ip
[root@wed1 ~]# cd /etc/sysconfig/network-scripts/
[root@wed1 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@wed1 network-scripts]# vim ifcfg-lo:0
1 DEVICE=lo:0
2 IPADDR=192.168.10.100
3 NETMASK=255.255.255.255
[root@wed1 network-scripts]# systemctl restart network
[root@wed1 ~]# vim /etc/sysctl.conf 
[root@wed1 ~]# sysctl -p
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
[root@wed1 ~]# route add -host 192.168.10.100 dev lo:0

web2

[root@wed2 ~]# cd /etc/sysconfig/network-scripts/
[root@wed2 network-scripts]# cp ifcfg-lo ifcfg-lo:1
[root@wed2 network-scripts]# vim ifcfg-lo:1
1 DEVICE=lo:1
2 IPADDR=192.168.10.100
3 NETMASK=255.255.255.255
[root@wed2 network-scripts]# systemctl restart network
[root@wed2 ~]# vim /etc/sysctl.conf 
[root@wed2 ~]# sysctl -p
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
[root@wed2 ~]# route add -host 192.168.10.100 dev lo:1

lvs:
添加集群

[root@lvs ~]# ipvsadm -A -t 192.168.10.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.30:80 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.40:80 -g -w 1
[root@lvs ~]# ipvsadm -S
-A -t localhost.localdomain:http -s rr
-a -t localhost.localdomain:http -r 192.168.10.30:http -g -w 1
-a -t localhost.localdomain:http -r 192.168.10.40:http -g -w 1

客户端访问验证:

[root@client ~]# curl 192.168.10.100
2222
[root@client ~]# curl 192.168.10.100
1111
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值