如何進行雲主機遷移?看這一篇文章就夠了!

歡迎你們前往騰訊雲+社區,獲取更多騰訊海量技術實踐乾貨哦~javascript

本文由 騰訊雲計算產品團隊發表於 雲+社區專欄

主機遷移概述

在雲計算時代,不論是從IDC上雲仍是多雲直接的遷移,都已是常見的事宜。而在上雲/遷移的方案中,也是有多種的方式可以將主機遷移到騰訊雲中。java

然而,不一樣的方式會有不一樣的利弊。python

目前,騰訊雲能夠提供導入鏡像和服務遷移(冷遷移)的工具,而這兩種方式均涉及到鏡像製做。故本文將分享鏡像製做的操做步驟,僅供參考。算法

一、在製做鏡像以前須要瞭解符合導入騰訊雲的鏡像文件要求,詳情可參考導入鏡像概述json

Linux 系統類型鏡像限制ubuntu

Windows 系統類型鏡像限制centos

二、接下來則依據操做系統的不一樣,選擇不一樣的鏡像製做方法。請分別參考官網文檔Linux 鏡像製做Windows 鏡像製做安全

三、在製做鏡像以前,須要在Linux操做系統裏安裝cloud-init,在Widows操做系統裏安裝cloud-base。相應的操做能夠查看官網文檔Linux 系統安裝 cloud-initWindows 系統安裝 cloud-base服務器

四、鏡像製做完畢以後,則須要將鏡像上傳至COS。網絡

五、當鏡像已經上傳到COS以後,則能夠利用【導入鏡像】將自定義鏡像導入到鏡像控制檯,而後再基於該自定義鏡像建立CVM。或者利用【服務遷移】的功能,直接從COS拉取鏡像並建立CVM。

相應的操做指引,其實官網文檔均已提供,而本文將做爲實踐的一些經驗分享,供你們參考,但願對你們有幫助。

鏡像製做

Linux和Windows鏡像製做的完整步驟官網文檔均已給出參考文檔,這裏補充兩個信息。

一、若是是友商雲主機,Linux系統的則可使用qemu-img 命令或者 dd 命令來製做鏡像;若是是Windows系統則可使用disk2vhd工具來製做鏡像。

二、若是是在本地IDC的虛擬機,可使用虛擬化平臺自帶的一些鏡像導出功能或者鏡像製做工具來製做鏡像。

三、若是是本地IDC的物理機,但是使用一些P2V的工具來製做或者參考1使用相關命令來製做。

友商雲主機鏡像製做(示例)

本示例是經過dd命令將某雲主機制做成鏡像,參考步驟以下。

0、製做鏡像以前,請先在操做系統內安裝cloud-init(Linux系統),詳細操做方法參考第二部分介紹。

一、因爲須要將雲主機經過dd方式將整個操做系統盤備份到數據盤,因此須要給雲主機掛一個約爲系統盤2倍容量的數據盤(單獨 購買的數據盤 須要先 掛載數據盤,而後格式化)。

二、通常雲主機裏面都有一些雲廠商的agent或者服務,好比騰訊雲的雲監控、雲安全的agent。當要把某雲主機遷移到騰訊雲時,應該把該雲主機內特定的一些組件和服務卸載掉或者禁用掉。

三、使用 dd 命令製做鏡像

dd if=/dev/vda of=/mnt/xxx_yun.raw bs=100M
請務必寫成/dev/vda而不要寫成/dev/vda1,不然dd出來的鏡像分區表和mbr信息都丟了

四、使用qemu-img 命令將raw文件轉換成qcow2文件,以能夠節省傳輸和遷移的時間。

qemu-img convert -f raw -O qcow2 xxx_yun.raw xxx_yun.qcow2

五、將qcow2鏡像文件上傳到騰訊雲COS

  • 安裝coscmd工具,pip install coscmd(在某雲主機上操做);
  • 建立bucket(在騰訊雲控制檯操做,示例melodytest01);
  • 使用命令將鏡像上傳至COS;
