关于LVS的几种工作模式:
1.关于DR模式:
1)LVS DR模式 原理:
(1)通过更改数据包的目的MAC地址实现数据包转发的。
(2)所有节点和LVS要处于一个局域网。
2)DR模式:
(1) 通过在调度器LB上修改数据包的目的MAC地址实现转发。注意:源IP地址依然是CIP,目的地址依然是VIP。
(2)请求的报文经过调度器,而RS响应处理后的报文无需要经过调度器LB,因此,并发访问量大时使用效率很高(和NAT模式比)
(3)因DR模式是通过MAC地址的改写机制实现的转发,因此,所有RS节点和调度器LB只能在一个局域网LAN中(小缺点)
(4)需要注意RS节点的VIP的绑定(lo:vip/32,lo1:vip/32)和ARP抑制问题。
(5)RS节点的默认网关不需要是调度器LB的DIP,而直接是IDC机房分配的上级路由器的ip(这是RS带有外网IP地址的情况)。
理论上:只要RS可以出网即可,不需要必须配置外网IP。
(6)由于DR模式的调度器仅进行了目的MAC地址的缩写。因此,调度器LB无法改变请求的报文的目的端口(和NAT要区别)
(7)调度器LB支持几乎所有的UNIX,LINUX系统,但目前不支持WINDOWS系统,真实服务器RS节点可以是WINDOWS系统。
(8)总的来说DR模式效率很高,但是配置也比较麻烦,因此,访问量不是特别大的公司可以用haproxy/nginx取代之。
这符合运维的原则:简单、易用、高效。日1000-2000PV或并发请求1万以下都可以考虑用haproxy/nginx(LVS NAT 模式)
(9)直接对外的访问业务,例如:web服务做RS节点,RS最好用公网IP地址。如果不直接对外的业务,
例如:Mysql,存储系统RS节点,最好只用内部IP地址。
================================================
2.关于NAT:(网络地址转换)
1)NAT技术将请求的报文(通过DNAT方式改写)和 响应的报文(通过SNAT方式改写)。
通过调度器地址重写然后在转发给内部的服务器,报文返回时在改写成原来的用户请求的地址。
2)只需要在调度器LB上配置WAN公网IP即可,调度器也要有私有LAN IP和 内部RS节点通信。
3)每台内部RS节点的网关地址,必须要配成调度器LB的私有LAN内物理网卡地址(LDIP),
这样才能确保数据报文返回时仍然经过调度器LB。
4)由于请求与响应的数据报文都经过调度器LB,因此,网站访问量大时调度器LB有较大瓶颈,
一般要求最多10-20台节点。
5)NAT 模式支持对IP及端口的转换,即用户请求10.0.0.1:80.可以通过调度器转换到RS节点的
10.0.0.2:8080(DR 和TUN模式不具备的)
6)所有NAT内部RS节点只需要配置私有LAN IP 即可。
7)由于数据包来回都需要经过调度器,因此,要开启内核转发net.ipv4.ip_forward=1,
当然也包括iptables 防火墙的 forward功能(DR 和 TUN模式不需要)。
================================================
3.TUNNEl模式:
TUN模式:
1)负载均衡通过把请求的报文通过IP隧道(ipip 隧道)的方式(请求的报文不经过原目的地址的改写(包括MAC),而是直接封装成另外的ip报文)转发至真实服务器,而真实服务器将响应处理后直接返回给客户端用户。
2)由于真实服务器将响应处理后直接返回给客户端用户,因此,最好RS有一个外网ip地址,这样效率才会更高
理论上:只要能出网即可,无需要外网IP地址。
3)由于调度器LB只处理入站请求的报文,因此,此集群系统的吞吐量可以提高10倍以上,但隧道模式也会带来一定的系统开销,
TUN模式适合LAN/WAN.
4)TUN模式的LAN环境转发不如DR模式效率高,而且还要考虑系统对IP隧道的支持问题。
5)所有的RS服务器都要绑定VIP,抑制ARP,配置复杂。
6)LAN环境一般多采用DR模式,WAN环境可以用TUN模式,但是当前在WAN环境下,请求转发更多的被
haproxy/nginx/DNS调度等取代,因此,TUN模式在国内公司实际应用的已经很少了。
7)直接对外的访问业务,例如:web服务做RS节点,最好用公网IP地址。不直接对外的业务。
例如:Mysql,存储系统RS节点,最好用内部IP地址。
================================================
小结:
1.NAT模式:
入站DNAT,出站SNAT,入站出站都经过LVS,可以修改端口,私有网络。
2.DR模式:******
修改数据包的目的MAC地址,入站经过LVS,出站不经过LVS,
直接返回客户,不能改端口,LAN内使用。
3.TUN模式:
不改变数据内容,数据包外部封装一个IP头,入站经过LVS,出站不经过LVS,直接返回客户,
不能改端口,LAN/WAN使用。
LVS和节点之间通过隧道通信。
================================================
4.LVS 的三种模式比较优缺点:
VS/NAT VS/TUN VS/DR
Real Server(节点服务器) config dr gw Tunneling Non-arp device/tie vip
Server Network(网络) private LAN/WAN LAN
Server Number (节点数量) low(10~20) hight(100) high(100)
Real Server Gateway load balancer Own router(能出网) Own router(能出网)
优点: 地址和端口转换 WAN环境 性能最高
缺点: 瓶颈大效率低 系统需要支持隧道协议 不能跨出LAN
================================================
5.LVS的调度算法:
1)、LVS的调度算法决定了如何在集群节点之间分布工作负荷。
当Director调度器收到来自客户端计算机访问它的LVS上的集群服务的入站请求时,
rector调度器必须决定那个集群节点应该处理请求。Director调度器可用于做出该决定
的调度方法分成两个基本类别:
固定调度算法:rr,wrr,dh,sh
动态调度算法 :wlc,lclb,SED,NQ(后两种官方没有提到,编译LVS,
make过 可以看到rr|wrr|lc|wlc,lclb|dh|sh|sed|nq).
2)、LVS的调度算法的生产环境选型:
(1)一般的网络服务,如:Http、Mail、Mysql等,常用的LVS调度算法为:
a.基本轮叫调度rr算法。
b.加权最小连接调度wlc。
c.加权轮叫调度wrr算法。
(2)基于局部性的最少链接LBLC和带复制的基于局部性最少链接LBLCR
主要适用于Web Cache 和 Db Cache集群,但是我们很少这样用。一致性哈希。
(3)源地址散列调度SH和目标地址散列调度DH可以结合使用在防火墙集群中,
它的可以保证整个系统的唯一口。
(4)最短预期延时调度SED和不排队调度NQ主要是对处理时间相对比较长的网络服务。
================================================
6.LVS的搭建:
1)环境准备:
LB01(nginx + keepalived) 10.0.0.3
VIP: 10.0.0.31
LB02(nginx + keepalived) 10.0.0.5
VIP: 10.0.0.32
================================================
2)开始安装LVS:
以下安装都在LVS LB01 10.0.0.3 上:
(1)下载相关软件包:
[ ! -d /home/oldboy/tools ] && mkdir -p /home/oldboy/tools
cd /home/oldboy/tools
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
##相关文档:http://www.linuxvirtulserver.org/Documents.html
yum install libnl*popt* -y
(2)安装准备命令
lsmod | grep ip_vs
cat /etc/redhat-release
uname -rm
ln -s /usr/src/kernels/2.6.18-194.e15-x86_64 /user/src/linux
================================================
(3)安装LVS命令:
cd /home/oldboy/tools
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
yum install libnl*popt* -y
tar zxf ipvsadm-1.26.tar.gz
cd ipvsadm-1.26
make
make install
lsmod | grep ip_vs
/sbin/ipvsadm #<-modprobe ip_vs
cd ../
lsmod | grep ip_vs
[root@C64LB01 ipvsadm-1.26]# lsmod | grep ip_vs
ip_vs 115643 0
libcrc32c 1246 1 ip_vs
ipv6 321454 110 ip_vs,ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6
#===>出现这些,表示LVS安装成功,并加载了内核。
注意:
1)添加一个主机地址:
ipvsadm -A -t 10.0.0.31:80 -s rr
2)Ipvsadm -A -t 10.0.1.31:80 -s rr
其中: -s rr 是调度算法。
Ipvsadm -A -t 10.0.1.31:80 -r 10.0.1.6:80 -g
Ipvsadm -A -t 10.0.1.31:80: 指定在那个LVS-service 上添加。
-r 10.0.1.6:80 : LVS-service 的指定端口。
-g: #LVS 的模式
3)Ipvsadm -d -t 10.0.0.29:80 -r 10.0.0.8 -g -w l
10.0.0.29:80 : VIP相当于是 虚拟的服务。
-r 10.0.0.8 : 添加一个节点。
-g : 工作模式 是DR模式:。
-w: 添加权重。
4)删除一条:
ipvsadm -d -t 10.0.1.31:80 -r 10.0.1.9:80
================================================
LVS 安装小结:
1.Centos5.x 安装lvs,使用1.24版本。不要用 1.26
2.Centos6.x 安装lvs,使用1.26版本。并需要先安装yum install libnl* popt* -y。
3.安装lvs后,要执行ipvsadm(modprobe ip_vs)把ip_vs模块加载到内核。
特别注意:
1)此ln命令的链接路径要和uname -r 输出结果内核版本对应,
工作中如果做安装虚拟化可能有多个内核路径:
[root@C64 tools]# ln -s /usr/src/kernels/2.6.32-358.
2.6.32-358.14.1.e16.x86_64/ 2.6.32-358.e16.x86_64/
[root@C64 tools]# uname -r
2.6.32-358.14.1.e16.x86_64
[root@C64 tools]# ln -s /usr/src/kernels/2.6.32-358.
2.6.32-358.14.1.e16.x86_64/ /usr/src/linux
2)如果没有/usr/src/kernels/2.6.18-194.e15-x86_64路径,
很可能是因为缺少kernel-devel-2.6.18-164.86 软件包,
可以通过yum install-devel -y 安装。
3)ln 这个命令也可以不执行,直接指定内核参数编译见附录。
================================================
(4)关于ipvsadm的参数:ipvsadm -help
-C 清空整个表
-A 添加一个虚拟服务
-t 指定一个地址,一定是IP+端口
-s 调度算法,一共有10个
-a 添加一个real server
-r server的iP地址
-m NAT模式
-g DR模式
-d 删除一个real server
-p 会话保存功能
-w 权重
-i tunnel模