最近的由于业务变动的需求较多,经常同步外网的页面.
导致某次由于一个程序员不小心的编码,将请求全部指向了源服务器(为CDN提供数据的服务器).直接导致源服务器down机.所有业务对外访问异常.为了减少类似的问题导致的down机,同时解决目前对外服务的单点的危险.
重新制定了外网服务的优化方案.
如图:
[img]http://dl.iteye.com/upload/attachment/147567/345d5b4c-55bb-3da3-b1ef-daedd8ba1a65.jpg[/img]
改造后的优点:
1.保证盒子和弹窗业务都有双点进行互备.
2.通过域名区分外网访问的源服务器,避免由于某个业务的问题,直接导致的其他业务同时出现down机的危险.
3.CDN访问直接定向到某个IP.此时访问的负载均衡设备(F5或Ngins),如果现有的负载均衡设备down机,立刻将该业务访问的IP直接绑定其某台业务源服务器.解决用户不能访问的风险.
4.优化现有的部署服务到多台源服务器的代码.
将需要同步的文件发布到指定的部署目录:
1)盒子业务,文件名称box5_rsync.sh:
#!/bin/bash
#box public dirs
BOX5DIRS='js,style,images,img,flash,search'
#box5 public file
BOXFILE='index.html,data_ad.xml'
SOURCE_DIR='/var/www/html/admin/public_html/box5'
TARGET_DIR='/var/www/html/admin/public_html/box5_online'
#function rsync dirs
rsync_dirs()
{
for j in `echo ${1} | tr ',' ' '`
do
echo ' /usr/bin/rsync -rtDvz' $SOURCE_DIR/$j/ $TARGET_DIR/$j
/usr/bin/rsync -rtDvz $SOURCE_DIR/$j/ $TARGET_DIR/$j > /dev/null 2>&1
done
}
#function rsync file
rsync_file()
{
for j in `echo ${1} | tr ',' ' '`
do
echo ' /usr/bin/rsync -rtDvz' $SOURCE_DIR/$j $TARGET_DIR/$j
/usr/bin/rsync -rtDvz $SOURCE_DIR/$j $TARGET_DIR/$j > /dev/null 2>&1
done
}
rsync_dirs $BOX5DIRS
rsync_file $BOXFILE
2)弹窗业务,文件名称pop_rsync.sh
#!/bin/bash
#pop public dir
POPDIRS='178,kj,js,style,images,xml,flash,tab2'
#pop public file
POPFILE='index.html'
#pop coop dir
TAOBAO_COOP_DIRS='taobao/css,taobao/js,taobao/flash,taobao/images'
VANCL_COOP_DIRS='vancl/img,vancl/js,vancl/css'
BEAUTY_COOP_DIRS='beauty/img,beauty/css'
FRIEND_COOP_DIRS='friend/css,friend/js,taobao/images'
SOURCE_DIR='/var/www/html/admin/public_html/pop'
TARGET_DIR='/var/www/html/admin/public_html/pop_online'
#function rsync dirs
rsync_dirs()
{
for j in `echo ${1} | tr ',' ' '`
do
echo ' /usr/bin/rsync -rtDvz' $SOURCE_DIR/$j/ $TARGET_DIR/$j
/usr/bin/rsync -rtDvz $SOURCE_DIR/$j/ $TARGET_DIR/$j > /dev/null 2>&1
done
}
#function rsync file
rsync_file()
{
for j in `echo ${1} | tr ',' ' '`
do
echo ' /usr/bin/rsync -rtDvz '$SOURCE_DIR/$j $TARGET_DIR/$j
/usr/bin/rsync -rtDvz $SOURCE_DIR/$j $TARGET_DIR/$j > /dev/null 2>&1
done
}
rsync_dirs $POPDIRS
rsync_dirs $TAOBAO_COOP_DIRS
rsync_dirs $VANCL_COOP_DIRS
rsync_dirs $BEAUTY_COOP_DIRS
rsync_dirs $FRIEND_COOP_DIRS
rsync_file $POPFILE
将部署目录同步到远端的源服务器:
#!/bin/bash
SERVERS='192.168.1.15 192.168.1.70 192.168.1.150 192.168.1.71'
SOURCE_DIR='/var/www/html/admin/public_html'
TARGET_DIR='/opt/data/moviebox/root'
LOG_DIR='/home/rsync/logs'
CUR_TIME=`date +\%Y\%m\%d\%H`
for j in $SERVERS
do
#box5
echo "RSYNC BOX5"
echo "server IP:"$j >> $LOG_DIR/box5_$CUR_TIME.log
/usr/bin/rsync -rtDvz $SOURCE_DIR/box5_online/ $j:$TARGET_DIR/box5 >> $LOG_DIR/box5_$CUR_TIME.log
#pop
echo "RSYNC POP"
echo "server IP:"$j >> $LOG_DIR/pop_$CUR_TIME.log
/usr/bin/rsync -rtDvz $SOURCE_DIR/pop_online/ $j:$TARGET_DIR/pop >> $LOG_DIR/pop_$CUR_TIME.log
done
导致某次由于一个程序员不小心的编码,将请求全部指向了源服务器(为CDN提供数据的服务器).直接导致源服务器down机.所有业务对外访问异常.为了减少类似的问题导致的down机,同时解决目前对外服务的单点的危险.
重新制定了外网服务的优化方案.
如图:
[img]http://dl.iteye.com/upload/attachment/147567/345d5b4c-55bb-3da3-b1ef-daedd8ba1a65.jpg[/img]
改造后的优点:
1.保证盒子和弹窗业务都有双点进行互备.
2.通过域名区分外网访问的源服务器,避免由于某个业务的问题,直接导致的其他业务同时出现down机的危险.
3.CDN访问直接定向到某个IP.此时访问的负载均衡设备(F5或Ngins),如果现有的负载均衡设备down机,立刻将该业务访问的IP直接绑定其某台业务源服务器.解决用户不能访问的风险.
4.优化现有的部署服务到多台源服务器的代码.
将需要同步的文件发布到指定的部署目录:
1)盒子业务,文件名称box5_rsync.sh:
#!/bin/bash
#box public dirs
BOX5DIRS='js,style,images,img,flash,search'
#box5 public file
BOXFILE='index.html,data_ad.xml'
SOURCE_DIR='/var/www/html/admin/public_html/box5'
TARGET_DIR='/var/www/html/admin/public_html/box5_online'
#function rsync dirs
rsync_dirs()
{
for j in `echo ${1} | tr ',' ' '`
do
echo ' /usr/bin/rsync -rtDvz' $SOURCE_DIR/$j/ $TARGET_DIR/$j
/usr/bin/rsync -rtDvz $SOURCE_DIR/$j/ $TARGET_DIR/$j > /dev/null 2>&1
done
}
#function rsync file
rsync_file()
{
for j in `echo ${1} | tr ',' ' '`
do
echo ' /usr/bin/rsync -rtDvz' $SOURCE_DIR/$j $TARGET_DIR/$j
/usr/bin/rsync -rtDvz $SOURCE_DIR/$j $TARGET_DIR/$j > /dev/null 2>&1
done
}
rsync_dirs $BOX5DIRS
rsync_file $BOXFILE
2)弹窗业务,文件名称pop_rsync.sh
#!/bin/bash
#pop public dir
POPDIRS='178,kj,js,style,images,xml,flash,tab2'
#pop public file
POPFILE='index.html'
#pop coop dir
TAOBAO_COOP_DIRS='taobao/css,taobao/js,taobao/flash,taobao/images'
VANCL_COOP_DIRS='vancl/img,vancl/js,vancl/css'
BEAUTY_COOP_DIRS='beauty/img,beauty/css'
FRIEND_COOP_DIRS='friend/css,friend/js,taobao/images'
SOURCE_DIR='/var/www/html/admin/public_html/pop'
TARGET_DIR='/var/www/html/admin/public_html/pop_online'
#function rsync dirs
rsync_dirs()
{
for j in `echo ${1} | tr ',' ' '`
do
echo ' /usr/bin/rsync -rtDvz' $SOURCE_DIR/$j/ $TARGET_DIR/$j
/usr/bin/rsync -rtDvz $SOURCE_DIR/$j/ $TARGET_DIR/$j > /dev/null 2>&1
done
}
#function rsync file
rsync_file()
{
for j in `echo ${1} | tr ',' ' '`
do
echo ' /usr/bin/rsync -rtDvz '$SOURCE_DIR/$j $TARGET_DIR/$j
/usr/bin/rsync -rtDvz $SOURCE_DIR/$j $TARGET_DIR/$j > /dev/null 2>&1
done
}
rsync_dirs $POPDIRS
rsync_dirs $TAOBAO_COOP_DIRS
rsync_dirs $VANCL_COOP_DIRS
rsync_dirs $BEAUTY_COOP_DIRS
rsync_dirs $FRIEND_COOP_DIRS
rsync_file $POPFILE
将部署目录同步到远端的源服务器:
#!/bin/bash
SERVERS='192.168.1.15 192.168.1.70 192.168.1.150 192.168.1.71'
SOURCE_DIR='/var/www/html/admin/public_html'
TARGET_DIR='/opt/data/moviebox/root'
LOG_DIR='/home/rsync/logs'
CUR_TIME=`date +\%Y\%m\%d\%H`
for j in $SERVERS
do
#box5
echo "RSYNC BOX5"
echo "server IP:"$j >> $LOG_DIR/box5_$CUR_TIME.log
/usr/bin/rsync -rtDvz $SOURCE_DIR/box5_online/ $j:$TARGET_DIR/box5 >> $LOG_DIR/box5_$CUR_TIME.log
#pop
echo "RSYNC POP"
echo "server IP:"$j >> $LOG_DIR/pop_$CUR_TIME.log
/usr/bin/rsync -rtDvz $SOURCE_DIR/pop_online/ $j:$TARGET_DIR/pop >> $LOG_DIR/pop_$CUR_TIME.log
done