LVS服务器实验

来源:互联网 发布:mac nice to meet you 编辑:程序博客网 时间:2024/05/29 11:06

一、LVS简介

LVS(Linux Virtual Server),是一个服务器集群系统项目。随着互联网的飞速发展,人们对于服务器的要求越来越高。很多网络服务因为访问次数爆炸式地增 长而不堪重负,不能及时处理用户的请求,导致用户进行长时间的等待,大大降低了服务质量。如何建立可伸缩的网络服务来满足不断增长的负载需求已成为迫在眉 睫的问题。

针对高可伸缩、高可用网络服务的需求,我们给出了基于IP层和基于内容请求分发的负载平衡调度解决方法,并在Linux内核中实现了这些方法,将一组服务器构成一个实现可伸缩的、高可用网络服务的虚拟服务器。

虚拟服务器即,一组服务器通过高速的局域网或者地理分布的广域网相互连接,在它们的前端有一个负载调度器(Load Balancer)。负载调度器能无缝地将网络请求调度到真实服务器上,从而使得服务器集群的结构对客户是透明的,客户访问集群系统提供的网络服务就像访 问一台高性能、高可用的服务器一样。客户程序不受服务器集群的影响不需作任何修改。系统的伸缩性通过在服务机群中透明地加入和删除一个节点来达到,通过检 测节点或服务进程故障和正确地重置系统达到高可用性。由于我们的负载调度技术是在Linux内核中实现的,我们称之为Linux虚拟服务器(Linux Virtual Server)。

目前,LVS项目已提供了一个实现可伸缩网络服务的Linux Virtual Server框架。在LVS框架中,提供了含有三种IP负载均衡技术的IP虚拟服务器软件IPVS、基于内容请求分发的内核Layer-7交 换机KTCPVS和集群管理软件。可以利用LVS框架实现高可伸缩的、高可用的Web、Cache、Mail和Media等网络服务;在此基础上,可以开 发支持庞大用户数的、高可伸缩的、高可用的电子商务应用。


二、IPVS简介

在调度器的实现技术中,IP负载均衡技术是效率最高的。在已有的IP负载均衡技术中有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation),大多数商品化的IP负载均衡调度器产品都是使用此方法,如Cisco的LocalDirector、F5的Big/IP和 Alteon的ACEDirector。在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。所以,IPVS软件实现了这三种IP负载均衡技术,它们的大致原理如下:

  1. Virtual Server via Network Address Translation(VS/NAT)
    通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。

  2. Virtual Server via IP Tunneling(VS/TUN)
    采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报 文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。

  3. Virtual Server via Direct Routing(VS/DR)
    VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地 提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连 在同一物理网段上。

除了以上三种技术,还有一种FULLNAT。官方主页:http://kb.linuxvirtualserver.org/wiki/IPVS_FULLNAT_and_SYNPROXY

下面的实验也是基于FULLNAT的。


三、部署LVS服务器(在虚机上实验)

1.安装Centos 6.5

2.安装编译好的lvs kernel

rpm -ivh --force kernel-2.6.32-2.x86_64.rpm

3.生成initramfs并修改启动配置

dracut -f /boot/initramfs-2.6.32.img 2.6.32

cp -f grub.conf /boot/grub/grub.conf

4.在 /etc/sysctl.conf文件中追加以下配置

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.core.netdev_max_backlog = 10000


net.ipv4.vs.defence_tcp_drop = 0

net.ipv4.vs.fullnat_timestamp_remove_entry = 0

net.ipv4.vs.fullnat_mss_adjust_entry = 0

net.ipv4.vs.fullnat_toa_entry = 0

net.ipv4.vs.defence_udp_drop = 0


vm.swappiness = 0

vm.dirty_ratio=40

5.在CentOS 6.5上安装一些包

rpm -ivh pciutils-3.1.10-2.el6.x86_64.rpm  libyaml-0.1.3-4.el6_6.x86_64.rpm PyYAML-3.10-3.1.el6.x86_64.rpm libnl-1.1.4-2.el6.x86_64.rpm libselinux-python-2.0.94-5.3.el6_4.1.x86_64.rpm

rpm -ivh ipvsadm-1.26-1.x86_64.rpm  keepalived-1.2.2-5.x86_64.rpm

6.关闭iptables和selinux

service iptables stop

service ip6tables stop

chkconfig iptables off

chkconfig ip6tables off

setenforce 0

emacs /etc/selinux/config  ==> disabled

7.配置keepalived

一共开启三台虚机。一台作lvs(向上IP为192.168.0.3,向下IP为192.168.1.3,虚IP为192.168.0.31),两台作real server(192.168.1.1和192.168.1.2)

在实机上搭建两个网桥br0和br1。lvs的eth0属于br0,lvs的eth1以及两台rs的eth0属于br1。

emacs /etc/keepalived/keepalived.conf

! Configuration File for keepalived


local_address_group  laddr_g1  {

     192.168.1.3

}


virtual_server_group  oss  {

     192.168.0.31  80

}


vrrp_sync_group VG1 {

     group {

         VI_EXT

      }

}


vrrp_instance VI_EXT {

     state MASTER

     interface eth0

     virtual_router_id 200

     priority 50

     advert_int 1

     authentication {

         auth_type PASS

         auth_pass 123456

     }

     virtual_ipaddress {

         192.168.0.31

     }

}


virtual_server  group  oss  {

         delay_loop  3

         lb_algo  wrr

         lb_kind  FNAT

         alpha

         protocol  TCP

         persistence_timeout  1000

         laddr_group_name  laddr_g1


         real_server 192.168.1.1 80  {

                 weight  100

                 TCP_CHECK  {

                         Nb_get_retry  3

                         connect_timeout  50

                 }

         }

         real_server 192.168.1.2 80  {

                 weight  100

                 TCP_CHECK  {

                         Nb_get_retry  3

                         connect_timeout  50

                 }

         }

 }

service keepalived restart

8.realserver配置

在两个虚机上装上一个简单的HTTP testing tool(wbox),并关掉防火墙和selinux服务,开启wbox的server模式

yum install wbox

systemctl disable firewalld

systemctl stop firewalld

setenforce 0

wbox servermode webroot /tmp/mydocs serverport 80

9.测试

lvs服务器

ipvsadm -l

PC

ping 192.168.0.31

curl 192.168.0.31

实际测试发现,curl虚地址会导致lvs服务器网络崩溃,原因可能是虚机网桥的影响。

后来在物理服务器上通过测试。