coscmd config -a <access_id> -s<secret_key> -u <appid> -b melodytest01 -r ap-beijing -m 10 -p 10
coscmd upload /mnt/xxx_yun.qcow2  xxx_yun.qcow2

六、 等待一段時間以後,登陸騰訊雲COS控制檯則能夠看到鏡像已經成功從某友商雲傳到COS了。

vmware vsphere 導出鏡像(參考)

打開虛擬機的編輯設置界面

vmdk磁盤文件路徑

這就是vmdk鏡像文件了

cloud-init安裝

關於Cloud-init和Cloud-base的安裝,官網上也給出了參考文檔。而Linux系統做爲經常使用的系統,本文的實踐示例則以Cloud-init爲例。

cloud-init簡單介紹

cloud-init 主要提供了一個實例首次初始化時的自定義配置的能力,若是導入的鏡像沒有安裝cloud-init服務,經過該鏡像啓動的實例就不會被正常初始化,所以該鏡像就會導入失敗。所以再製做鏡像以前應當在系統內安裝cloud-init。

  • Cloud-Init 是一個用來自動配置虛擬機的初始設置(如主機名、網卡、用戶名和密碼等)的開源工具;經常使用於在建立虛擬機時經過元數據服務對虛擬機基本配置,即主要用於解決雲計算場景下使用不一樣鏡像建立子機初始化問題。
  • cloud-init僅僅在系統啓動時運行,不會常駐系統;
  • 須要將cloud-init設置開機啓動,且不能在首次開機啓動後取消cloud-init的開機啓動。雖然第一次開啓啓動,cloud-init運行了以後初始化正常了,然而考慮到後續用戶有重置密碼、修改ip、加載密鑰等需求,仍須要依賴cloud-init,因此若是用戶在cloud-init初始化以後就取消了其開機啓動則會在用戶重啓系統以後,影響重置密碼、修改ip、加載密鑰等功能;
  • cloud-init每次啓動的時候會根據預先配置好的數據源從metadata server 或 configDrive 裏面拉取實例元數據對虛擬機進行初始化(該初始化操做只有在虛擬機首次啓動時纔會被執行),拉取userdata的信息執行用戶自定義的腳本行爲;
  • 當系統啓動時,cloud-init 可完成包括但不限於下面的定製化工做:

    • 設置 default locale
    • 設置 hostname
    • 添加 ssh keys到 .ssh/authorized_keys
    • 設置用戶密碼
    • 配置網絡
    • 安裝軟件包

cloud-init 安裝 tips

cloud-init的安裝其實仍是挺簡單的,最麻煩的是安裝依賴包。不一樣操做系統的依賴包的依賴包的版本還不同,若是是不能聯網的狀況下安裝,更是一件麻煩的事情。詳細步驟能夠查看官網文檔Linux 系統安裝 cloud-init,而我在此則僅補充相關tips,但願對你們有幫助。

  • 直接經過apt-get 或 yum 命令安裝的cloud-init 版本默認爲當前操做系統配置的軟件源裏面默認的cloud-init版本,一般狀況下和cloud-init 最新版本存會存在比較大的差別,使用這種方式安裝的鏡像建立出來的實例可能會存在部分配置項初始化不符合預期的狀況,建議使用手工下載最新cloud-init源碼包的方式進行安裝。
  • 若是機器能聯網,可直接運行命令進行安裝依賴包,參考命令以下:
yum intstall -y python-setuptools python-jinja2 python-prettytable python2-oauthlib python-configobj PyYAML python-requests python-jsonpatch python-six
  • 若是機器不能聯網,則能夠找臺與要製做鏡像的機器同操做系統版本的能夠聯網的機器,而後新建一個requirement.txt,將須要安裝的cloud-init的包都放進去requirement.txt,而後運行命令 pip download -d -r requirements.txt,這樣所有的依賴包都會被下下來了,最後,再將這些包放入那臺須要製做的機器便可。

