这个可是线上的真实案例,拿出来分享下。
转载注明乾子's BLOG  http://www.6xuan.com

感谢linuxtone,linuxfans,51cto网站的会员朋友分享的资料。

哎哟宝贝亲子网(www.aiyobaby.com)的LVS方案实施步骤(LVS+IPVSADM+keeplived)。(而且该方案成功的用在韩国JAMY,OGAGE中国公司)

客户公司哎哟宝贝亲子网,由于业务增长过快。访问量过大。目前独享带宽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周后,稳定了继续完善这篇文档。。

点击在新窗口中浏览此图片

=======================================================
公网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服务器(www.aiyobaby.com)

                     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 http://www.keepalived.org/software/keepalived-1.1.15.tar.gz

可以查看系统是不是支持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 {
     tinkoko@126.com
   }
   notification_email_from tinkoko@126.com
   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
  inhibit_on_failure
    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 {
     tinkoko@126.com
   }
   notification_email_from tinkoko@126.com
   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
  inhibit_on_failure
    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原理,文档下载地址:http://www.6xuan.com/keepalived-guide--FinalBSD.pdf

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

4.剩下的东西就是在后端真实服务器上运行的脚本了。脚本如下。自己根据相应的改就可以了。


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

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服务器。
过阵子即将上线,等全部稳定了,缓存服务器的文档我会整理发布。。
哇哈哈哈~~~~

========================================================
2009年10月20号最新加入多个域名来进行LVS负载均衡,测试成功。

1.将你的域名统一都指向到虚拟IP上。
2.在后端的真实web服务器上(nginx或者apache-server),绑定该域名。类似于一台服务器里面的虚拟主机一样,尽量让两台服务器的配置文件都是一样的,还有新建的目录。
3.几台服务器数据同步尽量走内网,因为延迟是必须得。
技术资料 » linux相关 | 评论(0) | 引用(0) | 阅读(683)
 
发表评论
   
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
昵称   密码   游客无需密码
网址   电邮   [注册]
               

验证码 不区分大小写