企業通用遷移上雲過程
随着雲計算平台的飛速發展,雲上IT資源在彈性、成本、豐富度方面越來越顯示出它的優勢。企業将線下的IT基礎設施資産遷移上雲越來越變成了一種趨勢和潮流。
在現代主流雲廠商的遷移服務過程中,企業級客戶一站式遷移上雲的典型過程路徑是:

- 遷移前:資産發現、評估
對現有IT服務資産進行發現評估,以便制定合适的遷移計劃。如伺服器系統使用伺服器備份遷移工具,資料庫采用DTS等,大資料采用閃電立方,其他應用如容器考慮容器鏡像遷移等。
- 遷移中:進度把控
遷移過程中,會依次進行遷移測試演練、遷移實施,以及遷移過程進度把控。
- 遷移後:業務驗證跟蹤
遷移完成後,在雲上進行業務交割。最終的遷移記錄還可以保留友善跟蹤。
其中伺服器系統資料作為現代企業IT資産中最重要的一環,也是本文所主要讨論的遷移上雲對象。
伺服器遷移上雲痛點
然而伺服器遷移上雲從來都不是一個容易的工作。傳統伺服器遷移上雲方式也需要大量手工操作完成,面臨着諸多痛難點問題:
- 操作麻煩、門檻高
在伺服器應用環境老舊、複雜的情況下,重新部署的成本非常之高。同時平遷的話也擔心還原度,成功率低。IT運維開發人員如果對老舊系統不熟悉,也不敢輕易遷移。
- 周期長、成本高
一般情況下使用離線導入導出鏡像的方式遷移,但這種方式如果遷移大量伺服器耗時将會非常長,遷移過程中也容易因為網絡原因中斷,需要大量重複勞動。遷移消耗大量人力資源不說,資料導出導入耗時效率也低。
- 效果差、影響業務
就算費盡千辛萬苦,把資料導入到雲平台,但對雲Guest OS規範标準不夠熟悉,制作的系統鏡像容易無法啟動,或者出現諸多異常,影響正常業務運作,叫苦不疊。
自動化遷移産品誕生
針對上述痛點問題,為了簡化使用者上雲過程,各個雲平台廠商也提供了很多自動化的伺服器遷移方式。例如AWS的SMS服務,Azure的Size Recovery等。
阿裡雲也提供了一種自動化遷移産品:伺服器遷移中心SMC。SMC支援全自動化遷移,可以讓伺服器遷移過程變得簡單、快捷、有效,同時高成本效益。作為一個合格的伺服器遷移方式,它需要滿足以下功能特點。
- 高度成熟化
首先需要适用各種遷移場景。支援系統盤+資料盤整體遷移,無需重新部署。同時相容各個伺服器系統平台,包括實體機、虛拟機以及各大雲平台。基本覆寫所有主流Windows、Linux、32位、64位作業系統版本。
- 高度自動化
最好支援簡單指令即可執行,遷移過程可以做到無人值守,降低使用門檻。從資料同步到資料處理,再到最後遷移結果的驗證都可以自動化完成。同時為了大大減少遷移周期,需要支援自動定期增量同步的靈活方案。最好能按需按量遷移,節省成本。
- 高度智能化
提供自動檢測、自适應修複的隻能功能。能實作自動對源伺服器進行遷移條件檢測并自動提供修複方案,遷移完成後自動完成虛拟化驅動配置,系統初始化服務如cloud-init安裝配置等,保障整體遷移效果,同時無需過多人力幹預,最大程度減少人員投入。
何為自動化遷移
基礎遷移功能介紹
在談自動化遷移之前,伺服器遷移産品首先要滿足一些基礎遷移功能,這是自動化遷移能力之本。
SMC作為上線3年、疊代超過70多個版本的伺服器遷移産品,已經累積了相當多的遷移經驗,同時沉澱出了很多強大的基礎遷移功能。
- 系統平台相容性高
- 支援實體機、虛拟機、各大雲平台伺服器,Any Platform To Alibaba Cloud。
- 支援所有主流Windows/Linux作業系統版本
- 支援主流的檔案系統格式:如NTFS、EXT2/3/4、XFS、BTRFS等
- 功能方案豐富靈活
- 支援一次性遷移,增量遷移,塊複制、檔案複制混合遷移,按需遷移高效靈活
- 支援公網傳輸,專線、VPN私網傳輸,适應各類複雜用戶端源環境
- 支援遷移到ECS鏡像,遷移到目标執行個體,甚至遷移到容器鏡像,滿足各種遷移場景
自動化遷移能力一覽
擁有了基礎遷移功能之後,我們再來看看現代自動化遷移具體有哪些能力。
當然這裡還是以SMC産品為例,主要包含以下3個方面。
- 遷移前:一鍵上傳遷移源資訊
自動收集遷移源資訊,便于分析評估,拟定遷移計劃
- 遷移中:一鍵啟動遷移任務
自動托管遷移全過程,無需人工幹涉,遷移進度一目了然
- 遷移後:一鍵驗證遷移結果
自動拉起遷移目标結果進行驗證,快速跟蹤遷移效果
如果遷移産品滿足了這些自動化遷移能力,我們就可以稱之為一個合格的伺服器遷移産品。
**
自動化遷移的正确姿勢
那麼怎麼能快速開始進行自動化遷移呢?自動化遷移的正确姿勢是還是要從學走路開始,正常路徑是先選一個簡單好用的遷移産品,比如SMC,從熟悉正常遷移操作開始。
正常遷移步驟
準備工作
要遷移到阿裡雲,首先要準備一個阿裡雲賬戶,確定一些條件
- 已實名認證
- 賬戶餘額>=100元(用于建立臨時遷移資源條件,實際花費可能是不到幾毛錢)
- 使用過或開通快照服務
- 準備賬号AK、SK,需要有AliyunSMCFullAccess權限
一般遷移産品都會有一個直覺易用的控制台操作面闆,主要操作步驟分為在源伺服器中操作和在控制台面闆中操作兩部分:
源伺服器操作
- 登入到源伺服器系統,部署對應版本的遷移用戶端程式;而SMC用戶端是綠色免安裝的,而且非常輕量友善部署
- 按提示運作遷移用戶端程式即可;SMC提供console指令行版本和符合windows使用者習慣的可視化界面版本
控制台操作
- 登入到遷移控制台入口,就可以選擇已導入的遷移源,開始建立遷移任務
- 配置好必要的任務參數,如目标區域,磁盤分區清單,目标類型等
- 成功建立并啟動後,找到已建立的任務,等待遷移完成即可
- 遷移完成後,還可以使用一些方式驗證遷移結果,比如用結果鏡像去建立執行個體進行驗證,或者如果遷移結果是一個目标執行個體,直接去目标執行個體驗證即可;當然SMC還提供一種自動驗證遷移結果的便捷功能,可以進行快速驗證
內建自動化遷移能力
在熟悉了基礎遷移功能之後,下一步就可以進階使用到更進階的遷移能力:将遷移功能內建到自己的工具産品服務裡去,為自己所用。
成熟開放的遷移産品肯定會考慮到客戶這個更高層次的需求,也就是二次開發能力,比如提供開放的OpenAPI接口,供客戶自由內建使用。而SMC當然也不例外。
使用SMC OpenAPI二次開發,配合雲上雲下各類運維工具,任何使用者都可以輕易地內建SMC遷移功能實作自動化遷移能力。下面就是內建SMC自動化遷移能力的具體姿勢。
自動化導入遷移源
使用運維工具如Ansible,下發自動化部署腳本到在遷移源伺服器系統中運作,SMC用戶端會在待遷移源伺服器背景運作起來,同時擷取遷移源Id等資訊。
Ansible Shell腳本代碼示例:
#!/bin/bash
echo "Prepare Alibaba Cloud Migration Tool..."
access_id=$1
secret_key=$2
# choose the right architure client tool
word_bit=$(getconf WORD_BIT)
long_bit=$(getconf LONG_BIT)
architure=""
if [ "$word_bit" == "32" ] && [ "$long_bit" == "64" ]; then
architure=x86_64
else
architure=i386
fi
dest_dir=/smc/
download_url="https://p2v-tools.oss-cn-hangzhou.aliyuncs.com/smc/Alibaba_Cloud_Migration_Tool.zip"
tools_path="$dest_dir"/Alibaba_Cloud_Migration_Tool_linux.zip
# download client tools
wget "$download_url" -O "$tools_path"
# decompress client tools
unzip "$tools_path" -d "$dest_dir"
tool_tar_path=$(find ${dest_dir} -name "go2aliyun_client*${architure}.zip" | head -1)
# decompress the right architure client tool
unzip "$tool_tar_path" -d "$dest_dir"
tool_dir=$(find ${dest_dir} -name "go2aliyun_client*${architure}" | head -1)
echo "Run Alibaba Cloud Migration Tool..."
exec_path="$tool_dir"/go2aliyun_client
chmod +x "$exec_path"
nohup $exec_path --accessid=$access_id --secretkey=$secret_key --nocheckversion --noenterkey &
sleep 30s
# get source id
source_id=$(cat "$tool_dir"/Logs/go2aliyun_client*.log | grep Successfully | awk -F 'Successfully' {'print $1'} | awk -F '[' {'print $4'} | awk -F ']' {'print $1'})
自動化建立并啟動遷移任務
使用SMC API調用腳本,指定遷移源Id等資訊來建立并啟動遷移任務,同時跟蹤遷移任務進度直至完成,擷取遷移結果鏡像Id等資訊。SMC支援多開發代碼平台SDK:Python、Java、C#、Go等
Python API調用代碼示例:
#!/usr/bin/env python
#coding=utf-8
import json
import time
import uuid
from aliyunsdkcore.client import AcsClient
from aliyunsdksmc.request.v20190601 import CreateReplicationJobRequest
from aliyunsdksmc.request.v20190601 import StartReplicationJobRequest
from aliyunsdksmc.request.v20190601 import DescribeReplicationJobsRequest
# 初始化AcsClient執行個體,設定地域ID及您的AccessKey資訊
client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-beijing')
# 建立遷移任務
def create_replication_job():
#建立API請求,并設定參數, 如遷移源ID,磁盤分區大小,遷移任務名、任務描述
request = CreateReplicationJobRequest.CreateReplicationJobRequest()
request.set_SourceId('s-bp152mkfswvidyr3****')
# 分區參數最好取遷移源的分區參數,如SizeBytes、Device
# 同時同一個磁盤下的分區大小之和要小于磁盤大小,否則磁盤分區可能初始化異常
request.set_SystemDiskSize(80)
request.add_query_param('SystemDiskPart.1.SizeBytes', 79 * 1024 * 1024 * 1024)
request.add_query_param('SystemDiskPart.1.Device', '0_0')
# request.set_ClientToken(uuid.uuid4())
request.set_Name('smcName')
request.set_Description('setDescription')
# (可選)設定已配置高速通道服務或者VPN網關的VPC的ID、VPC下的交換機ID
request.set_VpcId('vpc-bp1vwnn14rqpyiczj****')
request.set_VSwitchId('vsw-bp1ddbrxdlrcbim46****')
# 發送請求擷取傳回值
response = client.do_action_with_exception(request)
# python2: print(response)
print(str(response, encoding='utf-8'))
print('**********成功建立遷移任務**********')
return json.loads(response)['JobId']
# 啟動遷移任務
def start_replication_job(job_id):
# 建立API請求,并設定參數,如遷移任務ID
request = StartReplicationJobRequest.StartReplicationJobRequest()
request.set_JobId(job_id)
# 發送請求擷取傳回值
response = client.do_action_with_exception(request)
# python2: print(response)
print(str(response, encoding='utf-8'))
print('**********啟動遷移任務**********')
# 查詢遷移任務狀态、遷移結果鏡像
def describe_replication_jobs(job_ids):
# 建立API請求,并設定參數
request = DescribeReplicationJobsRequest.DescribeReplicationJobsRequest()
# 設定遷移任務ID清單
jobIds = [job_ids]
request.set_JobIds(jobIds)
# 設定遷移任務的名稱
request.set_Name('smcName')
# 設定遷移任務的頁碼
request.set_PageNumber(1)
# 設定每頁行數
request.set_PageSize(10)
# 設定遷移源ID清單
sourceIds = ['s-bp152mkfswvidyr3****']
request.set_SourceIds(sourceIds)
# 發送請求擷取傳回值
response = client.do_action_with_exception(request)
# python2: print(response)
print(str(response, encoding='utf-8'))
print('**********檢視遷移任務狀态**********')
jobslist = json.loads(response)['ReplicationJobs']['ReplicationJob']
for i in jobslist:
return (i['Status'], i['ImageId'])
# 執行建立遷移任務方法
job_id = create_replication_job()
# 執行啟動遷移任務方法
start_replication_job(job_id)
# 每隔10分鐘執行一次查詢遷移任務狀态,判斷是否遷移完成。
while True:
print('遷移任務正在執行……')
time.sleep(600)
status, image_id = describe_replication_jobs(job_id)
if status == 'Finished':
print('遷移完成, 遷移結果鏡像為 %s' % image_id)
break
自動化驗證遷移結果
使用OOS API調用腳本,指定遷移結果源鏡像Id,遷移源主機名、私網IP、執行個體規格等資訊來執行遷移結果自動化驗證模闆,同時擷取驗證結果資訊。該ACS-SMC-CreateAndVerifyInstance模闆過程會自動用指定鏡像Id建立臨時執行個體來自動驗證。同時還可以按需自定義符合自己業務邏輯的OOS驗證模闆。
#!/usr/bin/env python
#coding=utf-8
import json
import time
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkoos.request.v20190601.StartExecutionRequest import StartExecutionRequest
from aliyunsdkoos.request.v20190601.ListExecutionsRequest import ListExecutionsRequest
client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-beijing')
def start_execution(template_name, parameters=None):
request = StartExecutionRequest()
request.set_accept_format('json')
request.set_TemplateName(template_name)
if parameters:
parameters = json.dumps(parameters)
request.set_Parameters(parameters)
resp = client.do_action_with_exception(request)
return resp
def list_exexutions(execution_id=None):
request = ListExecutionsRequest()
if execution_id:
request.set_ExecutionId(execution_id)
resp = client.do_action_with_exception(request)
executions = resp['Executions']
if executions:
execution = executions[0]
return execution['Status'], execution['Outputs']
start_resp = start_execution(template_name='ACS-SMC-CreateAndVerifyInstance', parameters={
"regionId": "cn-beijing",
"zoneId": "cn-beijing-h",
"hostName": "testhostname",
"imageId": "m-xxxxxxxxxxxxxx",
"instanceType": "ecs.c5.2xlarge",
"privateIp": "172.17.30.48",
"systemDiskSize": 40,
"instancesCount": 1,
"isDeleteInstance": True,
"commandType": "",
"commandContent": "",
"timeout": 600,
"workingDir": "/root",
"rateControl": {
"mode": "Concurrency",
"maxErrors": 0,
"concurrency": 10
},
"OOSAssumeRole": ""
})
execution_id = start_resp['Execution']['ExecutionId']
# 每隔1分鐘執行一次查詢執行狀态,判斷是否驗證完成。
while True:
print('驗證正在執行……')
time.sleep(60)
status, outputs = list_exexutions(execution_id)
if status == 'Success':
print('遷移結果驗證通過, 輸出參數為 %s' % outputs)
break
總結
伺服器遷移工作是企業IT基礎資源資料上雲過程中必不可少的過程。而如何選用合适的遷雲方案也是非常值得探讨的話題。伺服器遷移本質上也是一種轉型改變,轉型和改變往往伴随着陣痛,本來不是簡單的過程。但如果選對了合适的雲産品和遷雲産品工具,企業上雲之路也會走得更加順暢。
阿裡雲伺服器遷移中心SMC,是為了解決客戶遷移伺服器系統應用環境上雲過程中的種種痛點而生的。SMC目标是能将任意平台的伺服器系統搬遷到阿裡雲,同時緻力于讓遷雲過程變得更加友善簡捷。
建議使用者可以先從熟悉正常遷移操作步驟開始,然後利用自動化遷移可內建能力,進一步加強遷移效能,更好地滿足各類遷移場景需求,這就是自動化遷移上雲的正确姿勢。