requirement.txt的截圖

  • 最後,補充一份我實際測試時安裝的依賴包,供參考:
certifi-2017.11.5
chardet-3.0.4
configobj-5.0.6
functools32-3.2.3-2
idna-2.6
Jinja2-2.10
jsonpatch-1.20
jsonpointer-1.14
jsonschema-2.6.0
MarkupSafe-1.0
oauthlib-2.0.6
prettytable-0.7.2
PyYAML-3.12
requests-2.18.4
setuptools-38.2.4
six-1.11.0
urllib3-1.22
rpm -qa | grep setuptools
rpm -qa | grep jinja2
rpm -qa | grep prettytable
rpm -qa | grep oauthlib
rpm -qa | grep configobj
rpm -qa | grep PyYAML
rpm -qa | grep requests
rpm -qa | grep jsonpatch
rpm -qa | grep jsonschema
rpm -qa | grep six
  • 若是沒有安裝好,在安裝cloud-init的時候也會提示缺乏某某依賴包,到時候按照要求再安裝便可;
  • 須要安裝的依賴包,其實都裝cloud-init安裝包的requirements.txt文件中定好了包括版本要求。cat /cloud-init-17.2/requirements.txt便可查看。

修改 cloud-init 配置文件 tips

  • 發現部分用戶,安裝好cloud-init以後就製做鏡像了,上傳到騰訊雲以後,建立了CVM會發現一些異常,檢查會發現,原來是沒有按照官方要求進行cloud-init 配置文件的修改致使的。因此,這個步驟千萬別漏了。很重要哈。
  • 官網上給出了ubuntut和centos的參考配置文件,直接下載,而後替換便可。

設置 cloud-init 服務開機自啓動 tips

  • 這塊的操做官網也給出了詳細的文檔說明,可是是以systemd 自啓動服務管理爲例。而其實是須要根據當前操做系統使用的自啓動服務管理方式是什麼進行選擇,若是選擇出錯則 cloud-init 服務沒法開機自啓動。
  • 好比,在個人測試中,則發現systemctl: command not found,我測試的操做系統版本則是用service命令來啓動。

關於安裝cloud-init後的操做

常常有些用戶辛辛苦苦把鏡像上傳到cos了,到了導入鏡像,半天過去導入失敗了,才發現cloud-init的安裝有問題。那麼,如何能夠確認咱們安裝的cloud-init是沒問題的呢?下面的方法,供參考。

一、 運行cloud-init init —local

二、執行 ll /var/lib/cloud,正常會看到以下截圖內容

三、執行rm -rf /var/lib/cloud

四、重啓你的服務器,正常狀況下,每次重啓都會成/var/lib/cloud

五、也能夠執行cloud-init status看下狀態是否正常。

將鏡像導入COS

將鏡像文件上傳到COS,有多種工具可支持,詳情可參考官網文檔COS 用戶工具,也可使用控制檯的方式將鏡像上傳至COS。因爲操做較爲簡單,我就再也不重複演示。

導入鏡像功能使用

關於導入鏡像的詳細介紹可查看官網文檔導入鏡像概述,該功能須要開啓白名單方可以使用。相關操做演示以下,僅供參考。

一、登陸鏡像控制檯,選擇地域(請選擇與存放鏡像的COS的bucket同個地域),而後點擊【導入鏡像按鈕】。

二、閱讀導入鏡像的步驟,而且確認全部準備步驟已經完成。

三、填寫信息,而且開始導入。

  • 關於鏡像文件URL:選擇存儲鏡像的bucket,找到鏡像文件,而後點擊【文件信息】,在彈出來的框裏面,把【源文件連接】的信息複製出來,就是鏡像文件URL了

  • 關於地域,請選擇Bucket(存放鏡像文件的Bucket)所在的地域。其他的信息,如實按照鏡像的實情填寫便可。

  • 關於導入方式,若是正常安裝了cloud-init,則選擇【正常】,不然請選擇【強制】。

