linux运维之LVS(二)

关于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模

你可能感兴趣的:(linux运维之LVS(二))