Chinaunix首页 | 论坛 | 博客
  • 博客访问: 635293
  • 博文数量: 85
  • 博客积分: 1797
  • 博客等级: 上尉
  • 技术积分: 1238
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-02 08:53
个人简介

职位:技术总监 1、精通c++(linux平台、vc++Mfc、qt)、java、php、unity3d,略懂python 2、用c++开发过嵌入式产品,用c++开发过大型银行运维产品 3、用java开发大型银行运维产品,学校教务系统 4、用php开发进销存系统(在销售中),用php开发淘宝小程序 5、用unity3d开发衣柜设计软件,在运营中

文章分类

全部博文(85)

分类: 服务器与存储

2016-07-05 12:19:31

一、集群

 在各种网络服务普遍应用的今天,随网络速度的提高以及用户的增加,在一些繁忙的场合,单凭一台机器已经无法就能应付所有的网络请求了。为了解决这个问题,许多用户就采 用一组cluster(集群)来代替单一的机器。cluster可以将多台计算机连接起来协同运作以对外提供各种服务,比如Apache、FTP、Mail等。

在Linux上最常见的、也可能是运用最广泛的cluster方案就是LVS(Linux Virtual
Server),很高兴LVS也是一个中国人创建和开发的开放源码项目。LVS自1998年开始,发展到现在已经是一个比较成熟的技术项目了。有许多比较著名网站和组织都在使用LVS架设的cluster,比如:、sourceforge.net、等。

在lvs基础上,出现了很多商业软件,如redhat的piranha,turbo linux的turbo cluster,都是基于lvs的核心代码。


二、Lvs安装配置过程

1、安装ipvsadmin

从安装盘中找到ipvsadm-1.24-10.i386.rpm

    rpm  -ivh  ipvsadm-1.24-10.i386.rpm


2、查看系统是否支持ipvs方法:

n  如果你能在目录/lib/modules/2.*.*-*/kernel/net/ipv4/ipvs中看到ip_vs_*文件,就证明你的系统已经支持ipvs.现在内核 2.6.* 的都已经默认支持了ipvs了,

n  modprobe -l | grep ipvs

[root@localhost ipvs]# modprobe -l | grep ipvs

/lib/modules/2.6.18-194.el5/kernel/net/ipv4/ipvs/ip_vs.ko

/lib/modules/2.6.18-194.el5/kernel/net/ipv4/ipvs/ip_vs_dh.ko

/lib/modules/2.6.18-194.el5/kernel/net/ipv4/ipvs/ip_vs_ftp.ko

/lib/modules/2.6.18-194.el5/kernel/net/ipv4/ipvs/ip_vs_lblc.ko

/lib/modules/2.6.18-194.el5/kernel/net/ipv4/ipvs/ip_vs_lblcr.ko

/lib/modules/2.6.18-194.el5/kernel/net/ipv4/ipvs/ip_vs_lc.ko

/lib/modules/2.6.18-194.el5/kernel/net/ipv4/ipvs/ip_vs_nq.ko

/lib/modules/2.6.18-194.el5/kernel/net/ipv4/ipvs/ip_vs_rr.ko

/lib/modules/2.6.18-194.el5/kernel/net/ipv4/ipvs/ip_vs_sed.ko

/lib/modules/2.6.18-194.el5/kernel/net/ipv4/ipvs/ip_vs_sh.ko

/lib/modules/2.6.18-194.el5/kernel/net/ipv4/ipvs/ip_vs_wlc.ko

/lib/modules/2.6.18-194.el5/kernel/net/ipv4/ipvs/ip_vs_wrr.ko

n  lsmod |grep ip_vs

[root@localhost ipvs]# lsmod |grep ip_vs

ip_vs                  78081  0

3、环境:三台电脑

192.168.1.96 前端负载均衡器

192.168.1.97 真实服务器

192.168.1.97 真实服务器

使用的虚拟ip为:192.168.1.65

4、测试方法:

使用服务器上的httpd测试,通过浏览器访问。


5、Dr模式配置步骤:

96电脑(前端负载均衡器):

l  安装ipvsadm

rpm  -ivh  ipvsadm-1.24-10.i386.rpm

l  配置虚拟ip:

      ifconfig eth0:0 192.168.1.65 netmask 255.255.255.255 broadcast 192.168.1.65 up

l  配置转发功能:

       echo 1 > /proc/sys/net/ipv4/ip_forward 

