Chinaunix首页 | 论坛 | 博客
  • 博客访问: 269728
  • 博文数量: 41
  • 博客积分: 2560
  • 博客等级: 少校
  • 技术积分: 465
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-01 15:56
文章分类

全部博文(41)

文章存档

2011年(10)

2010年(31)

我的朋友

分类: LINUX

2010-07-21 15:14:49

1.lvs DRTUN模式介绍

1 .1 Lvs

LVSLinux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在19985月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。目前有三种IP负载均衡技术(VS/NATVS/TUNVS/DR

本文主要介绍DR模式运用

1 .2 DR模式     

DR模式是什么?撇开lvs调度算法部分,DR模式的原理就是,将报文直接路由给目标服务器(Direct Routing),其实这里没有routing啥事情,叫做Direct Select更准确一些,为什么这么说呢?因为他直接不修改数据包,他直接把数据包打包成以太网的数据帧,只是这个数据帧里的目标MAC地址是最终的真实服务器的MAC地址,所以DR模式要求在同一个物理网段,不能跨路由。

当目标服务器收到这个数据帧的时候,把它解包,当服务器发现数据包的目标地址(也就是VIP)是在本地的网络设备上(一般都是在真实服务器的lo:0上绑定一个vip地址),服务器处理这个数据包,然后根据本地路由表将响应报文直接返回给客户。

 

具体的流程如图:




1 .3 TUN模式

   TUN模式又是什么呢lvs上的说明是 virtual server via IP Tunneling其实更准确一些应该叫virtual server via IP Half Tunneling因为通道只是半边的通道只在真实服务器上建立。你需要在真实的服务器上开设一个tunnel,并且绑定vip到这个tunnel上,撇开lvs的调度算法不谈,当他选择了一台服务器的时候,他就会把发送到vip服务器的数据包,封装成目标地址是选择的服务器ip的数据包,发送到真实的服务器,真实的服务器上因为有tunnel,会对这个ip包进行解包操作,同时发现解包后的数据包的目标ip正好是自己的tunnel上绑定的ip,然后他就收下这个数据包自己处理,然后根据本地路由把数据返回到用户端,整个过程不需要在lvs上建立通道,通道只是在真实服务器上建立,建立的目的是为了解包

 

具体的流程如图:



2 具体操作

2.1 keepalived 

这里是用keepalived来进行lvs的建立和服务器和vip的健康检查,其实keepalived就像一个shell他自动的给你做lvs+vrrp

keepalived本身来做真实服务器的健康检查vrrp来做vip的冗余。

 

2.2 安装

安装环境:

VIP192.168.11.219

Loadbalance:192.168.11.217 192.168.11.218

Realserver: 192.168.11.215 192.168.11.216

   所需软件:keepalived

             Ipvsadm(主要是管理查看作用)

# ln -s /usr/src/kernels/2.6.18-92.el5-i686 /usr/src/linux

# tar -zxvf ipvsadm-1.24.tar.gz

# cd ipvsadm-1.24

# make && make install

 

# tar -zxvf keepalived-1.1.15.tar.gz

# cd keepalived-1.1.15

# ./configure

# make && make install

cp /usr/local/etc/rc.d//init.d/keepalived /etc/init.d/

cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

mkdir /etc/keepalived

cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

cp /usr/local/sbin/keepalived /usr/sbin/

 

 

2.3 配置

#vi  keepalived.conf

 

! Configuration File for keepalived

 

global_defs {

   notification_email {

   #  acassen@firewall.loc

   #  failover@firewall.loc

   #  sysadmin@firewall.loc

   }

   #notification_email_from Alexandre.Cassen@firewall.loc

   #smtp_server 192.168.200.1

   #smtp_connect_timeout 30

   router_id LVS_DEVEL

}

 

vrrp_sync_group me {

        group {

                VI_1

        }

}

 

vrrp_instance VI_1 {

    state MASTER

interface eth0

lvs_sync_daemon_inteface eth0  #负载均衡器之间的监控接口,类似于HA HeartBeat的心跳线。但它的机制优于Heartbeat,因为它没有裂脑这个问题,它是以优先级这个机制来规避这个麻烦的。在DR模式 中,lvs_sync_daemon_inteface 与服务接口interface 使用同一个网络接口

    virtual_router_id 51 #虚拟路由标识,这个标识是一个数字,并且同一个vrrp实例使用唯一的标识。即同一个vrrp_stance,MASTERBACKUPvirtual_router_id是一致的,同时在整个vrrp内是唯一的

 mcast_src_ip 192.168.11.217 

    #mcast_src_ip #多播的源ip,设置为这台lvsip 好像不用也行

    priority 100 #路由的优先级别,主lvs要设置的比从lvs要高

    advert_int 1

    authentication {

        auth_type PASS #同一vrrp实例MASTERBACKUP 使用相同的密码才能正常通信

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.11.219 #虚拟ip,也就是vip地址。可以设置很多组vip

    }

}

 

virtual_server 192.168.11.219 80 {

    delay_loop 3 #健康检查的间隔

lb_algo wlc #lvs的调度算法

lb_kind DR #lvs的调度模式

persistence_timeout 50 #连接保持的超时时间,保证一个用户的连接总是导向到同一个服务器,当用户第一次访问的时候,他的访问请求被负载均衡器转给某个真实服务器,这样他看到一个登陆页面,第一次访问完毕;接着他在登陆框填写用户名和密码,然后提交;这时候,问题就可能出现了登陆不能成功。因为没有会话保持,负载均衡器可能会把第2次的请求转发到其他的服务器

    #ipvsadm -Lcn 观察是否生效

protocol TCP

     ha_suspend  #禁止,vip失效的时候对真实服务器进行健康检查(也就是说备用服务器不会去做真实服务器的健康检查)

 

    real_server 192.168.11.215 80 {

        weight 3  #权重,给这台服务器多少的压力

        TCP_CHECK {

            connect_timeout 3  #服务器健康检查的方式,以及timeout的时间。#健康检查的方式还有获取http内容等。

        }

 

    }

 

更多的配置可以参考 

keepalived.conf 默认是在/etc/keepalived/keepalived.conf

 

备用lvskeepalived.conf和主的唯一区别就是MASTER改成BACKUP,   priority的数值要比主lvs小。

 

2.4 realserver 操作

主要是关闭arp响应

写个脚本执行一下

 

#!/bin/bash

        # description: Config realserver lo and apply noarp

SNS_VIP=192.168.11.219

        BROADCAST=192.168.11.255

        . /etc/rc.d/init.d/functions

        case "$1" in

        start)

             ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $BROADCAST up

#            /sbin/route add -host $SNS_VIP dev lo:0

              echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

              echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

              echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

              echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

              sysctl -p >/dev/null 2>&1

              echo "RealServer Start OK"

         ;;

        stop)

               ifconfig lo:0 down

               route del $SNS_VIP >/dev/null 2>&1

               echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore

               echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce

               echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore

               echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce

               echo "RealServer Stoped"

               ;;

        *)

               echo "Usage: $0 {start|stop}"

               exit 1

        esac

        exit 0

  2.6 启动 keepalived

/etc/init.d/keepalived start

经过以上步骤就可以测试lvs具体功能了

 

 

参考文章:

IP负载均衡技术

 

Manuals and internal documents  http://www.linuxvirtualserver.org/Documents.html





阅读(5052) | 评论(0) | 转发(0) |
0

上一篇:nagios安装配置

下一篇:日志处理

给主人留下些什么吧!~~