2014年8月27日星期三

Azure平台跨存储迁移虚拟机

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
Azure平台跨存储迁移虚拟机  阅读原文»

Azure平台跨存储迁移虚拟机

客户场景描述:

近段时间,客户注册了Azure测试账号(一个月的使用时间),进行测试使用,搭建了WEB网站服务,客户对Azure云平台,针对web开发,应用服务,非常满意,准备把web网站正式投入到生产,由于Azure测试账号只能试用一个月的时间,而测试账号不支持更转正式Azure账号使用。

客户如下需求:

Azure测试账号里的虚拟机和数据库迁移到正式的Azure上。

迁移虚拟机方法:

方法一:

虚拟机VHD和数据VHD文件,创建成磁盘,下载到本地,在进行上传到正式账号平台下,由于文件数据太大,下载和上传的速速太慢,无法接受,

方法二:

Azure平台跨存储账户复制VHD磁盘的方法

使用方法二进行迁移虚拟机:

1.由存储账户 A 复制到存储账户 B

2.首先您需要安装 Windows Azure Powershell

下载的链接为:http://azure.microsoft.com/en-us/documentation/articles/install-configure-powershell/?fb=zh-cn

3.在 Azure Powershell 执行 Get-AzureEnvironment

wKioL1P8mt6jlme9AAO13hOFZfs877.jpg

4.AzurePowershell执行Get-AzurePublishSettingsFile -Environment AzureChinaCloud,执行这个命令的目的:下载文件(PublishsettingsFile)

wKiom1P8mn-QVGQRAAQQ0d7cheo946.jpg5.下载文件时,需要客户在Azure平台上的输入B账户名和对应密码。 并保存文件位置

wKiom1P8nQ6yox7-AAMcEdgb8ec909.jpg6.Azure Powershell 执行Import-AzurePublishSettingsFile + 下载的文件路径(例如: D:\)导入下载的文件(PublishsettingsFile),从而成功进入订阅账户

wKioL1P8qCDj3K4vAAcFxCqr47g254.jpg

7.可以看到下面的截图,一元测试账号,已设定为新的默认订阅名称

wKiom1P8qrOTdq2pAAVSjdtOkW4014.jpg

8.查看B账号默认的存储账号

wKiom1P8qFvCyNooAAJQaLzbTrY376.jpg

9.在Azure Powershell执行Set-AzureSubscription CurrentStorageAccountName 存储账"portalvhdsqr56z0jf96rg8"执行这个命令的目的:设置B账号为当前订阅下默认的存储账号

wKiom1P8qcXibGacAAVo_5XiVy8471.jpg10.可以看到下面的截图,一元测试账号,已设定为新的默认订阅名称

wKioL1P8qxWhX2A5AAVcKfpX9K8118.jpg11.再次输入订阅名称:一元测试账号,如下图所示

wKioL1P8rBTxdajbAAVYdZ9uDNk315.jpg12.在AzurePowershell执行 $context = New-AzureStorageContext-StorageAccountName ,portalvhdss3nlhwwr7q21m,storageaccountkey tsD32gD0cV7bHS0Rg6MtJwh0TuZN5dL92309Cyo9vPxdYPicbpIR1azuxjw/k+7ZiY1T+/c2ghx/S0eyPVogZw==" -endpoint"core.chinacloudapi.cn"执行这个命令的目的:输入B存储账号名称以及密钥。

wKiom1P8rmPjqnIlAAUgqnZ8rE4108.jpg13.StorageAccountName(存储账户名称):portalvhds432bs5fb837mm ,可以在下面截图找到存储账户的名称:

wKioL1P8syeC5IvaAANF1VdP9yA941.jpg14.Storageaccountkey(存储账户密钥):tsD32gD0cV7bHS0Rg6MtJwh0TuZN5dL92309Cyo9vPxdYPicbpIR1azuxjw/k+7ZiY1T+/c2ghx/S0eyPVogZw==。可以在下面截图找到存储账户的密钥:

wKiom1P8u3GTySf_AAKFB9LccgA123.jpg

15.在进行跨存储账号间复制vhd文件之前,您订阅账户下A&B存储账号容器类型均要设置为公共(如果设置为私有,则无法完成复制),请参照以下截图:

wKiom1P8s_bQPmJ0AAHh1vfCyF0716.jpg16.在Azure Powershell执行Start-AzureStorageBlobCopy -SrcUri

-DestContainervhds -DestBlob web.vhd -DestContext $context

执行这个命令的目的:把A的vhd文件复制到另外一个存储账户上,web.vhd为复制到您另外一个存储账户的vhd文件名称(这个文件可以任意编写 vhd名称)。

