云主机迁移脚本

#!/bin/sh

#1、此脚本需要新服务器的的root可以直接登录,root的密码是没有特殊字符的密码。允许老的服务器用scp命令向新服务器传送文件。

#由于root密码被修改成简单密码,所以不要停止iptables,可以在iptables里面加入允许老服务器的ip的22端口可以访问。

#2、为了方便查看那些云主机已经迁移好了,需要连接到新服务器上,运行tty,查看到tty值,把tty的结果替换脚本中的”/dev/pts/ttynum“字符。

#同时不要关闭已经打开的新的服务器的连接。

#3、脚本执行完以后,后台确认一下是否全部完成。然后删除/tmp/a.sh zcc.host zcc.hostbak

#4、删除新服务器上的/tmp/newserver.sh okhost文件。同时把root密码修改成老的root密码。

#4、sh -x a.sh 新服务器的ip 新服务器的密码

newip=$1;

newpasswd=$2;

if [ ! -f /tmp/newserver.sh ];then

cat >> /tmp/newserver.sh << "EOF"

       #!/bin/sh

       sed -i 's#rhel6.2.0#pc#' /vm/vm/$1/$1.xml;

       [ $? != 0 ] && exit 1;

       sed -i 's#/usr/libexec/qemu-kvm#/usr/bin/kvm#' /vm/vm/$1/$1.xml;

       [ $? != 0 ] && exit 2;

       if [ -f /vm/vm/$1/snapshot/*.xml ];then

               sed -i 's#rhel6.2.0#pc#' /vm/vm/$1/snapshot/*.xml;

               [ $? != 0 ] && exit 3;

               sed -i 's#/usr/libexec/qemu-kvm#/usr/bin/kvm#' /vm/vm/$1/snapshot/*.xml;

               [ $? != 0 ] && exit 4;

               mkdir -p /var/lib/libvirt/qemu/snapshot/$1 && cp /vm/vm/$1/snapshot/*.xml /var/lib/libvirt/qemu/snapshot/$1;

               [ $? != 0 ] && exit 5;

       fi

       virsh define /vm/vm/$1/$1.xml;

       virsh start $1;

       hostip=$(less /vm/vm/$1/$1.xml| grep value |grep -o -P '(\d{1,3}\.){3}\d{1,3}')

       if [ -n $hostip ];then

               for pingnum in $(seq 1 10);

               do

                       ping -c 2 $hostip

                       if [ $? = 0 ] ; then

                               echo `date +%F` `date +%T` $1 done  >> /tmp/okhost

                               echo =================================== > /dev/pts/ttynum

                               echo ===========$1======done======= > /dev/pts/ttynum

                               echo =================================== > /dev/pts/ttynum

                               break

                       fi


                       if (( $pingnum == 6 )) ; then

                               echo `date +%F` `date +%T` $1 done  but dead ping  >> /tmp/okhost

                               echo =================================== > /dev/pts/ttynum

                               echo ===========$1======done======= > /dev/pts/ttynum

                               echo =================================== > /dev/pts/ttynum                

                       fi

               done

       fi

EOF

fi


       chmod 700 /tmp/newserver.sh

       #scp newserver.sh to newserver

       expect -c "

               spawn scp -r /tmp/newserver.sh root@$newip:/tmp/

               expect {

                       \"*assword\" {set timeout 9000; send \"$newpasswd\r\";}

                       \"yes/no\" {send \"yes\r\"; exp_continue;}

               }

       expect eof"

[ $? != 0 ] && echo "create newserver or scp wang!" && exit;

echo "create and scp newserver ok"



       if [ ! -f /tmp/zcc.host ];then

               virsh list --all | sed '1,2d' | sed '$d' | awk '{print $2}'| sort > /tmp/zcc.host

               cp /tmp/zcc.host /tmp/zcc.hostbak

       fi


       while read host

       do

               virsh destroy $host 2>/dev/null

               sleep 3

               virsh snapshot-list $host > /tmp/$$.snapshot

               snapshotname=$(grep -o -P '\d{14}' /tmp/$$.snapshot)

               rm /tmp/$$.snapshot

               if [ -n "$snapshotname" ];then

                       virsh snapshot-delete $host $snapshotname;

               fi

               virsh undefine $host


               #scp -r /vm/vm/$host root@10.0.10.11:/vm/vm/

               expect -c "

               spawn scp -r /vm/vm/$host/ root@$newip:/vm/vm/

                       expect {

                       \"*assword\" {set timeout 9000; send \"$newpasswd\r\";}

                       \"yes/no\" {send \"yes\r\"; exp_continue;}

                       }

               expect eof"

               if [ $? = 0 ];then

                       echo =============================

                       echo ====$host=====scp======OK====

                       echo =============================

                       mv /vm/vm/$host /vm/vm/$host.$(date +%Y-%m-%d.%H:%M:%S).drop

                       sed -i "/^$host$/d" /tmp/zcc.host

               fi


               expect -c "

                       spawn ssh root@$newip \"nohup /tmp/newserver.sh $host\" &

                       expect {

                               \"*assword\" {set timeout 9000; send \"$newpasswd\r\";}

                               \"yes/no\" {send \"yes\r\"; exp_continue;}

                       }

               expect eof"

       done < /tmp/zcc.host




本文转自 freeterman 51CTO博客,原文链接:http://blog.51cto.com/myunix/1202228,如需转载请自行联系原作者

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/497235

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。