ExtMail服务器社区's Archiver

tinkoko 发表于 2009-10-23 11:58

分享下LVS的方案,目前已经测试成功,没有出现问题。

分享下LVS的方案,目前已经测试成功,没有出现问题。感谢linuxtone,51cto网站的会员朋友分享的资料。

哎哟宝贝亲子网([url=http://www.aiyobaby.com/]http://www.aiyobaby.com/[/url])的LVS方案实施步骤(LVS+IPVSADM+keeplived)。(而且该方案成功的用在XXXXXXX公司)

客户公司哎哟宝贝亲子网,由于业务增长过快。访问量过大。目前独享带宽100M,依旧是有时候解决不了网站打开延迟问题。

查看了下。原因有以下几个。

1.业务增长快,硬件没有跟上,虽然目前来说是五洲的机器,而且web+mysql一台机器,另一台是图片服务器,还有1台是备份服务器。这样子依旧解决不了访问量一大,网站卡死现象。

2.图片链接太多,由于该网站有众多的加盟商,各自的图片链接都是来自于哎哟宝贝网,所以造成盗链严重。即使图片服务器遵循IE浏览器中,每次显示两个TABLE原理,但是还是解决不了。

3.一台服务器单点故障,以及web-server中使用apache,优化不得当也会造成网站访问量激增卡死现象。

4.哎哟宝贝融资后,有很多钱来做这些。所以呢,多余的话不说了。大概就是这个样子。直接上图说话。

=======================================================================

废话:LVS的三种模式,这里依旧是最高效的。LVS-DR模式。全部都是公网IP。
一直考虑是用LVS+HA模式还是使用LVS+KEEPALIVED或者RH自带的IPVS+Piranha 模式,原来也是一直在做HA方案,我的blog里面写过LVS+HA的方案,但是只是实验环境。而且如果使用心跳机制,就需要涉及的文件ipvsadm,ha.cf ,authkeys,ldirectord,arptables,还有真实服务器里面配置脚本。机房的环境特殊,所以为了安全没有使用。

如果是IPVS+Piranha ,虽然我也见到身边很多朋友在使用这个方案,但是Piranha我并不是很熟悉,还是没有选择。

但是如果使用keepalived后,只要使用一个配置文件就可以了。配置语法简单,上手快。而且kepalived采用VRRP机制,一台做LVS,一台做LVS-bak,可以解决单点故障的问题。并且检查LB机器中的真实服务器。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
具体方案等我测试1周后,稳定了继续完善这篇文档。。

[url=http://www.aiyobaby.com/images/6xuan.jpg][img]http://www.aiyobaby.com/images/6xuan.jpg[/img][/url]

=======================================================
公网IP就不说了。用内网IP来说明吧。

方案说明:利用LVS,虚拟出两个IP,每个IP对应一组业务群。一个对应WEB,一个对应IMAGE,客户的DB使用磁盘柜,放在最后端,不需要公网IP的。另外客户还有一台API服务器,一台SSO服务器,这两台目前来说没有特别需要,不需要用户访问的,所以不用放在LVS里面(这里感谢linuxtone版主netseek给的指导)

方案规划:
两台LVS服务器使用 SUN x4150
后端服务器全部都是DELL1950。

虚拟出俩IP :  VIP1:192.168.0.20 ------------------->对应web服务器([url=http://www.aiyobaby.com/]http://www.aiyobaby.com/[/url])

                     VIP2:192.168.0.21--------------------->对应img服务器(img.aiyobaby.com)

LVS服务器:  LVS1(MASTER): 192.168.0.23
                   LVS2(BACKUP):192.168.0.24

WEB1:192.168.0.30
WEB2:192.168.0.31

IMG1:192.168.0.40
IMG2: 192.168.0.41

web1和web2,img1和img2都进行数据同步,这个方案太多了。
一开始想数据库单独设立,也进行数据同步,但是客户数据库至少都在10G左右,mysql replication进行测试时候,小数据量也可以,但是大的话延迟是经常的。因为客户是购物网,所以数据至少保证在5秒内同步。所以将数据库放在最后端,一起读数据从后端开始读取。解决了数据库问题。
=========================================================================
方案实施:
所有机器安装CENTOS5.2-64BIT,最小化安装就可以了。
1.在LVS1和LVS2上安装ipvsadm(可以用yum安装),和keepalived。
keepalived支持内核2.4以上,如果小于这个的话,那么需要打内核补丁。 复制内容到剪贴板 代码:
下载keepalived
#wget [url]http://www.keepalived.org/software/keepalived-1.1.15.tar.gz[/url]

可以查看系统是不是支持ipvs转发
#lsmod |grep ip_vs
安装keepalived


#ln -s /usr/src/kernels/2.6.18-53.el5PAE-i686/  /usr/src/linux
#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/rc.d/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/


这样子便可以使用
#/etc/init.d/keepalived 开启或者停止。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2.直接编辑keepalived.conf,(LVS+keepalived模式,只需要配置keepalived.conf就可以了,其余的不用管)

LVS1的: 复制内容到剪贴板 代码:

! Configuration File for keepalived

global_defs {
   notification_email {
     [email]tinkoko@126.com[/email]
   }
   notification_email_from [email]tinkoko@126.com[/email]
   smtp_server 127.0.0.1
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1234
    }
    virtual_ipaddress {
        192.168.0.20
        192.168.0.21
    }
}

virtual_server 192.168.0.20 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

real_server 192.168.0.30 80 {
        weight 3
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 192.168.0.31 80 {
        weight 3
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }

}
virtual_server 192.168.0.21 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

real_server 192.168.0.40 80 {
        weight 3
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 192.168.0.41 80 {
        weight 3
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }

}
LVS2的: 复制内容到剪贴板 代码:

! Configuration File for keepalived

global_defs {
   notification_email {
     [email]tinkoko@126.com[/email]
   }
   notification_email_from [email]tinkoko@126.com[/email]
   smtp_server 127.0.0.1
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKU
    interface eth0
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1234
    }
    virtual_ipaddress {
        192.168.0.20
        192.168.0.21
    }
}

virtual_server 192.168.0.20 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

real_server 192.168.0.30 80 {
        weight 3
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 192.168.0.31 80 {
        weight 3
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }

}


virtual_server 192.168.0.21 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

real_server 192.168.0.40 80 {
        weight 3
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 192.168.0.41 80 {
        weight 3
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }

}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3.启动keepalived服务。
#/etc/init.d/keepalived start

到此为止,基本上LVS的设置就算完成了。所有这些东西就牵扯到一个keepalived.conf文件,足够了。使用vrrp机制。
如果有朋友想更加了解keepalived原理,文档下载地址:[url=http://www.6xuan.com/keepalived-guide--FinalBSD.pdf]http://www.6xuan.com/keepalived-guide--FinalBSD.pdf[/url]

还有些朋友觉得好像没有用到ipvsadm,那么是不是可以不装。
绝对不行的,keepalived算是ipvsadm的一个套件,所以一定是要安装的。(在此谢谢linuxtone提供的文档)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

4.剩下的东西就是在后端真实服务器上运行的脚本了。脚本如下。自己根据相应的改就可以了。 复制内容到剪贴板 代码:



#!/bin/bash
#2009-06-02 by tinkoko  [url]http://www.6xuan.com[/url]   [url]http://www.aiyonet.com[/url]

VIP=192.168.0.20

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

case "$1" in
start)
       ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
       /sbin/route add -host $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 $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
完了后给这个脚本755权限,运行。

#ifconfig lo:0 查看虚拟IP是不是已经绑定在本机回环网卡上。

===================================================================
此文档目前暂时告一段落。原因是既然是大容量图片服务器,一定少不了缓存服务器。
那么在img图片服务器前端放置一台varnish机器是必要的。要么将图片交给CDN去做。目前正在测试一台BSD的varnish服务器。
过阵子即将上线,等全部稳定了,缓存服务器的文档我会整理发布。。
哇哈哈哈~~~~

========================================================
AD下:BLOG----[url=http://www.6xuan.com/]http://www.6xuan.com/[/url]
娃哈哈哈哈哈哈
==========================================

[b][u]如果有什么描述不正确的地方大家轻点砸,我语言组织不是很好。
知道这个也最多算是拿别人来的自己改改就好了。[/u][/b]
[b][u]不过已经测试成功了,而且在应用了。[/u][/b]

[[i] 本帖最后由 tinkoko 于 2009-10-23 15:59 编辑 [/i]]

tinkoko 发表于 2009-10-23 11:59

将你的多域名来负载均衡。
1..将你的域名统一都指向到虚拟IP上。
2.在后端的真实web服务器上(nginx或者apache-server),绑定该域名。类似于一台服务器里面的虚拟主机一样,尽量让两台服务器的配置文件都是一样的,还有新建的目录。
3.几台服务器数据同步尽量走内网,因为延迟是必须得。
还有的想到了再补上。。

tinkoko 发表于 2009-10-23 12:12

附件里面编辑的比较工整点。

douhua22 发表于 2010-1-20 11:30

看一下,谢谢了。

mouse 发表于 2010-3-16 12:37

超强啊楼主!

wxd5981 发表于 2010-3-19 13:57

不错.如果lz能够将配置完后的监控文档也写出来就更好了.

chifeng 发表于 2010-3-19 17:31

赞。。。死顶楼主。。。。呵呵。。。

我通常用CARP+PF(四层)或者CARP+Nginx(七层)来做。。。在FreeBSD系统下。

看来Linux下还真是lvs+keeplived比较nb啊

zhiyan821 发表于 2010-4-29 14:44

留个脚印,以后用的到

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.