LVS(Linux virtual server)
它是一个负载均衡、高可用性集群,主要针对大业务量的网络应用(比如新闻。电子商务、网上银行…)
LVS是建立在一个主控服务器(双机)及若干个真实服务器组成。真实服务器负责提供服务,主控服务器会根据指定的调度算法对真实的服务器进行控制。LVS集群结构对用户来说是透明的,客户端只与单个IP(虚拟IP)进行通信。客户端向lvs发出服务请求,主控服务器会通过特定的算法来指定某个真实服务器来应答,而客户端只与负载均衡的IP进行通信
LVS 常见算法:
轮询调度RR:
在两台性能差不多一样的情况下使用,将外部请求按照顺序轮流分配到真实的服务器上
加权轮询WRR:
当性能不一样时,根据真实服务器的不同处理能力来调度访问请求,比如B主机比A性能好一点就多让B接收
最少链接数LC:
调度器通过最少连接调度算法动态的将网络请求调度到以建立的连接数最少的服务器上
(两台服务器配置差不多时使用)
加权最少连接WLC:
优化负载的性能,较高权重的服务器将承受较大比例的活动连接负载
(两台服务器 有一台比较弱时 可以使用)
基于局部性的最少连接 LBLC: 对
针对目标的IP地址的负载均衡,应用于cache集群上。会根据请求的目标IP地址找出该目标IP地址最近使用的服务器,如果该服务器是可用的没有超载,则将请求发送到服务器上,若服务器不存在,或服务器处于一半的工作负载,则用最少连接数选出一个服务器
带复制的基于局部性的最少连接(locality-Based Least Connections with Replication)
也是针对目标IP地址的负载均衡,用于cache集群。它与LBLC算法不同之处是它要维护的是从一个目标IP地址到一组服务器的映射,而LBLC算法维护的是从一个目标IP地址到一台服务器的映射。#字是LBLC和它的区别
目标地址散列(Destination IP Hashing)
目标地址散列调度算法根据请求的目标IP地址,作为散列键(Hash KEY)从静态分配的散列表中找出对应的服务器,若服务器是可用的且未超载,则请求发送到该服务器,否则返回空。
源地址散列
根据请求的源IP地址,作为散列键从静态分配的散列表中找出对应的服务器,若服务器是可用的且未超载,则请求发送到该服务器,否则返回空。
源IP端口散列
通过hash函数将来自用一个源IP地址和源端口号的请求映射到后端同一台服务器上。
比如源地址ip是900 通过hash算法计算为200 然后服务器B为200就会把这个源地址的发送到服务器B
(适合按服务的类型分类)
随机
随机地将请求分发到不同的服务器上
多台web称为web集群、两台或者两台以上就被称为集群
集群中包含负载均衡主机 负载均衡集群
典型的负载均衡集群中,包括三层次的组件,前端至少一个负载均衡调度器(LB)负责相应并发来自客户端的访问请求;后端有大量真实服务器构成服务池(server pool)提供实际的应用服务
透明性 一致性和伸缩性
第一层:
负载调度器,这是访问整个集群系统唯一入口,对外使用所有服务器共有VIP,也称为集群IP,通常会配置主备两台调度器实现热备份。
第二层:
服务器池,集群符提供的应用服务,由服务器池承担。每个节点具有独立的真实IP,只处理调度器分发过来的客户机请求。当某个节点失效时,负载调度器的容错机制会将它隔离,等排出错误后,在从新纳入服务器池
第三层:
共享存储,为服务池中的所有节点提供稳定的,一致的文件存取服务,保证整个集群的统一性
工作模式: 调度技术可以基于IP、端口、内容进行分发。基于IP的效率最高。常见的有三种,地址转换、IP隧道和直接路由。
地址转换:
简称NAT模式,类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,及作为客户机的访问入口,也是各个节点回应客户机的访问出口。服务器节点使用的是私有IP地址,
特点:1.client的请求和web的响应都需要经过lvs
2.lvs相当于网关而存在
IP隧道:
简称TUN模式,采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器。服务器节点分散在不同的位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信。
特点:1.lvs只需要接受client请求,响应数据是直接由web交给客户端的
- lvs和web都要使用公网ip。
- lvs和web传输数据经过公网ip特有的ip隧道进行通信的
直接路由:
简称DR模式,采用半开放式网络结构,与TUN模式的结构类似,但是节点并不是分散的,而是与调度器位于同一物理网络。通过本地网络连接,不需要建立专用IP隧道。
特点:1.lvs只需要接受client请求 响应数据时直接由web交给client
- lvs必须和web主机在同一个物理网络 共用一个虚拟ip
- Web主机和虚拟ip 需要设置成为自己虚拟ip 不接受请求 不发送广播
LVS集群的管理工作主要包括创建虚拟服务器、添加服务器节点、查看集群节点状态、删除服务器节点和保存负载分配策略
实验:
Client:vm1:192.168.1.2 网关1.1
LVS:vm1:192.168.1.1 vm2:192.168.2.1
Web1:vm2:192.168:2.30 网关2.1
Web2:vm2:192.168.2.40 网关2.1
NAT模式
Lvs配置:[root@localhost ~]# modprobe ip_vs #加载lvs模块
[root@localhost ~]# yum -y install ipvsadm #管理lvs的工具
[root@localhost ~]# vim /etc/sysctl.conf #开启路由转发
配置lvs集群
[root@localhost ~]# ipvsadm -A -t 192.168.1.1:80 -s rr
#-A 添加一个集群
#-t tcp 192.168.1.1:80 和client同网段的ip,客户端需要访问这个
#-s rr 使用的调度算法为轮询
#-D 删除
[root@localhost ~]# ipvsadm -a -t 192.168.1.1:80 -r 192.168.2.30:80 -m -w 1
[root@localhost ~]# ipvsadm -a -t 192.168.1.1:80 -r 192.168.2.40:80 -m -w 1
#-a 添加真实的节点
#-t 192.168.1.1:80 指定添加的集群
#-r web的ip
#-m 使用nat模式 -g dr模式 -i ip隧道模式
#-w 权重
#ipvsdam -S 保存 #ipvsadm -ln 查看
到客户端访问集群 #发现第一次查询是web1 第二次是web2 这就是轮询查询
--------------------------------------------------------------------
DR模式
Client:192.168.2.10
Lvs:192.168.2.20 vip192.168.2.200
Web1: 192.168.2.30 vip 192.168.2.200
Web2: 192.168.2.40 vip 192.168.2.200
Web1和web2只能在本地回环上做vip lo:0
除了vip 都要设置网关 2.1
到web上 [root@localhost network-scripts]# vim /etc/sysctl.conf
[root@localhost network-scripts]# route add -host 192.168.2.200 dev lo:0
Web2一样的配置
LVS配置
[root@localhost ~]# ipvsadm -A -t 192.168.2.200:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.2.200:80 -r 192.168.2.30 -g -w 1
[root@localhost ~]# ipvsadm -a -t 192.168.2.200:80 -r 192.168.2.40 -g -w 1
到客户端验证