l  增加虚拟服务器:

       ipvsadm -A -t 192.168.1.65:80 -s wlc

l  增加真实服务器:

       ipvsadm -a -t 192.168.1.65:80 -r 192.168.1.97 -g

ipvsadm -a -t 192.168.1.65:80 -r 192.168.1.98 –g

l  删除真实服务器(可选):

                     ipvsadm -d  -t 192.168.1.65:80 -r 192.168.1.98

l  查看lvs服务器清单:



l  启动httpd

chkconfig httpd on          

             service httpd start   


97/98电脑(真实服务器)

l  关闭arp:

把下面四句添加在/etc/sysctl.conf  文件 最后:
             net.ipv4.conf.lo.arp_ignore = 1
             net.ipv4.conf.lo.arp_announce = 2
             net.ipv4.conf.all.arp_ignore = 1
             net.ipv4.conf.all.arp_announce = 2

l  配置ip路由:

ifconfig lo:0 192.168.1.65 netmask 255.255.255.255 broadcast 192.168.1.65 up
      route add -host 192.168.1.65 dev lo:0

l  启动httpd:

chkconfig httpd on          

             service httpd start   

l  改变网页的起始页:

      97上:echo ' the site is 192.168.1.97' > /var/www/html/index.html

98上:echo ' the site is 192.168.1.98' > /var/www/html/index.html

6、测试:

在浏览器输入:, 然后不断刷新,会看到不同的结果。

the site is 192.168.1.97和the site is 192.168.1.98交替出现。另外在96机子上执行ipvsadm –l 最后面一列的数字会在增长,说明转发的次数在增加。

7、存在的问题:

1、            上面仅仅是使用了lvs,但实际情况下,一个前端负载均衡器会形成一个单点,如果这个负载均衡器挂了,整个集群就挂了,所以还应该有个备用负载均衡器,两个负载均衡器通过heartbeat或者keepalived来管理

2、            在实验中有时会出现负载均衡不均衡的问题,比如98机子始终切换不过去,刚配置完三台电脑的时候挺好的,但到第二天在开虚拟机的时候会出现这种情况。下面增加ldirectord后,这个问题也自然而然的解决了。

3、            Lvs只能分配,但不能知道那个服务器是否挂了,这需要使用ldirectord(或keepalived)来探测服务器的可用性。

8、结论

       Lvs只能解决负载均衡的问题,要想解决高可用的服务器,lvs要与其他软件搭配。

       有两种搭配方式:

Lvs + heartbeat + ldirectord

Lvs + keepalived

 

Heartbeat在双机热备中已经使用过了,原理配置方法都很清楚了,由于时间关系先不配置了,下面是关于ldirectordkeepalibed的使用

三、Ldirectord

Ldirectord属于heartbeat的一部分,因为LVS只负责分发,不负责健康检查,所以,当后面一台机器挂掉,有可能继续分配请求, 使用ldirectord 可以自动将挂掉的机器移除.

1.    电脑环境

前端负载均衡器:192.168.0.11

真实服务器1     192.168.0.21

真实服务器1     192.168.0.22

 

2.  安装

分别下载一下安装包并安装:

perl-MailTools-1.77-1.el5.centos.noarch.rpm

perl-Compress-Zlib-1.42-1.fc6.i386.rpm

perl-HTML-Parser-3.55-1.fc6.i386.rpm

perl-HTML-Tagset-3.10-2.1.1.noarch.rpm

perl-libwww-perl-5.805-1.1.1.noarch.rpm

perl-TimeDate-1.16-5.el5.noarch.rpm

heartbeat-ldirectord-2.1.4-11.el5.i386.rpm

       其中perl-MailTools-1.77-1.el5.centos.noarch.rpm这个包不要在我们的电脑上下载,要在笔记本上下载,在我们电脑上也能下载,但却是个坏包。捣鼓了半天始终无法安装,还曾怀疑制作rpm包的人比较晕,弄了个坏的rpm包出来。

3.    配置

 

checktimeout=3

checkinterval=1

#fallback=127.0.0.1:80

autoreload=yes

logfile="/var/log/ldirectord.log"

#logfile="local0"

#emailalert="admin@x.y.z "

#emailalertfreq=3600

#emailalertstatus=all

quiescent=no

# Sample for an http virtual service

        real=192.168.0.21:80 gate

        real=192.168.0.22:80 gate

        fallback=127.0.0.1:80 gate

         service=http

        scheduler=rr

        #persistent=600

        #netmask=255.255.255.255

        protocol=tcp

        checktype=negotiate

        checkport=80

        request="index.html"

        # receive="Test Page"

        # virtualhost=

 

