基于LVS的NAT负载均衡

LVS (Linux虚拟服务器)
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。
宗旨
使用集群技术和Linux操作系统实现一个高性能、高可用的服务器.
很好的可伸缩性(Scalability)
很好的可靠性(Reliability)
很好的可管理性(Manageability)
特点
可伸缩网络服务的几种结构,它们都需要一个前端的负载调度器(或者多个进行主从备份)。我们先分析实现虚拟网络服务的主要技术,指出IP负载均衡技术是在负载调度器的实现技术中效率最高的。在已有的IP负载均衡技术中,主要有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation)。在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出了通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术。
LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。
原文链接(https://baike.baidu.com/item/LVS/17738?fr=aladdin)
LVS:
它是一个负载均衡、高可用性集群,主要针对大业务量的网络应用(比如新闻。电子商务、网上银行…)
LVS是建立在一个主控服务器(双机)及若干个真实服务器组成。真实服务器负责提供服务,主控服务器会根据指定的调度算法对真实的服务器进行控制。LVS集群结构对用户来说是透明的,客户端只与单个IP(虚拟IP)进行通信。客户端向lvs发出服务请求,主控服务器会通过特定的算法来指定某个真实服务器来应答,而客户端只与负载均衡的IP进行通信
lvs:负载均衡,高可用集群,主要针对大业务量的网络应用,在传输层,不走流量
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集群的管理工作主要包括创建虚拟服务器、添加服务器节点、查看集群节点状态、删除服务器节点和保存负载分配策略
实验环境:
1)我使用vmwareworkstation进行模拟,使用四台虚拟机centos
2)第一台虚拟机ip可设为192.168.234.1(本机),第二台做lvs,拥有两个网卡分别是:192.168.234.145和1.1.1.1来划分内外网,第三台1.1.1.2,第四台1.1.1.3
3)如下图,通过lvs负载均衡,一会的实验过程中两台web服务的网页根路径内容不一样来区分是否轮滚

实验开始:
企业中防火墙都是设置好的,因为我是模拟,所以就把防火墙关掉
第一台:虚拟机只配好ip即可能与第二台的网卡ping通,默认网关为lvs的相同网段ip,我用的是自己的电脑ip为192.168.234.1
第二台:

[root@bogon ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:32:2F:C0  
          inet addr:192.168.234.145  Bcast:192.168.234.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe32:2fc0/64 Scope:Link
eth1      Link encap:Ethernet  HWaddr 00:0C:29:32:2F:CA  
          inet addr:1.1.1.1  Bcast:1.255.255.255  Mask:255.0.0.0
          inet6 addr: fe80::20c:29ff:fe32:2fca/64 Scope:Link
第一个网卡://让主机自动分配了
DEVICE=eth0
HWADDR=00:0C:29:32:2F:C0
TYPE=Ethernet
UUID=9af3b21f-704a-4e95-9a95-e463e6fff3ce
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp
第二个网卡
 DEVICE=eth1
HWADDR=00:0C:29:32:2F:CA
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=1.1.1.1
NETMASK=255.0.0.0
[root@bogon ~]# modprobe  ip_vs     //添加ipvsadm模块
[root@bogon ~]# yum -y install  /mnt/Packages/vsftpd-2.2.2-11.el6_4.1.x86_64.rpm  //安装服务
[root@bogon ~]# ipvsadm -v   //查看版本号
ipvsadm v1.26 2008/5/15 (compiled with popt and IPVS v1.2.1)
[root@bogon ~]# ipvsadm  -A -t 192.168.234.145:80  -s wrr //创建虚拟服务器
[root@bogon ~]# ipvsadm  -a -t 192.168.234.145:80  -r 1.1.1.2:80 -m -w 1 //添加真实ip
[root@bogon ~]# ipvsadm  -a -t 192.168.234.145:80  -r 1.1.1.3:80 -m -w 1 //添加真实ip
[root@bogon network-scripts]# ipvsadm-save  > /etc/sysconfig/ipvsadm
[root@bogon network-scripts]# cat /etc/sysconfig/ipvsadm  //保存策略
-A -t bogon:http -s wrr
-a -t bogon:http -r 1.1.1.2:http -m -w 1
-a -t bogon:http -r 1.1.1.3:http -m -w 1
[root@bogon ~]# service  iptables stop    //关闭防火墙
iptables: Setting chains to policy ACCEPT: nat             [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
[root@bogon ~]# vim /etc/sysctl.conf   //开启路由转发
net.ipv4.ip_forward = 1
[root@bogon ~]# sysctl  -p  //即时生效

-A 添加虚拟服务器
-t 指定我的VIP地址和端口号
-s 指定负载均衡的调度算法
rr 轮询
wrr加权轮询
lc 最少连接数轮询
wlc加权最少连接数
-a 添加真实的服务器
-t 指定VIP端口 虚拟服务器IP
-r 指定真实节点服务器IP及端口 节点
-m 表示使用nat 模式
-g 表示使用DR模式
-i 表示使用TUN模式 IP隧道模式
-w 1:权重 0:为暂停节点
ipvsadm -ln 查看节点状态
-l 列出lvs的虚拟主机
n 以数字形式显示地址和端口
第三台:

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE=eth0
HWADDR=00:0C:29:BB:8E:CF
TYPE=Ethernet
UUID=11889ffd-2f8b-4e38-9994-828c5ad0a0ac
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=1.1.1.2
NETMASK=255.0.0.0
GATEWAY=1.1.1.1
[root@localhost ~]# yum -y install httpd/ /装一个web服务服务进
[root@localhost ~]# echo  "This is the first web service" > /var/www/html/index.html
[root@localhost ~]# service httpd start

第四台:

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE=eth0
HWADDR=00:0C:29:A1:02:3C
TYPE=Ethernet
UUID=3ea69cdf-3cf4-457e-b7b6-8fb31d58f01d
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=1.1.1.3
NETMASK=255.0.0.0
GATEWAY=1.1.1.1
[root@localhost ~]# yum -y install httpd  //装一个web服务进行验证
[root@localhost ~]# echo "This is the second web service" > /var/www/html/index.html
[root@localhost ~]# service httpd start

验证效果:
使用第一台客户端进行访问lvs那一台的客户端网段的ip地址:192.168.234.145的web页面,我们想要的效果是达到两台web服务进行轮询,轮询次数是由权重值来决定的

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值