1. 主服务器发布脚本 deploy.sh
now=`date +%Y%m%d%H%M%S`
function send_mail() {
curl -s --user 'api:YOUR_MAILGUN_APPKEY' \
https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages \
-F from='master@YOUR_DOMAIN_NAME' \
-F to='YOUR_DOMAIN_NAME' \
-F to='YOUR_DOMAIN_NAME' \
-F subject='ecb.jar rsync '$1 \
-F text='ecb.jar rsync '$1
}
echo ecb.jar rsync start…
rsync -av -e 'ssh' ecb.jar root@SERVER_IP:/root
if [ "$?" -eq "0" ]
then
echo ecb.jar rsync success!
send_mail success
else
echo ecb.jar rysnc fail…
send_mail fail
fi
echo building test_ecb instance...
docker build -t test_ecb_instance_$now .
echo built test_ecb instance done...
docker ps | grep test_ecb_instance | awk '{print $1}' | xargs --no-run-if-empty docker stop
docker run -it -v /root/sf_app/ecb/ecb_files:/app/attach_files -v /root/sf_app/ecb/ecb_security:/app/security -v /root/sf_app/ecb/ecb_logs:/app/logback_logs -v /root/sf_app/ecb/ecb_files/templates:/app/templates -p 0.0.0.0:9095:9095 -d test_ecb_instance_$now
2. 备用服务器发布脚本 deploy.sh
now=`date +%Y%m%d%H%M%S`
function send_mail() {
curl -s --user 'api:YOUR_MAILGUN_APPKEY' \
https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages \
-F from='master@YOUR_DOMAIN_NAME' \
-F to='YOUR_DOMAIN_NAME' \
-F to='YOUR_DOMAIN_NAME' \
-F subject='ecb backup deploy '$1 \
-F text='ecb backup deploy '$1
}
echo building test_ecb instance...
docker build -t test_ecb_instance_$now .
echo built test_ecb instance done...
docker ps | grep test_ecb_instance | awk '{print $1}' | xargs --no-run-if-empty docker stop
docker run -it -v /root/sf_app/ecb/ecb_files:/app/attach_files -v /root/sf_app/ecb/ecb_security:/app/security -v /root/sf_app/ecb/ecb_logs:/app/logback_logs -v /root/sf_app/ecb/ecb_files/templates:/app/templates -p 0.0.0.0:9095:9095 -d test_ecb_instance_$now
if [ "$?" -eq "0" ]
then
echo deploy success!
send_mail success
else
echo deploy fail!
send_mail fail
fi
3.备用服务器DockerFile
FROM openjdk:8-jdk-alpine
VOLUME /tmp
EXPOSE 8080
COPY ecb.jar app.jar
ENTRYPOINT ["java","-Dspring.profiles.active=backup","-jar","/app.jar"]
4. 备用服务器定时检测脚本check_jar.sh
jars=(ecb.jar asns.jar bb.jar)
function compareMD5() {
cd /root
master_jar_md5=`md5sum $1 | awk -F " " '{ print $1 }'`
backup_jar_md5=`md5sum $2 | awk -F " " '{ print $1 }'`
if [ $backup_jar_md5 == $master_jar_md5 ]
then
echo two jars are same!
rm $1
else
echo refresh new jar!
cp $2$3 $2$4
mv $1 $2$3
cd $2
sh deploy.sh
fi
}
for i in ${jars[*]}
do
if [ -e '/root/'$i ]
then
case $i in
ecb.jar)
master_jar=/root/ecb.jar
backup_jar_path=/root/sf_app/ecb/ecb_app/ecb_backend/
compareMD5 $master_jar $backup_jar_path ecb.jar ecb_bak.jar
;;
asns.jar)
echo im asns
;;
bb.jar)
echo im bb
;;
esac
else
echo $i 'not exist'
fi
done
5. chmod +x check_jar.sh
6. crontab -e 添加 */5 * * * * /shell/check_jar.sh
7. vi /var/spool/mail/root 可以查看历史执行记录
8. 脚本同步数据库(全量)
now=`date +%Y%m%d%H%M%S`
dump_success=()
dump_fail=()
sync_success=()
sync_fail=()
cd /root/mysqldump
tables=(ecb@t_inta_pay_pay_transaction ecb@t_inta_pay_refund_transaction)
for i in ${tables[*]}
do
database=`echo $i | awk -F "@" '{ print $1 }'`
table=`echo $i | awk -F "@" '{ print $2 }'`
mysqldump $database $table > ${database}@${table}@${now}.sql
if [ "$?" -eq "0" ]
then
dump_success[${#dump_success[*]}]=$i
else
dump_fail[${#dump_fail[*]}]=$i
fi
done
for f in `ls`
do
if [[ $f =~ $now ]]
then
database=`echo $f | awk -F "@" '{ print $1 }'`
mysql -h -u -p $database < $f
if [ "$?" -eq "0" ]
then
sync_success[${#sync_success[*]}]=$i
else
sync_fail[${#sync_fail[*]}]=$i
fi
fi
done
text="[need_sync] <br/>${tables[*]} <br/><br/>\
[dump_success] <br/>${dump_success[*]} <br/><br/>\
[dump_fail] <br/>${dump_fail[*]} <br/><br/>\
[sync_success] <br/>${sync_success[*]} <br/><br/>\
[sync_fail] <br/>${sync_fail[*]}"
curl -s --user 'api:YOUR_MAILGUN_APPKEY' \
https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages \
-F from='master@YOUR_DOMAIN_NAME' \
-F to='YOUR_DOMAIN_NAME' \
-F to='YOUR_DOMAIN_NAME' \
-F subject="$now sync master backup data result" \
-F html="$text"