LVS负载均衡群集
LVS简介
LVS: 是Linux Virtual Server的简写,也就是Linux 虚拟服务器,是一个虚拟的服务器集群系统,
使用 LVS 可以达到的技术目标是:通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的性能。LVS 是一个实现负载均衡集群的开源软件项目,LVS 架构从逻辑上可分为调度层、Server 集群层和共享存储层。
LVS 负载均衡集群的类型
1、负载均衡群集:Load Balance
Cluster,以提高应用系统的响应能力,尽可能处理更多的访问请求、减少延迟为目标,从而获得高并发、高负载的整体性能。2、高可用群集:High Availability
Cluster,以提高应用系统的可靠性,尽可能的减少终端时间为目标、确保服务的连续性,达到高可用的容错效果。3、高性能运算群集:High Performance Computer Cluster,以提高应用系统的 CPU
运算速度、扩展硬件资源和分析能力为目标、从而获得相当于大型、超级计算机的高性能计算能力。
LVS 集群的通用体系结构
第一层:负载调度器:Load Balancer,它是访问整个群集系统的唯一入口,对外使用所有服务器共有的虚拟 IP 地址,也成为群集 IP
地址。第二层:服务器池:Server Pool,群集所提供的应用服务,比如:HTTP、FTP服务器池来承担,每个节点具有独立的真实 IP
地址,只处理调度器分发过来的客户机请求。第三层:共享存储:Shared Storage,为服务器池中的所有节点提供稳定、一致的文件存储服务,确保整个群集的统一性,可使用 NAS
设备或提供 NFS (Network File System)网络文件系统共享服务的专用服务器。
LVS的工作模式
1)NAT模式
NAT模式的工作原理类似于防火墙。将外网地址映射为内网地址,也是信息资源的出入口。同时也承担着调度的作用。所以这种工作方式非常的安全外网不会看到内网的IP,但同时由于承担着多种角色调度器的压力非常大。2)IP隧道模式
采用的是开放式的网络结构,当请求先发送到调度器中调度器再通过IP隧道也叫作VPN发送到地理位置不同的工作服务器中进行计算,最终计算服务器将结果直接发送回客户机上。整个过程都在公网上实现。
3)直接路由模式
与IP隧道模式类似但不同点在于其工作模式是在内网中进行的。请求通过路由器发送到调度器中,再通过算法将请求分配到所有的服务器上,计算后的结果直接发送给客户机。
LVS的调度算法
1)轮询算法(RR):将请求按照顺序平均分给每台服务器。如群集中有两台服务器,这时来了4个请求。调度器就会将1和3请求分给1号服务器。2和4请求分配给2号服务器。
2)加权轮询算法(WRR):根据设定好的权重,调度器会将更多的请求分配给权重高的服务器进行处理。
3)最少连接数进行分配(LC):顾名思义如果当前服务器处理的请求数最小,调度器就会将任务分配给这台服务器让他工作。
4)加权最少连接进行分配(WLC):也就是说在最少连接数相同的情况下,权重越高的服务器分配到的请求也会越多。
LVS负载均衡群集NAT模式的搭建
项目环境
配置步骤
LVS调度器
环境准备:2张网卡,一张用于内网,另一张用于外网
[root@server3 ~]# systemctl stop firewalld ##关闭防火墙
[root@server3 ~]# setenforce 0
[root@server3 ~]# hostnamectl set-hostname lvs ##重命名
[root@server3 ~]# bash
[root@lvs ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf ##下发路由
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@lvs ~]# modprobe ip_vs ##加载LVS内核模块
[root@lvs ~]# cat /proc/net/ip_vs ##查看版本信息
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@lvs ~]# yum -y install ipvsadm.x86_64 ##安装管理软件ipvsadm,不需要启动
[root@lvs ~]# vi nat.sh ##编辑调度服务器脚本
#!/bin/bash
ipvsadm -C ##清除内核虚拟服务器表中的所有记录
ipvsadm -A -t 192.168.100.10:80 -s rr ##创建虚拟服务器
ipvsadm -a -t 192.168.100.10:80 -r 192.168.200.20:80 -m ###添加服务器节点
ipvsadm -a -t 192.168.100.10:80 -r 192.168.200.30:80 -m ###添加服务器节点
ipvsadm -Ln ##查看节点状态,“-n”以数字形式显示显示地址,端口信息
[root@lvs ~]# sh nat.sh
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.100.10:80 rr
-> 192.168.200.20:80 Masq 1 0 0
-> 192.168.200.30:80 Masq 1 0 0
ipvsadm命令选项解析:
-C:清除内核虚拟服务器表中的所有记录
-A:增加一台新的虚拟服务器
-t:说明虚拟服务器提供的是tcp的服务
-s rr:启用轮询算法
-a:在一个虚拟服务器中增加一台新的真实服务器
-r:指定真实服务器
-m:指定LVS的工作模式为NAT模式
ipvsadm:启用LVS功能
NFS共享目录配置
[root@nfs ~]# systemctl stop firewalld ##关闭防火墙
[root@nfs ~]# setenforce 0
[root@nfs ~]# mkdir /opt/web1 ##创建web1目录
[root@nfs ~]# mkdir /opt/web2 ##创建web2目录
[root@nfs ~]# echo "<h1>hello<h1>" > /opt/web1/index.html ## 编辑主页
[root@nfs ~]# echo "<h1>hi<h1>" > /opt/web2/index.html
[root@nfs ~]# vi /etc/exports
添加:
/opt/web1 192.168.200.20/24(ro)
/opt/web2 192.168.200.30/24(ro)
[root@nfs ~]# systemctl restart nfs ##重启服务
[root@nfs ~]# systemctl restart rpcbind
[root@nfs ~]# showmount -e
Export list for nfs:
/opt/web2 192.168.200.30/24
/opt/web1 192.168.200.20/24
Web1服务配置
[root@web1 ~]# systemctl stop firewalld ##关闭防火墙
[root@web1 ~]# setenforce 0
[root@web1 ~]# route -n ##查看是否有默认路由生成
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.200.10 0.0.0.0 UG 100 0 0 ens33
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
192.168.200.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
[root@web1 ~]# yum -y install httpd
[root@web1 ~]# showmount -e 192.168.200.40
Export list for 192.168.200.40:
/opt/web2 192.168.200.30/24
/opt/web1 192.168.200.20/24
[root@web1 ~]# mount 192.168.200.40:/opt/web1 /var/www/html
[root@web1 ~]# systemctl start httpd
Web2服务配置
[root@web2 ~]# systemctl stop firewalld ##关闭防火墙
[root@web2 ~]# setenforce 0
[root@web2 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.200.10 0.0.0.0 UG 100 0 0 ens33
0.0.0.0 192.168.6.2 0.0.0.0 UG 101 0 0 ens36
192.168.6.0 0.0.0.0 255.255.255.0 U 100 0 0 ens36
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
192.168.200.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
[root@web2 ~]# yum -y install httpd
[root@web2 ~]# showmount -e 192.168.200.40
Export list for 192.168.200.40:
/opt/web2 192.168.200.30/24
/opt/web2 192.168.200.20/24
[root@web2 ~]# mount 192.168.200.40:/opt/web2 /var/www/html
[root@web2 ~]# systemctl start httpd
访问测试
在浏览器输入http://192.168.100.10地址验证是否为轮询调度。
首次访问节点1的网页内容,刷新浏览器,第二次是访问节点2的网页内容。
刷新浏览器