補充,若非級特殊的狀況沒法安裝cloud-init,不然請不要選擇強制導入。強制導入的鏡像,因爲沒有cloud-init,基於該鏡像建立的CVM,沒法初始化,須要再建立CVM以後,登陸操做系統進行許多初始化操做,是一件較爲麻煩的事情。

  • 最後,則是點擊【開始導入】,等待一段時間以後,會有站內信通知導入的結果。因爲沒有進度條之類的信息,沒法預估預計還須要多久纔能有結果。期間能夠登陸操做日誌控制檯進行查看狀態。

操做日誌控制檯

  • 鏡像導入成功以後,則能夠登陸鏡像控制檯,找到已經成功導入的鏡像,而後基於該鏡像建立雲主機。

40.jpg

服務遷移工具使用

近期騰訊雲也推出了新功能【服務遷移】,和【導入鏡像】的功能的差別,簡單描述以下。

一、導入鏡像,只能導入系統盤,數據盤沒法導入。而使用【雲服務器遷移】功能,能夠將系統盤和數據盤都導入到騰訊雲。

二、導入功能,步驟是把存在COS的鏡像導入到鏡像控制檯,而後再基於該鏡像建立CVM;而云服務器遷移則是,直接從COS上拉取鏡像文件,用該鏡像置換一個已存在的CVM實例的系統盤,從而實現遷移。(同理,數據盤的遷移也是一個相似的過程。得先建立CVM或者CBS,再使用雲服務器遷移的功能。)

離線實例遷移

下面是相關操做步驟,僅供參考。

一、 點擊【新建】按鈕新建一個遷移任務

二、瞭解遷入準備工做

三、填寫相關信息,開始遷移。

  • 填寫任務名稱
  • 填寫COS連接,即鏡像文件的COS連接,同導入鏡像時須要填寫的COS連接。
  • 選擇須要遷入的雲主機。正如我上面提到的,使用服務遷移的功能進行遷移,是須要預先建立一臺CVM,而後將導入的鏡像置換此臺CVM的系統盤,從而完成遷移。

四、等待遷移任務完成,能夠在控制檯中看到進度。

五、遷移100%完成以後,用戶則能夠到雲主機控制檯找到剛剛遷入的雲主機,從新開機啓動便可。

離線數據遷移

離線數據遷移指的是遷移數據盤。數據盤也是能夠製做成一個鏡像,上傳至COS,而後使用【離線數據遷移】的功能,將數據盤的鏡像文件遷移到CBS中。相關步驟相似【離線實例遷移】。

一、 點擊【新建】按鈕新建一個遷移任務

二、瞭解遷入準備工做

三、填寫相關信息,開始遷移。

  • 填寫任務名稱
  • 填寫COS連接,即鏡像文件的COS連接,同導入鏡像時須要填寫的COS連接。
  • 選擇須要遷入的雲硬盤。正如我上面提到的,使用服務遷移的功能進行遷移,是須要預先建立一個CBS雲盤,而後將導入的數據盤鏡像置換該雲盤,從而完成遷移。

四、等待遷移任務完成,能夠在控制檯中看到進度。

五、遷移100%完成以後,用戶將此雲盤掛載到雲主機便可。

問答
CVM的默認DNS配置?
相關閱讀
在 CentOS7.2 下 DIY 動手搭建一個 WordPress
基於混合集成學習算法的熱遷移超時預測模型
低於0.01%的極致Crash率是怎麼作到的?
【每日課程推薦】新加坡南洋理工大學博士,帶你深度學習NLP技術

此文已由做者受權騰訊雲+社區發佈,更多原文請點擊

搜索關注公衆號「雲加社區」,第一時間獲取技術乾貨,關注後回覆1024 送你一份技術課程大禮包!

海量技術實踐經驗,盡在雲加社區

相關文章
相關標籤/搜索