fdjhj 发表于 2015-8-28 08:56:21

lvs的NAT模式

1、什么是LVS?

linux virtual service,linux虚拟服务,使用多台服务器一起工作来提高服务的访问和处理性能


   通过LVS提供的负载均衡技术和linux系统实现一个高性能、高可用的服务器集群,它具有良好的可靠性、可扩展性和可操作性,成本低廉的特性
负载均衡:软件实现、硬件实现
负载均衡设备:


2、lvs的工作模式
   (1)nat模式 :通过网络 地址转换访问服务(最多同时支持20台服务器)
   (2)tun模式:通过IP隧道访问服务

   (3)dr模式:(direct )直接调度访问服务, 直接路由,

         即调度服务器与真实服务器都有一块网卡连在同一个物理网段上。

LVS 是 LinuxVirtual Server ,Linux 虚拟服务器;是一个虚拟的服务器集群【多台机器 LB IP】。LVS 集群分为三层结构:

[*]负载调度器(load balancer):它是整个LVS 集群对外的前端机器,负责将client请求发送到一组服务器[多台LB IP]上执行,而client端认为是返回来一个同一个IP【通常把这个IP 称为虚拟IP/VIP】

[*]服务器池(server pool):一组真正执行client 请求的服务器,一般是我们的web服务器;除了web,还有FTP,MAIL,DNS

[*]共享存储(shared stored):它为 server pool 提供了一个共享的存储区,很容易让服务器池拥有相同的内容,提供相同的服务[不是很理解]



4、LVS的NAT 模式:



server1/2 是后端服务器/真实服务器 用来提供服务
Director Server:调度服务器
RIP:实际是指真实服务器的IP地址
DIP:调度服务器地址,与外面连接的地址是调度地址:172.16.10.10
VIP:虚拟IP
CIP:客户端IP地址

进入防火墙之后 进行地址转换



iptables命令详解:

   1.filter 定义数据包中允许或者不允许的策略
   2.nat 定义地址转换的
   3.mangle功能:修改报文原数据 即:修改TTL

在做NAT和DNAT的时候,目标地址转换必须在路由之前转换 。所以 我们必须在外网而后内网的接口处进行设置关卡 。


这五个位置也被称为五个钩子函数(hook functions),也叫五个规则链。
1.PREROUTING (路由前)
2.INPUT (数据包流入口)
3.FORWARD (转发管卡)
4.OUTPUT(数据包出口)
5.POSTROUTING(路由后)
这是NetFilter规定的五个规则链,任何一个数据包,只要经过本机,必将经过这五个链中的其中一个链。      

iptables定义规则的方式:
格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION
-t table :3个filter nat mangle
COMMAND:定义如何对规则进行管理
chain:指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的
CRETIRIA:指定匹配标准
-j ACTION :指定如何进行处理

比如:不允许172.16.0.0/24的进行访问。
iptables -t filter -A INPUT -s 172.16.0.0/16 -p udp --dport 53 -j DROP
当然你如果想拒绝的更彻底:
iptables -t filter -R INPUT 1 -s 172.16.0.0/16 -p udp --dport 53 -j REJECT

iptables -L -n -v #查看定义规则的详细信息



Director Method:(调度方法)

RR:轮循调度

WRR:加权轮循调度。根据硬件配置的好坏来设置权值

LC:最小连接数调度。连接数量最少,就将用户的访问分配到那台服务器,让其为用户提高服务。
WLC:加权最小连接调度
LBLC:基于地址的最小连接数调度。若后端服务器负荷已满,则就会将用户请求分配给另一台连接数最小的那台服务器
DH:目标地址散列算法,以目标地址为关键字来查找一个静态hash表来选择RS

SH:源地址散列算法,以源地址为关键字来查找一个静态的hash表来选择RS


用到 LVS服务最多的前三种 : WEB服务,数据库, 邮件。


LVS的NAT模式配置

(1) 防火墙服务器配置:
   两个网卡 eth0:10.0.2.201netmask:255.255.0.0

         eth1:192.168.10.5netmask:255.255.0.0   

   添加网卡要poweroff再添加

    启用路由转发(net.ipve.ip_forward=1 )   

   # vim /etc/sysctl.conf
   
   net.ipv4.ip_forward = 1

   # sysctl -p
   配置 NAT(目的地址转换)   


   # iptables -t nat -A PREROUTING -d 10.0.2.201 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.6


   # iptables -F

   # service iptables save