wKioL1P8uvTgqAT7AAeHVrJRkdY308.jpg17.登陆B账号,查看复制的VH文件,文件已复制过来

wKiom1P8umiBROQLAAIP8QSysc0171.jpg18.在B账号创建磁盘

运维自动化之java编译自动化  阅读原文»

用户名:hh2o 文章数:34 评论数:14
访问量:9764:782:502:3 注册日期:2013-03-26

运维自动化之java编译自动化

【需求描述】 为了让代码开发之后,提升测试、部署上线的效率,需要将代码编译、部署过程自动化。
这里先介绍怎样使用javac自动化编译java代码。
因为项目目前暂未使用ant、maven等管理构建,所以需要使用比较原始的javac来实现,很伤有木有。

【背景说明】
代码目录结构
1、web类型的代码:达成war包(就一目录),使用tomcat来部署

web类型的工程目录结构介绍
# ls /home/souces/boss-web
src WebContent
src存放java的源代码:java文件,properties文件,xml文件等
WebContent存放html,js,css等文件

2、service类型的代码,最终会打成jar包部署

lib目录存放java项目依赖的jar包
src存放java的源代码:java文件,properties文件,xml文件等

ps:呃,这都是比较原始的项目结构了,后期要推动研发使用maven啊,虽然不用maven,但是作为运维,要见招拆招啊,所以也得在现有状况下给出方案滴。

3、编译目录结构梳理
/home/build/存放编译脚本:build.sh
/home/sources/存放源代码
/home/target/存放编译好的"目录"
/home/tgzs/存放编译后压缩好的tgz包
以后每次发布使用代码的tgz和config的tgz整合之后就可以发布了
test-web.20140826234520.p_3547.tgz
config_2.20140826234520.cfg_3544.tgz
其实我这里省略了对代码、配置文件的svn管理,及更新 /home/sources/的源代码的脚本,脚本就自己实现把。

【效果】

wKioL1P8rtCgubB4AADunoR8oo4730.jpg
【详细的脚本代码如下】

if[$#-lt1];then
echo-e'\033[31m输入参数错误!\033[37m'
echo-e"\033[31m例如:$0test-web\033[37m"
echo-e"\033[31m例如:$0config\033[37m"
JAVA_HOME=/usr/local/jdk/jre
PROJECT_PATH=/home/souces/$PROJECT#源代码路径
echo"$PROJECT"|grep-qservice#判断是web还是service类型
SERVICEorNOT=$?
JAR_PATH=$PROJECT_PATH/WebContent/WEB-INF/lib/#项目jar包路径
CLASS_PATH=$PROJECT_PATH/WebContent/WEB-INF/classes/#编译好的代码,class存放路径
TARGET=/home/target#编译好的代码,存放的根路径
TARGET_PROPERTIES_LOCATION="$TARGET/$PROJECT/WEB-INF/classes"#编译好之后,配置文件应该放的位置
SRC_PATH=$PROJECT_PATH/src#源代码的src的路径
TIME=`date+%Y%m%d%H%M%S`
if["$SERVICEorNOT"-eq0];then#如果是service类型
JAR_PATH="$PROJECT_PATH/lib/"
CLASS_PATH=$PROJECT_PATH/classes
TARGET_PROPERTIES_LOCATION="$TARGET/$PROJECT"
rm-rf$CLASS_PATH/*
mkdir-p$CLASS_PATH/META-INF
if[[$PROJECT!="config"&&$PROJECT!="config_2"]];then
JAVA_SOURCE_DIRS=`cd$SRC_PATH&&ls*/-d|sed's/\/*$//g'`#将src下面的com等目录取出
functionCompile_project(){
find$SRC_PATH-name*.java>$SRC_PATH/sources.list#将java的所有文件都找出
forJAVA_SOURCE_DIRin$JAVA_SOURCE_DIRS;do
rm-rf$CLASS_PATH/$JAVA_SOURCE_DIR
mkdir-p$CLASS_PATH/$JAVA_SOURCE_DIR#将源目录class下面的com等目录创建好,否则你拷贝class文件的时候就找不到目标目录拉
echo-e'\033[32m开始编译ing\033[37m'
#最关键的就是这里拉,-classpath需要说明编译的时候使用的lib是啥,-d说明的是,编译好之后,class应该生成到哪个目录
#-extdirs说明本project依赖的外部jar包情况,@就说明,需要编译的java文件列表,这就是之前为啥有爱哦findjava文件的原因
#使用-XDignore.symbol.file的原因:因为使用到了sun.awt.event.*不加这个参数会报错,比较好的解决办法是让开发修改掉,不要使用这些库

没有评论:

发表评论