场景:因前期设计得失误,导致应用中得富文本上传服务器并没有单独传到相应得文件服务器上,而是直接上传到应用所属的服务器上。若是就一台服务器也没什么问题,问题是若是对服务做了负载均衡,就会出现问题,有可能你上传的文件在服务器A上,但是当你通过域名访问到服务器B上的时候,就会找不到相应的文件。
针对这种情况,前期考虑是将所有服务器文件同步,做到每台服务器上都有这个文件,这样就不会有什么问题,当然后期肯定会抽出单独的文件服务器进行访问。下面来说服务器同步文件问题。
Linux情况下想要做到同步需要了解lftp 的sftp用法,不知道的可以去度娘下,我这边就简单的说下:
lftp sftp://[user name]:[user passwd]@[domain name]:[port number]
前期准备两台服务器A、B,现在A服务器创建几张图片,向B服务器传输,现在直接上shell脚本,进行同步:
#! /bin/bash
# set sftp:auto-confirm yes
export DUMP_TAG=`date +"%Y%m%d"`
echo 日期:$DUMP_TAG
export putfilepath="/data/work/image/"$DUMP_TAG
echo putfilepath $putfilepath
if [ ! -d $putfilepath ];then
mkdir $putfilepath
else
echo dir exist
fi
for file in `ls $DUMP_TAG` #注意此处这是两个反引号,表示运行系统命令
do
if [ -d $DUMP_TAG"/"$file ] #注意此处之间一定要加上空格,否则会报错
then
read_dir $DUMP_TAG"/"$file
else
echo $DUMP_TAG"/"$file #在此处处理文件即可
lftp sftp://root:P@ssw0rd@XXX.XXX.XXX.XXX:22 -e "cd $putfilepath; put $DUMP_TAG'/'$file; ls; bye"
fi
done
注意:这个脚本加的有日期限制,只能同步执行的这天的数据,同步之前的或者所有的需要修改脚本,你们可自行修改,这边验证亲测没什么问题