您的位置:首页 > 运维架构 > Linux

Linux LVS-NAT实例演示

2015-08-19 11:35 507 查看
本文总结LVS-NAT模型的实例演示,结构图如下(如果有不对的地方,恳请各位兄弟不吝指教):



如架构图所示:

1.调度器本应该使用一个公网IP,但是是虚拟机实验,我也没有公网IP,但是1.215可以上外网。虚拟IP也就是我们告知给用户访问的IP地址,一定是在互联网上可见的,所以我们可以不使用真实的外网IP,而是使用一个网卡别名的方式,重新定义一个新的IP,这样在后期做调度器高可用的时候也可以轻易做到IP地址飘移。

2.调度器外网就模拟使用192.168.1.215,VIP则使用192.168.1.88,DIP:10.10.10.1

3.物理服务器RealServer两台,仅使用内网IP,分别为10.10.10.11和10.10.10.22

现在开始做实验

1.首先Director应该使用两个网卡,一个是“外网”IP:192.168.1.215,另一个使用内网网卡(在虚拟机上添加使用仅主机模式的网卡),且配置好DIP地址为:10.10.10.1,两个RealServer也同样将网卡改成仅主机模式,注意两台RS需要先配置好http服务,且能通过Director正常访问。为了加以却别,我们让RS1的index.html界面显示Website1,RS2显示Website2.如下即可:



附注一下Director和个RS的ip配置方法:

a)Director上:

配置虚拟IP,即VIP:# ifconfig eth0:0 192.168.1.88

配置DIP:# ifconfig eth1 10.10.10.1/8

添加默认路由:# route add defaulf gw 192.168.1.1(这个一般在eth0的网卡中配置过了,如果配置过就不用再配置了)

b)RS1上

配置RIP:# ifconfig eth0 10.10.10.11/8

配置默认路由:# route add defalut gw 10.10.10.1

c)RS2上

配置RIP:# ifconfig eth0 10.10.10.22/8

配置默认路由:# route add defalut gw 10.10.10.1

在这里需要注意一下,先保证Director可以ping通两个RS的地址,如果不能通过curl访问,要先检查RS的http服务启动没有,iptables关闭了吗,最好把iptables和selinux关闭。

2.在Director上面安装ipvsadm,然后修改内核参数,使该机可以进行端口转发。

编辑/etc/sysctl.conf,将net.ipv4.ip_forward = 0修改为net.ipv4.ip_forward = 1,然后使用命令sysctl -p使该参数马上生效。

3.配置LVS

在Director上配置以下信息:

# ipvsadm -A -t 192.168.1.88:80 -s rr

# ipvsadm -a -t 192.168.1.88:80 -r 10.10.10.11 -m 

# ipvsadm -a -t 192.168.1.88:80 -r 10.10.10.22 -m 

4.查看一下我们配置的LVS,可以看出我们配置的LVS服务是哪个,服务类型,以及为该服务提供负载均衡的RS信息,还有各RS的权重(当然目前权重都是1)。



5.在浏览器访问192.168.1.88,可以看出每刷新一次,就会显示不同的站点提供的页面。我们使用ipvsadm的统计命令来查看一下,可以发现两个RS所提供的响应请求比例约等于1。如下图:



注意:下面是关于LVS的常用命令,以及相关的调度算法。其中rr是指轮询调度算法,也就是会一次访问10.10.10.11,一次访问10.10.10.22这样一直轮询下去,所以一定我们制定了调度算法是rr之后,在添加RS就不需要指定各自的权重了。这样就不能有效的发挥RS的不同性能,因此生产环境中更多使用的就是wlc,即基于权重的最少访问调度算法。

6.我现在修改一下LVS的调度算法,然后修改个RS的权重,来测试一下RS是否能安装我们设定的权重进行响应。



可以看出,虽然将10.11的权重设为3,但是在wlc这种调度算法中并不是单纯让10.11提供三次响应再让10.22提供一次响应,而是会再根据10.11当前服务连接数,通过计算以后才决定调用哪台RS为其提供响应服务。但是如果请求访问足够多,访问时间足够长,这个值是接近于3:1的。

注意:以下调度算法以及ipvsadm的常用命令由马哥(马永亮)总结。

LVS的调度方法:10种

  静态方法:仅根据算法本身进行调度

     rr:Round Robin 轮询(简单的轮询调用后端服务器)

     wrr:Weighted RR 权重轮询(根据某个服务器权重不同,而分发的力度不同)

     sh:source hashing源地址hash(只要来自同一个IP地址的请求都发往同一个服务器)

     dh:destination hashing 目标地址hash(应用场景很少)

     注意!!!静态方法是完全不考虑后端服务器当前的处理状态,仅仅按照初始一成不变的调度规则进行请求分发。比如

  服务器A的权重为3,B的为2,C的为1,但是若A的请求在一段时间后,仍然后1000个请求,B仅有200请求时,仍然按照A的权

  重值3进行请求分发,这样就大大影响了负载均衡的效率。

 

 

  动态方法:根据算法及RS当前的复制状态

  lc:Least Connection 最少连接

  计算当前的负载Overhead=Active*256+Inactive来实现

  结果中:最小者胜出

 

  wlc:Weighted LC

  Overhead=(Active*256+Inactive)/weight

  结果中:最小者胜出

 

  sed:Shortest Expect Delay  最短期望延迟
Overhead=(Active+1)*256/weight

    

    aq:Nerver Queus: 永不排队(也就是第一次根据权重每个主机先分发一次,然后在根据sed模型进行分发)

    lblc:Locality-based least connection 基于本地的最少连接

    相当于dh+lc

    Lblcr:基于复制的基于本地的最少连接 Replicated and Locality-based least connection

ipvsadm

集群服务相关

-A:添加一个集群服务
-t:tcp
-u:udp
-f: firewall make 通常应用于将两个或以上的服务绑定为一个服务进行处理时使用
service-address
-t IP:port
-u ip:port
-f firewall_mark

    -s 调度算法,默认为wlc

    -p: timeout persistent connection 持久连接

-E:修改定义过的集群服务

-D -t|u|f service-address:删除指定的集群服务

RS相关

-a:向指定的CS中添加RS
-t|-u|-f service-address:指明将RS添加至那个Cluster Service 中

 -r:指定RS,可以包含{IP[:port]},只有支持端口映射的LVS类型才允许此处使用跟集群服务中不同的端口

 lvs类型:
    -g:Gateway,DR
    -i:ipip,TUN
    -m:masquerade(地址伪装),NAT
    默认为DR

  指定RS权重
  -w
  上限下限:
  -x:下限
  -y:上限

 -e:修改指定的RS属性

 -d  -t|u|f  service-address  -r  server-address:在指定的集群服务中删除一个指定的RS

清空所有的集群服务:
 -C

保存规则(使用输出重定向):
ipvsadm-save
ipvaadm -S

载入指定的规则:(使用输入重定向)
ipvsadmin-restore
ipvasdm -R

查看ipvs规则等

  -L [options]

  -n 使用数字格式显示IP地址,不反解

  -c:查看连接数相关信息,可以查看出当前来自哪些客户端的请求,以及为每个客户端响应的RS是哪个。

  --stats:显示统计数据

  --rate:数据传输速率

  --timeout:显示tcp会话时长

  --daemon:守护进程的信息

  --sort:对虚拟服务进行排序,默认为升序

  --exact:精确显示,不做单位换算

-Z:计数器清零
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息