4.    启动ldirectord

Service  ldirectord  start

5.    测试

正常情况下,在192.168.0.11上执行ipvsadm  -l,结果为:

停止192.168.0.21httpd服务。

192.168.0.11上执行ipvsadm  -l,结果为:

上面的结果显示192.168.0.21已经不存在了,被ldirectord移除了。

四、Keepalive

Keepalive是为lvs而做的,目的是为了lvs的高可用性,解决lvs的单点问题,以及真实服务器的检测功能(此功能相当于ldirectord

1.    编译安装

没有可用的rpm包,采用编译源码安装。

下载keepalived-1.2.2.tar.gz,并解包。

./configure

上面显示结果没有使用IPVS框架。这个选项必须为yes才行。原因是系统没有安装系统开发包。安装系统开发包即可,可以用yum  -install  kernel-dev

由于虚拟机没设置上网,所以我直接从别的centos上把/usr/src/kernels/2.6.18-194.el5-i686这个文件夹拷了过来。然后做个链接,让keepalived能找到。

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

./configure   --prefix=/usr/local/keepalived

可看到结果

 

Make的时候出现如下错误:

/usr/include/time.h:105: 错误:与 ‘timer_t’ 类型冲突

/usr/src/linux/include/linux/types.h:31: 错误:‘timer_t’ 的上一个声明在此

       查看这两个头文件下的timer_t的确实现方式不一样。查看系统版本跟内核开发包版本完全一致,让人崩溃的centos,头文件居然与内核开发包头文件不一样。

       那就只能删掉一个头文件试试,将/usr/src/kernels/linux/include改名为include1

然后ln  -s  /usr/inclue   /usr/src/kernels/linux/include

       然后重新./configure   --prefix=/usr/local/keepalived

       make, 很幸运居然通过了。

2.    配置

Vi  /etc/keepalived/ keepalived.conf

global_defs {

   notification_email {

         gengpeng@gelssoft.com

   }

   notification_email_from gengpeng@gelssoft.com

   smtp_server 127.0.0.1

  # smtp_connect_timeout 30

   router_id LVS_DEVEL

}

# 20081013 written by :netseek

# VIP1

vrrp_instance VI_1 {

    state MASTER         #备机上改为BACKUP

    interface eth0

    virtual_router_id 51

    priority 100                  #备机上改为99,小于100的数即可。

    advert_int 1

    authentication {

       auth_typePASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.0.65

    }

}

virtual_server 192.168.0.65 80 {

    delay_loop 6

    lb_algo wrr

    lb_kind DR

#    persistence_timeout 2

    protocol TCP

 

    real_server 192.168.0.21 80 {

        weight 3  

        TCP_CHECK {

        connect_timeout 10

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

    }

    real_server 192.168.0.22 80 {

        weight 3

        TCP_CHECK {

        connect_timeout 10

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

     }

}

 

3.    启动

/usr/local/keepalived/sbin/keepalived –D

也可以:

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

service  keepalived start

4.    测试

关闭主机的keepalived, 不断刷新这个网页,在备机上ipvsadm,会看到连接数的变化。

然后再启动主机的keepalived,不断刷新网页,在主机上ipvsadm,会看到连接数的变化,可以看出,只要主机启动,会立马接管过来。因为上面配置文件中的优先级priority 主机是100,从机是99,主机优先级大于从机。

5.    问题

对真实服务器的检测却始终没有测试成功,停掉21上的httpd服务后,在11ipvsadm,始终还是存在21的信息。应该得到的结果跟ldirectord一样。

五、总结

经以上研究,集群的可行性方案有:

Lvs + heartbeat + ldirectord

Lvs + keepalived

 

Lvs能完成负载均衡,任务的分配。

heartbeatkeepalived)能解决lvs的单点问题。

ldirectordkeepalived)能完成对真实服务器的检测。

六、遗留问题

n  集群的存储,这也是集群中很重要的一方面,有待研究。

Keepalived对真实服务器的检测始终没有成功,没找到问题在哪里

Keepalived也有双机的功能,跟heartbeat比有什么优缺点,暂时想到的就是keepalived配置比heartbeat简单,但heartbeat的功能比keepalived多样。


 这里要修改为你自己的ip

阅读(1728) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~