如何进行云主机迁移?看这一篇文章就够了!
歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術(shù)實(shí)踐干貨哦~
本文由騰訊云計(jì)算產(chǎn)品團(tuán)隊(duì)發(fā)表于云+社區(qū)專欄
主機(jī)遷移概述
在云計(jì)算時(shí)代,不管是從IDC上云還是多云直接的遷移,都已經(jīng)是常見的事宜。而在上云/遷移的方案中,也是有多種的方式能夠?qū)⒅鳈C(jī)遷移到騰訊云中。
然而,不同的方式會(huì)有不同的利弊。
目前,騰訊云可以提供導(dǎo)入鏡像和服務(wù)遷移(冷遷移)的工具,而這兩種方式均涉及到鏡像制作。故本文將分享鏡像制作的操作步驟,僅供參考。
1、在制作鏡像之前需要了解符合導(dǎo)入騰訊云的鏡像文件要求,詳情可參考導(dǎo)入鏡像概述。
Linux 系統(tǒng)類型鏡像限制
Windows 系統(tǒng)類型鏡像限制
2、接下來則依據(jù)操作系統(tǒng)的不同,選擇不同的鏡像制作方法。請分別參考官網(wǎng)文檔Linux 鏡像制作和Windows 鏡像制作。
3、在制作鏡像之前,需要在Linux操作系統(tǒng)里安裝cloud-init,在Widows操作系統(tǒng)里安裝cloud-base。相應(yīng)的操作可以查看官網(wǎng)文檔Linux 系統(tǒng)安裝 cloud-init和Windows 系統(tǒng)安裝 cloud-base。
4、鏡像制作完畢之后,則需要將鏡像上傳至COS。
5、當(dāng)鏡像已經(jīng)上傳到COS之后,則可以利用【導(dǎo)入鏡像】將自定義鏡像導(dǎo)入到鏡像控制臺(tái),然后再基于該自定義鏡像創(chuàng)建CVM?;蛘呃谩痉?wù)遷移】的功能,直接從COS拉取鏡像并創(chuàng)建CVM。
相應(yīng)的操作指引,其實(shí)官網(wǎng)文檔均已提供,而本文將作為實(shí)踐的一些經(jīng)驗(yàn)分享,供大家參考,希望對大家有幫助。
鏡像制作
Linux和Windows鏡像制作的完整步驟官網(wǎng)文檔均已給出參考文檔,這里補(bǔ)充兩個(gè)信息。
1、如果是友商云主機(jī),Linux系統(tǒng)的則可以使用qemu-img 命令或者 dd 命令來制作鏡像;如果是Windows系統(tǒng)則可以使用disk2vhd工具來制作鏡像。
2、如果是在本地IDC的虛擬機(jī),可以使用虛擬化平臺(tái)自帶的一些鏡像導(dǎo)出功能或者鏡像制作工具來制作鏡像。
3、如果是本地IDC的物理機(jī),可是使用一些P2V的工具來制作或者參考1使用相關(guān)命令來制作。
友商云主機(jī)鏡像制作(示例)
本示例是通過dd命令將某云主機(jī)制作成鏡像,參考步驟如下。
0、制作鏡像之前,請先在操作系統(tǒng)內(nèi)安裝cloud-init(Linux系統(tǒng)),詳細(xì)操作方法參考第二部分介紹。
1、由于需要將云主機(jī)通過dd方式將整個(gè)操作系統(tǒng)盤備份到數(shù)據(jù)盤,所以需要給云主機(jī)掛一個(gè)約為系統(tǒng)盤2倍容量的數(shù)據(jù)盤(單獨(dú) 購買的數(shù)據(jù)盤 需要先 掛載數(shù)據(jù)盤,然后格式化)。
2、一般云主機(jī)里面都有一些云廠商的agent或者服務(wù),比如騰訊云的云監(jiān)控、云安全的agent。當(dāng)要把某云主機(jī)遷移到騰訊云時(shí),應(yīng)該把該云主機(jī)內(nèi)特定的一些組件和服務(wù)卸載掉或者禁用掉。
3、使用 dd 命令制作鏡像
dd if=/dev/vda of=/mnt/xxx_yun.raw bs=100M 請務(wù)必寫成/dev/vda而不要寫成/dev/vda1,否則dd出來的鏡像分區(qū)表和mbr信息都丟了 復(fù)制代碼4、使用qemu-img 命令將raw文件轉(zhuǎn)換成qcow2文件,以可以節(jié)省傳輸和遷移的時(shí)間。
qemu-img convert -f raw -O qcow2 xxx_yun.raw xxx_yun.qcow2 復(fù)制代碼5、將qcow2鏡像文件上傳到騰訊云COS
- 安裝coscmd工具,pip install coscmd(在某云主機(jī)上操作);
- 創(chuàng)建bucket(在騰訊云控制臺(tái)操作,示例melodytest01);
- 使用命令將鏡像上傳至COS;
6、 等待一段時(shí)間之后,登錄騰訊云COS控制臺(tái)則可以看到鏡像已經(jīng)成功從某友商云傳到COS了。
vmware vsphere 導(dǎo)出鏡像(參考)
打開虛擬機(jī)的編輯設(shè)置界面
vmdk磁盤文件路徑
這就是vmdk鏡像文件了
cloud-init安裝
關(guān)于Cloud-init和Cloud-base的安裝,官網(wǎng)上也給出了參考文檔。而Linux系統(tǒng)作為常用的系統(tǒng),本文的實(shí)踐示例則以Cloud-init為例。
cloud-init簡單介紹
cloud-init 主要提供了一個(gè)實(shí)例首次初始化時(shí)的自定義配置的能力,如果導(dǎo)入的鏡像沒有安裝cloud-init服務(wù),通過該鏡像啟動(dòng)的實(shí)例就不會(huì)被正常初始化,因此該鏡像就會(huì)導(dǎo)入失敗。因此再制作鏡像之前應(yīng)當(dāng)在系統(tǒng)內(nèi)安裝cloud-init。
- Cloud-Init 是一個(gè)用來自動(dòng)配置虛擬機(jī)的初始設(shè)置(如主機(jī)名、網(wǎng)卡、用戶名和密碼等)的開源工具;常用于在創(chuàng)建虛擬機(jī)時(shí)通過元數(shù)據(jù)服務(wù)對虛擬機(jī)基本配置,即主要用于解決云計(jì)算場景下使用不同鏡像創(chuàng)建子機(jī)初始化問題。
- cloud-init僅僅在系統(tǒng)啟動(dòng)時(shí)運(yùn)行,不會(huì)常駐系統(tǒng);
- 需要將cloud-init設(shè)置開機(jī)啟動(dòng),且不能在首次開機(jī)啟動(dòng)后取消cloud-init的開機(jī)啟動(dòng)。雖然第一次開啟啟動(dòng),cloud-init運(yùn)行了之后初始化正常了,然而考慮到后續(xù)用戶有重置密碼、修改ip、加載密鑰等需求,仍需要依賴cloud-init,所以如果用戶在cloud-init初始化之后就取消了其開機(jī)啟動(dòng)則會(huì)在用戶重啟系統(tǒng)之后,影響重置密碼、修改ip、加載密鑰等功能;
- cloud-init每次啟動(dòng)的時(shí)候會(huì)根據(jù)預(yù)先配置好的數(shù)據(jù)源從metadata server 或 configDrive 里面拉取實(shí)例元數(shù)據(jù)對虛擬機(jī)進(jìn)行初始化(該初始化操作只有在虛擬機(jī)首次啟動(dòng)時(shí)才會(huì)被執(zhí)行),拉取userdata的信息執(zhí)行用戶自定義的腳本行為;
- 當(dāng)系統(tǒng)啟動(dòng)時(shí),cloud-init 可完成包括但不限于下面的定制化工作:
- 設(shè)置 default locale
- 設(shè)置 hostname
- 添加 ssh keys到 .ssh/authorized_keys
- 設(shè)置用戶密碼
- 配置網(wǎng)絡(luò)
- 安裝軟件包
cloud-init 安裝 tips
cloud-init的安裝其實(shí)還是挺簡單的,最麻煩的是安裝依賴包。不同操作系統(tǒng)的依賴包的依賴包的版本還不一樣,如果是不能聯(lián)網(wǎng)的情況下安裝,更是一件麻煩的事情。詳細(xì)步驟可以查看官網(wǎng)文檔Linux 系統(tǒng)安裝 cloud-init,而我在此則僅補(bǔ)充相關(guān)tips,希望對大家有幫助。
- 直接通過apt-get 或 yum 命令安裝的cloud-init 版本默認(rèn)為當(dāng)前操作系統(tǒng)配置的軟件源里面默認(rèn)的cloud-init版本,通常情況下和cloud-init 最新版本存會(huì)存在比較大的差異,使用這種方式安裝的鏡像創(chuàng)建出來的實(shí)例可能會(huì)存在部分配置項(xiàng)初始化不符合預(yù)期的情況,建議使用手工下載最新cloud-init源碼包的方式進(jìn)行安裝。
- 如果機(jī)器能聯(lián)網(wǎng),可直接運(yùn)行命令進(jìn)行安裝依賴包,參考命令如下:
- 如果機(jī)器不能聯(lián)網(wǎng),則可以找臺(tái)與要制作鏡像的機(jī)器同操作系統(tǒng)版本的可以聯(lián)網(wǎng)的機(jī)器,然后新建一個(gè)requirement.txt,將需要安裝的cloud-init的包都放進(jìn)去requirement.txt,然后運(yùn)行命令 pip download -d -r requirements.txt,這樣全部的依賴包都會(huì)被下下來了,最后,再將這些包放入那臺(tái)需要制作的機(jī)器即可。
requirement.txt的截圖
- 最后,補(bǔ)充一份我實(shí)際測試時(shí)安裝的依賴包,供參考:
- 說明,以上依賴包我都是用pip安裝的,可以在pypi.python.org/pypi 下載。
- 也可以安裝rpm包,可以在mirrors.cloud.tencent.com/epel/ 找合適的包來安裝。安裝完成之后,請運(yùn)行以下命令檢查下是否都安裝好了
- 如果沒有安裝好,在安裝cloud-init的時(shí)候也會(huì)提示缺少某某依賴包,到時(shí)候按照要求再安裝即可;
- 需要安裝的依賴包,其實(shí)都裝cloud-init安裝包的requirements.txt文件中定好了包括版本要求。cat /cloud-init-17.2/requirements.txt即可查看。
修改 cloud-init 配置文件 tips
- 發(fā)現(xiàn)部分用戶,安裝好cloud-init之后就制作鏡像了,上傳到騰訊云之后,創(chuàng)建了CVM會(huì)發(fā)現(xiàn)一些異常,檢查會(huì)發(fā)現(xiàn),原來是沒有按照官方要求進(jìn)行cloud-init 配置文件的修改導(dǎo)致的。所以,這個(gè)步驟千萬別漏了。很重要哈。
- 官網(wǎng)上給出了ubuntut和centos的參考配置文件,直接下載,然后替換即可。
設(shè)置 cloud-init 服務(wù)開機(jī)自啟動(dòng) tips
- 這塊的操作官網(wǎng)也給出了詳細(xì)的文檔說明,但是是以systemd 自啟動(dòng)服務(wù)管理為例。而實(shí)際上是需要根據(jù)當(dāng)前操作系統(tǒng)使用的自啟動(dòng)服務(wù)管理方式是什么進(jìn)行選擇,如果選擇出錯(cuò)則 cloud-init 服務(wù)無法開機(jī)自啟動(dòng)。
- 比如,在我的測試中,則發(fā)現(xiàn)systemctl: command not found,我測試的操作系統(tǒng)版本則是用service命令來啟動(dòng)。
關(guān)于安裝cloud-init后的操作
經(jīng)常有些用戶辛辛苦苦把鏡像上傳到cos了,到了導(dǎo)入鏡像,半天過去導(dǎo)入失敗了,才發(fā)現(xiàn)cloud-init的安裝有問題。那么,如何可以確認(rèn)我們安裝的cloud-init是沒問題的呢?下面的方法,供參考。
1、 運(yùn)行cloud-init init —local
2、執(zhí)行 ll /var/lib/cloud,正常會(huì)看到如下截圖內(nèi)容
3、執(zhí)行rm -rf /var/lib/cloud
4、重啟你的服務(wù)器,正常情況下,每次重啟都會(huì)成/var/lib/cloud
5、也可以執(zhí)行cloud-init status看下狀態(tài)是否正常。
將鏡像導(dǎo)入COS
將鏡像文件上傳到COS,有多種工具可支持,詳情可參考官網(wǎng)文檔COS 用戶工具,也可以使用控制臺(tái)的方式將鏡像上傳至COS。由于操作較為簡單,我就不再重復(fù)演示。
導(dǎo)入鏡像功能使用
關(guān)于導(dǎo)入鏡像的詳細(xì)介紹可查看官網(wǎng)文檔導(dǎo)入鏡像概述,該功能需要開啟白名單方可使用。相關(guān)操作演示如下,僅供參考。
1、登錄鏡像控制臺(tái),選擇地域(請選擇與存放鏡像的COS的bucket同個(gè)地域),然后點(diǎn)擊【導(dǎo)入鏡像按鈕】。
2、閱讀導(dǎo)入鏡像的步驟,并且確認(rèn)所有準(zhǔn)備步驟已經(jīng)完成。
3、填寫信息,并且開始導(dǎo)入。
- 關(guān)于鏡像文件URL:選擇存儲(chǔ)鏡像的bucket,找到鏡像文件,然后點(diǎn)擊【文件信息】,在彈出來的框里面,把【源文件鏈接】的信息復(fù)制出來,就是鏡像文件URL了
- 關(guān)于地域,請選擇Bucket(存放鏡像文件的Bucket)所在的地域。其余的信息,如實(shí)按照鏡像的實(shí)情填寫即可。
- 關(guān)于導(dǎo)入方式,如果正常安裝了cloud-init,則選擇【正?!?#xff0c;否則請選擇【強(qiáng)制】。
補(bǔ)充,若非級特殊的情況無法安裝cloud-init,否則請不要選擇強(qiáng)制導(dǎo)入。強(qiáng)制導(dǎo)入的鏡像,由于沒有cloud-init,基于該鏡像創(chuàng)建的CVM,無法初始化,需要再創(chuàng)建CVM之后,登錄操作系統(tǒng)進(jìn)行許多初始化操作,是一件較為麻煩的事情。
- 最后,則是點(diǎn)擊【開始導(dǎo)入】,等待一段時(shí)間之后,會(huì)有站內(nèi)信通知導(dǎo)入的結(jié)果。由于沒有進(jìn)度條之類的信息,無法預(yù)估預(yù)計(jì)還需要多久才能有結(jié)果。期間可以登錄操作日志控制臺(tái)進(jìn)行查看狀態(tài)。
操作日志控制臺(tái)
- 鏡像導(dǎo)入成功之后,則可以登錄鏡像控制臺(tái),找到已經(jīng)成功導(dǎo)入的鏡像,然后基于該鏡像創(chuàng)建云主機(jī)。
40.jpg
服務(wù)遷移工具使用
近期騰訊云也推出了新功能【服務(wù)遷移】,和【導(dǎo)入鏡像】的功能的差異,簡單描述如下。
1、導(dǎo)入鏡像,只能導(dǎo)入系統(tǒng)盤,數(shù)據(jù)盤無法導(dǎo)入。而使用【云服務(wù)器遷移】功能,可以將系統(tǒng)盤和數(shù)據(jù)盤都導(dǎo)入到騰訊云。
2、導(dǎo)入功能,步驟是把存在COS的鏡像導(dǎo)入到鏡像控制臺(tái),然后再基于該鏡像創(chuàng)建CVM;而云服務(wù)器遷移則是,直接從COS上拉取鏡像文件,用該鏡像置換一個(gè)已存在的CVM實(shí)例的系統(tǒng)盤,從而實(shí)現(xiàn)遷移。(同理,數(shù)據(jù)盤的遷移也是一個(gè)類似的過程。得先創(chuàng)建CVM或者CBS,再使用云服務(wù)器遷移的功能。)
離線實(shí)例遷移
下面是相關(guān)操作步驟,僅供參考。
1、 點(diǎn)擊【新建】按鈕新建一個(gè)遷移任務(wù)
2、了解遷入準(zhǔn)備工作
3、填寫相關(guān)信息,開始遷移。
- 填寫任務(wù)名稱
- 填寫COS鏈接,即鏡像文件的COS鏈接,同導(dǎo)入鏡像時(shí)需要填寫的COS鏈接。
- 選擇需要遷入的云主機(jī)。正如我上面提到的,使用服務(wù)遷移的功能進(jìn)行遷移,是需要預(yù)先創(chuàng)建一臺(tái)CVM,然后將導(dǎo)入的鏡像置換此臺(tái)CVM的系統(tǒng)盤,從而完成遷移。
4、等待遷移任務(wù)完成,可以在控制臺(tái)中看到進(jìn)度。
5、遷移100%完成之后,用戶則可以到云主機(jī)控制臺(tái)找到剛剛遷入的云主機(jī),重新開機(jī)啟動(dòng)即可。
離線數(shù)據(jù)遷移
離線數(shù)據(jù)遷移指的是遷移數(shù)據(jù)盤。數(shù)據(jù)盤也是可以制作成一個(gè)鏡像,上傳至COS,然后使用【離線數(shù)據(jù)遷移】的功能,將數(shù)據(jù)盤的鏡像文件遷移到CBS中。相關(guān)步驟類似【離線實(shí)例遷移】。
1、 點(diǎn)擊【新建】按鈕新建一個(gè)遷移任務(wù)
2、了解遷入準(zhǔn)備工作
3、填寫相關(guān)信息,開始遷移。
- 填寫任務(wù)名稱
- 填寫COS鏈接,即鏡像文件的COS鏈接,同導(dǎo)入鏡像時(shí)需要填寫的COS鏈接。
- 選擇需要遷入的云硬盤。正如我上面提到的,使用服務(wù)遷移的功能進(jìn)行遷移,是需要預(yù)先創(chuàng)建一個(gè)CBS云盤,然后將導(dǎo)入的數(shù)據(jù)盤鏡像置換該云盤,從而完成遷移。
4、等待遷移任務(wù)完成,可以在控制臺(tái)中看到進(jìn)度。
5、遷移100%完成之后,用戶將此云盤掛載到云主機(jī)即可。
問答
CVM的默認(rèn)DNS配置?
相關(guān)閱讀
在 CentOS7.2 下 DIY 動(dòng)手搭建一個(gè) WordPress
基于混合集成學(xué)習(xí)算法的熱遷移超時(shí)預(yù)測模型
低于0.01%的極致Crash率是怎么做到的?
【每日課程推薦】新加坡南洋理工大學(xué)博士,帶你深度學(xué)習(xí)NLP技術(shù)
此文已由作者授權(quán)騰訊云+社區(qū)發(fā)布,更多原文請點(diǎn)擊
搜索關(guān)注公眾號「云加社區(qū)」,第一時(shí)間獲取技術(shù)干貨,關(guān)注后回復(fù)1024 送你一份技術(shù)課程大禮包!
海量技術(shù)實(shí)踐經(jīng)驗(yàn),盡在云加社區(qū)!
總結(jié)
以上是生活随笔為你收集整理的如何进行云主机迁移?看这一篇文章就够了!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: and和or运算
- 下一篇: laravel 在nginx服务器上除了