前言
· Linux Virtual Server (LVS)是针对 Linux 内核开发的一个负载均衡项目,是由我国章文嵩博士在 98 年 5月创建。
· LVS 实际上相当于基于 IP 地址的虚拟化应用,为基于 IP 地址和内容请求分发的负载均衡提出了一种搞笑的解决办法。
·LVS 现在已称为 Linux 内核的一部分,默认编译为 ip_vs 模块,必要时能够自动调用
群集的类型
1· 负载均衡群集
·以提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体性能。
2·高可用群集
·以提高应用系统的可靠性、尽可能的减少终端时间为目标,确保服务的连续性,达到高可用 (HA)的容错效果。
3·高性能运算群集
以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得高性能运算能力。
负载均衡的分层结构
典型的负载均衡群集中,包括三个层次的组建。前端至少有一个负载调度器,负载响应并分发来自客户端的访问请求;后端由大量的真是服务器构成服务器池,提供实际的应用服务;为了保持服务的以执行,所有节点使用共享储存设备。
第一层:
·负载调度器,是访问整个集群系统的唯一入口,对外使用所有服务器共有的 VIP 地址。
第二层
·服务器池,群集提供的应用服务由服务器池承担,其中的每个节点具有独立的 RIP 地址,只处理调度器分发的请求。
第三层
·共享储存,为服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个集群的统一性
下图是分层结构图
负载均衡的工作模式
·基于 IP 的负载均衡模式中,常见的有地址转换、IP 隧道和直接路由三种工作模式
1·地址转换模式 (NAT 模式):
·负载调度器作为所有服务器节点的网关,即作为客户端访问入口,也是各个节点回应客户机的访问出口。下图是结构拓扑图:
2·IP 隧道 (TUN 模式):
·采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各个节点通过 Internet 直接回应客户端,不再经过负载调度器
3·直接路由 (DR模式):
采用半开放式的网络结构,与 TUN 模式类似,但是各个节点不是分散各地,而是与调度器位于同一个物理网络,负载调度器与各节点通过本地网络连接。
三种工作模式的优缺点
NAT 模式:
·优点:
1 ·服务器可以运行任何支持TCP/IP的操作系统;
2·它只需要一个IP地址配置在调度器上,服务器组可以用私有的IP地址;
3·基于 NAT 的集群系统可以适合许多服务器的性能要求;
·缺点:
1·它的伸缩能力有限,当服务器结点数目升到20时,调度器本身有可能成为系统的新瓶颈;
2·相比其他两种模式,负载能力比较弱,使用范围比较小。
TUN 模式:
·优点:
1·负载调度器就可以处理大量的请求,它甚至可以调度百台以上的服务器(同等规模的服务器),而它不会成为系统的瓶颈
2·可以用来构建高性能的超级服务器。
·缺点:
1·所有的服务器必须支持“IP Tunneling”或者“IP Encapsulation”协议
2·只适用运行其他操作系统的后端服务器。
直接路由 (DR 模式):
·优点
1·调度器只处理客户到服务器端的连接,响应数据可以直接从独立的网络路由返回给客户。这可以极大地提高LVS集群系统的伸缩性。
缺点
1·方法没有IP隧道的开销,但是要求负载调度器与实际服务器都有一块网卡连在同一物理网段上,服务器网络设备(或者设备别名)不作ARP响应
LVS 的负载调度算法
1·轮询:
将收到的访问请求按照顺序轮流分配给真是服务器,不会管服务器的实际连接数量和系统负载;
2·加权轮询:
根据真实服务器的处理能力轮流分配请求,调度器可以自动查询各个节点的负载情况,并调整器权重。这样可以保证处理能力强的服务器承担更多的访问流量;
3·最少连接:
根据真实服务器已建立的连接数进行分配,把请求优先分配给连接数最少的节点。这样可以更好的均衡负载;
4·加权最少连接:
在服务器节点的性能差异较大的情况下,可以为真实服务器自动调整权重,权重较高的承担更大比例的活动连接负载。
构建LVS-NAT 模式案例
1·部署准备:
主机 | IP地址 | 用途 |
---|---|---|
RedHat 6.5 | 内网eth0:192.168.100.1 外网eth1:12.0.0.1 | 调度服务器 |
RedHat 6.5 | 192.168.100.30 | 节点服务器1 |
RedHat 6.5 | 192.168.100.40 | 节点服务器2 |
RedHat 6.5 | 192.168.100.50 | NFS服务器 |
window 7 | 12.0.0.12 | 客户端 |
2·部署说明:
·LVS 的工作模式是:采用 NAT 模式
·LVS 的负载调度算法:采用 轮询算法 (rr)
开始部署
1·部署NFS服务器
1·在192.168.100.40主机上部署 NFS 服务器。查看 NFS、与rpcbind是否安装
[[email protected] ~]# rpm -q nfs-utils
·nfs-utils-1.2.3-39.el6.x86_64
·[[email protected] ~]# rpm -q rpcbind
·rpcbind-0.2.0-11.el6.x86_64
·[[email protected] ~]#
2·开启服务
[[email protected] ~]# service nfs start
启动 NFS 服务: [确定]
关掉 NFS 配额: [确定]
启动 NFS mountd: [确定]
启动 NFS 守护进程: [确定]
正在启动 RPC idmapd: [确定]
[[email protected] ~]# service rpcbind start
3·编辑共享文件路径、权限!
·vim /etc/exports
/usr/share *(ro,sync)
/opt/benet 192.168.100.0/24(rw,sync)
/opt/accp 192.168.100.0/24(rw,sync)
4·创建共享文件、并放大权限
·[[email protected] ~]# cd /opt/
[[email protected] opt]# mkdir benet accp
[[email protected] opt]# ls
accp benet lost+found pscount.txt rh test.tar.bz2
[[email protected] opt]# chmod 777 benet/
[[email protected] opt]# chmod 777 accp/
5·在文件夹随意写一个网页格式的文件,方便后面验证!
[[email protected] opt]# echo "this is benet test 01" > /opt/benet/index.html
[[email protected] opt]# echo "this is accp test 02" > /opt/accp/index.html
6·发布共享文件、并且查看是否共享成功、关闭防火墙!
·[[email protected] accp]# exportfs -rv
exporting 192.168.100.0/24:/opt/accp
exporting 192.168.100.0/24:/opt/benet
exporting :/usr/share
[[email protected] accp]# showmount -e 192.168.100.50
Export list for 192.168.100.50:
/usr/share
/opt/accp 192.168.100.0/24
/opt/benet 192.168.100.0/24
[[email protected] ~]# service iptables stop
[[email protected] ~]# setenforce 0
2·部署两台节点服务器
1·安装httpd服务器、开启服务
[[email protected] ~]# yum install httpd -y
[[email protected] ~]# service httpd start
2·查询共享文件、并且把共享文件挂载到 httpd 的站点目录上、查看挂载情况!
· [[email protected] html]# showmount -e 192.168.100.50
Export list for 192.168.100.50:
/usr/share *
/opt/accp 192.168.100.0/24
/opt/benet 192.168.100.0/24
[[email protected] html]# mount 192.168.100.50:/opt/benet /var/www/html/
[[email protected] html]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 15G 3.1G 11G 23% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 194M 30M 155M 16% /boot
/dev/sda3 15G 165M 14G 2% /home
/dev/sda6 8.4G 220M 7.8G 3% /opt
/dev/sr0 3.6G 3.6G 0 100% /mnt
192.168.100.50:/opt/benet 12G 158M 11G 2% /var/www/html
3·上面是第一台节点服务器,第二台节点服务器的配置和第一台都一样!
·[[email protected] ~]# yum install httpd -y
·[[email protected] ~]# service httpd start
·[[email protected] ~]# mount 192.168.100.50:/opt/accp /var/www/html/
3·部署调度服务器
1·加载 LVS 服务模块、安装 ipvsadm 管理工具、开启管理工具
> ·[[email protected] ~]# modprobe ip_vs
[[email protected] ~]# rpm -ivh /mnt/Packages/ipvsadm-1.26-2.el6.x86_64.rpm
warning: /mnt/Packages/ipvsadm-1.26-2.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ########################################### [100%]
package ipvsadm-1.26-2.el6.x86_64 is already installed
[[email protected] ~]# service ipvsadm start
2·配置负载分配策略
[[email protected] ~]# ipvsadm -A -t 12.0.0.1:80 -s rr
[[email protected] ~]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.100.30:80 -m
[[email protected] ~]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.100.40:80 -m
3·负载分配策略命令说明:
· -A :表示调价虚拟服务器
· -t :指定 VIP 地址及 TCP 端口
· -s :指定负载调度算法(rr:轮询。wrr:加权轮询。lc:最少连接。wlc:加权最少连接)
· -r:指定 节点服务器地址及端口
· -m:表示是哦那个 NAT 群集模式
4·配置 SNAT 转发规则、开启路由转发功能
·[[email protected] ~]# echo "1" /proc/sys/net/ipv4/ip_forward
1 /proc/sys/net/ipv4/ip_forward
·[[email protected] ~]# iptables -t nat -A POSTROUTING -o eth1 -s 192.168.100.0/24 -j SNAT --to-source 12.0.0.1
测试
1·用windows 7 来测试,这里测试需要把IP地址修改为外网地址,因为这里是用的NAT模式,具体地址在部署准备阶段已经提供,可以返回看看。下图是测试结果:
总结
1·负载均衡工作模式:NAT模式、IP隧道(TUN)模式、直接路由(DR)模式
2·LVS 常用调度算法:轮询(rr)、加权轮询(wrr)、最少连接(lc)、加权最少连接(wlc)
3· ipvsadm 工具可用来配置 LVS 负载调度和管理群集节点
4· NAT 模式采用单一出入口,一个公网IP地址;而DR模式的群集采用单一入口+多路出口,需要多个公网 IP 地址。
5·注意在NAT模式下,调度服务器是不能关闭防火墙的,因为需要它来做SNAT转换。
原文地址:http://blog.51cto.com/13746824/2161235