|
[
2009/09/07 14:28 | by tinkoko ]
|
这个可是线上的真实案例,拿出来分享下。
转载注明乾子'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.几台服务器数据同步尽量走内网,因为延迟是必须得。
转载注明乾子'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.几台服务器数据同步尽量走内网,因为延迟是必须得。
REDHAT发布RH5.
RHCE认证视频笔记
2009/09/07 14:28 | by