(2) Director服务器配置:(调度服务器)

         两块网卡eth0: 192.168.10.6   netmask:255.255.0.0

                     eth1:172.16.10.3   netmask:255.255.0.0

       eth1的配置文件:

      # cp /etc/sysconfig/network-scripts/ifcfg-eth0   /eth1 然后将DEVICE=eth1注释掉UUID 修改MAC地址
   配置网关 eth0的gateway:192.168.10.5eth1不用配置网关
    配置调度表

         # yum install ipvsadm

            如果无法install,就进入挂载点下的Packages下 # ls |grep ipvsadm

         # ipvsadm -A -t192.168.10.6:80 -s rr    # -A 添加调度服务器 添加调度地址
   
      # ipvsadm -a -t 192.168.10.6:80 -r 172.16.10.1:80 -m   # 真实服务器 -a 添加-m 指net模式

         # ipvsadm -a -t 192.168.10.6:80 -r 172.16.10.2:80-m# 真实服务器

      # service ipvsadm save#

      # service ipvsadm start

      # ipvsadm -L -n    # -L -n 查看调度表 Masq 表示NAT模式 Activeconn 活动的连接数量

      # ipvsadm -L -n --stats# Conns连接数量 INPkts 进来的数据包 OUTPkts出去的数据包

      # watch -n 1 ipvsadm -L -n --stats# watch 每隔一秒钟显示一次。动态观察
   

调度服务器由于进行了配置,

就会将收到的数据包的目标IP地址转换为真实服务器的IP地址。(server1 ,server2,server3...)



(3 )真实服务器/后端服务器 (RS - real server)
   配置IP地址 server1:172.16.10.1netmask : 255.255.0.0

                  server2:172.16.10.2netmask : 255.255.0.0

                这两台RS服务器都要进行下列配置   

    配置网关 gateway:172.16.10.3 (调度服务器eth1的IP)
       目前配两台真实服务器,为client 提供web服务:

                         #yum install http*

                         # vim /etc/httpd/conf/httpd.conf

                         http://note.youdao.com/yws/res/21044/60A744DCBBA540CA9C881DD3939338CC-->将#去掉。可以自己定义如:www.zll.com 也可以不修改只把#去掉就可以了。

             # cd /var/www/html
               # vim index.html ---> hello!ZLL


      启动相应服务 service httpd start

       清空防火墙   iptables -F
      测试:# curl   172.16.10.1      


(4) 客户端:
      IP地址:10.0.2.200 (防火墙的eth0 ip必须要和客户端IP在同一个网段)

          测试: # curl10.0.2.201 (防火墙eth0的ip )

            或:在浏览器输入:10.0.2.201

      若看到在RS服务器配置的index.html的内容,则成功




(5 ) lvs的持久性连接
1、socket:

2、cookie:保存用户的相关信息.cookie数据保存在客户端。

          cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session
3、session:保存用户提交的表单,选择之类的。session数据保存在服务器端

                     session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面            应当使用COOKIE



   (1)PCC(persistent client connecttions)方式:将来自于同一个客户端对所有端口的请求,
   始终定向到上次选择的RS,缺点是不能实现不同的服务请求访问不同的RS。
   # ipvsadm -A -t 10.0.5.150:0 -s rr -p 600
   # ipvsadm -a -t 10.0.5.150:0 -r 10.0.5.151 -m
   # ipvsadm -a -t 10.0.5.150:0 -r 10.0.5.152 -m
      
    (2)PPC(persistent port connecttions)方式:将来自于同一个客户端对同一个集群服务的请求
   ,始终定向到上次选定的RS
   # ipvsadm -A -t 10.0.5.150:80 -s rr -p 600
   # ipvsadm -a -t 10.0.5.150:80 -r 10.0.5.151:80 -m
   # ipvsadm -a -t 10.0.5.150:80 -r 10.0.5.152:80 -m
      
   (3)PNMPP(persistent Netfilter Marked Packet Persistence):持久防火墙标记连接,
   根据iptables的标记规则,将相关的服务标记为同一类别的请求
   # iptables -t mangle -A PREROUTING -d 10.0.5.150 -p tcp --dport 80
       -j MARK --set-mark 10 (0-->99)
   # iptables -t mangle -A PREROUTING -d 10.0.5.150 -p tcp --dport 443
       -j MARK --set-mark 10 (0-->99)
      
   # iptables -t mangle -A PREROUTING -d 10.0.5.150 -p tcp --dport 21
       -j MARK --set-mark 20 (0-->99)
   # iptables -t mangle -A PREROUTING -d 10.0.5.150 -p tcp --dport 20
       -j MARK --set-mark 20 (0-->99)
   
   # ipvsadm -A -f 10 -s wrr -p 600   10标记的 使用wrr算法 600秒
   # ipvsadm -A -f 20 -s wrr -p 600
   # ipvsadm -a -f 10 -r 10.0.5.151 -m -w 2-m表示nat模式 -w 权重为2
   # ipvsadm -a -f 10 -r 10.0.5.152 -m -w 3
   # ipvsadm -a -f 20 -r 10.0.5.153 -m -w 2
   # ipvsadm -a -f 20 -r 10.0.5.154 -m -w 3


页: [1]
查看完整版本: lvs的NAT模式