記錄一次公有云遷移

從某國內知名共有云平臺遷移至企鵝雲存在着種種問題,無法直接遷,手動部署苦不堪言,因此考慮採用鏡像方式進行copy。
首先各大公有云平臺之間架構和實現方式稍有差異,具體差異不做詳細闡述,因此如果想要雲平臺之間的鏡像互用的話就需要進行一系列的前提操做才能夠順利遷移,具體案例記錄如下:
首先準備一臺公有云(非企鵝雲)的centos服務器;
創建好服務器後首先檢查下該平臺是否支持以下步驟的驗證:
(1)確認當前內核是否支持virtio驅動

grep -i virtio /boot/config-$(uname -r)
如下圖所示:當前內核包含了virtio_blk和virtio_net驅動,並且是以模塊形式編譯的(CONFIG_VIRTIO_BLK=m,表示編譯成爲內核模塊,等於y表示編譯進內核),如果這一步沒有找到virtio_net或virtio_blk的驅動信息,那麼該鏡像 不支持 導入企鵝雲。記錄一次公有云遷移

如果內核支持virtio驅動(virtio_blk和virtio_net都支持),且virtio_blk驅動編譯進入了內核(即CONFIG_VIRTIO_BLK=y),則該內核支持導入,不需要後續確認,如果virtio_blk驅動是編譯成內核模塊的(即CONFIG_VIRTIO_BLK=m),則還需要繼續後續確認步驟,確認virtio_blk驅動正確包含進了initramfs(或initrd)文件中。

(2)確認initramfs中是否包含virtio_blk驅動

lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
如下圖所示,initramfs中包含了virtio_blk驅動,以及其所依賴的virtio.ko、virtio_pci.ko、virtio_ring.ko,這樣initramfs包含驅動正常,該鏡像可以導入。
記錄一次公有云遷移
驗證通過後:使用腳本運行:

#!/bin/bash
#author:wun
#企鵝雲鏡像導入準備腳本

#執行安裝cloud-init前需要先確認系統是否有BLK和net模塊
#grep -i virtio /boot/config-$(uname -r) #檢查內核是否支持BLK和NET

#lsinitrd /boot/initramfs-$(uname -r).img | grep virtio

#cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak

#mkinitrd -f --with=virtio_blk --with=virtio_pci /boot/initramfs-$(uname -r).img $(uname -r)

#安裝cloud-init-17
mkdir /migrate_QQ
cd /migrate_QQ
pip install setuptools jinja2 prettytable oauthlib configobj pyyaml requests jsonpatch jsonschema six
wget https://launchpad.net/cloud-init/trunk/17.1/+download/cloud-init-17.1.tar.gz
tar -zxvf cloud-init-17.1.tar.gz
cd ./cloud-init-17.1
python setup.py build
python setup.py install --init-system systemd

#新建系統用戶
useradd syslog

#備份原配置文件
cp /etc/cloud/cloud.cfg /etc/cloud/cloud.cfg.bak

#替換配置文件
echo "users:

  • default

disable_root: 0
ssh_pwauth: 1

datasource_list: [ ConfigDrive, None ]
datasource:
ConfigDrive:
dsmode: local

cloud_init_modules:

  • migrator
  • bootcmd
  • write-files
  • growpart
  • resizefs
  • set_hostname
  • update_hostname
  • update_etc_hosts
  • rsyslog
  • users-groups
  • ssh

cloud_config_modules:

  • mounts
  • locale
  • set-passwords
  • rh_subscription
  • yum-add-repo
  • package-update-upgrade-install
  • ntp
  • timezone
  • resolv_conf
  • puppet
  • chef
  • salt-minion
  • mcollective
  • disable-ec2-metadata
  • runcmd

unverified_modules: ['resolv_conf']

cloud_final_modules:

  • rightscale_userdata
  • scripts-per-once
  • scripts-per-boot
  • scripts-per-instance
  • scripts-user
  • ssh-authkey-fingerprints
  • keys-to-console
  • phone-home
  • final-message
  • power-state-change

system_info:
default_user:
name: centos
lock_passwd: false
gecos: Cloud User
groups: [wheel, adm, systemd-journal]
sudo: ['ALL=(ALL) NOPASSWD:ALL']
shell: /bin/bash
distro: rhel
paths:
cloud_dir: /var/lib/cloud
templates_dir: /etc/cloud/templates
ssh_svcname: sshd
#vim:syntax=yaml">/etc/cloud/cloud.cfg

#版本判斷
release=cat /etc/redhat-release|sed -r 's/.* ([0-9]+)\..*/\1/'
if [ "$release" = "7" ]; then
#centos7
systemctl enable cloud-init-local.service
systemctl enable cloud-init.service
systemctl enable cloud-config.service
systemctl enable cloud-final.service
systemctl start cloud-init-local.service
systemctl start cloud-init.service
systemctl start cloud-config.service
systemctl start cloud-final.service
elif [ "$release" = "6" ]; then
#centos6
chkconfig --add cloud-init-local
chkconfig --add cloud-init
chkconfig --add cloud-config
chkconfig --add cloud-final
chkconfig cloud-init-local on
chkconfig cloud-init on
chkconfig cloud-config on
chkconfig cloud-final on
fi

#備份原配置文件
cp /lib/systemd/system/cloud-init-local.service /lib/systemd/system/cloud-init-local.service.bak
cp /lib/systemd/system/cloud-init.service /lib/systemd/system/cloud-init.service.bak

#替換配置文件
echo "[Unit]
Description=Initial cloud-init job (pre-networking)
Wants=network-pre.target
After=systemd-remount-fs.service
Before=NetworkManager.service
Before=network-pre.target
Before=shutdown.target
Conflicts=shutdown.target
RequiresMountsFor=/var/lib/cloud

[Service]
Type=oneshot
ExecStart=/usr/bin/cloud-init init --local
ExecStart=/bin/touch /run/cloud-init/network-config-ready
RemainAfterExit=yes
TimeoutSec=0

#Output needs to appear in instance console output
StandardOutput=journal+console

[Install]
WantedBy=cloud-init.target">/.service

#替換配置文件
echo "[Unit]
Description=Initial cloud-init job (metadata service crawler)
Wants=cloud-init-local.service
Wants=sshd-keygen.service
Wants=sshd.service
After=cloud-init-local.service
After=systemd-networkd-wait-online.service
After=networking.service
After=systemd-hostnamed.service
Before=network-online.target
Before=sshd-keygen.service
Before=sshd.service
Before=systemd-user-sessions.service
Conflicts=shutdown.target

[Service]
Type=oneshot
ExecStart=/usr/bin/cloud-init init
RemainAfterExit=yes
TimeoutSec=0

#Output needs to appear in instance console output
StandardOutput=journal+console

[Install]
WantedBy=cloud-init.target">/.service

#初始化
cloud-init init --local
rm -rf /var/lib/cloud

導入以上腳本後執行腳本,如果腳本未報錯即證明準備工作已經完成,接下來是通過共有云平臺自帶的鏡像導出功能將鏡像導出至對應的公有云平臺的對象存儲中。。。。。。

至此源端的準備工作到此完成,剩下的就是通過企鵝的COS_migrate工具將剛纔導出的鏡像進行migrate,具體步驟如下:

  1. 獲取工具
    下載鏈接:https://github.com/tencentyun/cos_migrate_tool_v5

  2. 解壓縮工具包
    Windows
    解壓並保存到某個目錄,例如

    C:\Users\Administrator\Downloads\cos_migrate
    Linux
    解壓並保存到某個目錄

    unzip cos_migrate_tool_v5-master.zip && cd cos_migrate_tool_v5-master
    遷移工具結構
    正確解壓後的 COS Migration 工具目錄結構如下所示:

    COS_Migrate_tool
    |——conf #配置文件所在目錄
    | |——config.ini #遷移配置文件
    |——db #存儲遷移成功的記錄
    |——dep #程序主邏輯編譯生成的JAR包
    |——log #工具執行中生成的日誌
    |——opbin #用於編譯的腳本
    |——src #工具的源碼
    |——tmp #臨時文件存儲目錄
    |——pom.xml #項目配置文件
    |——README #說明文檔
    |——start_migrate.sh #Linux 下遷移啓動腳本
    |——start_migrate.bat #Windows 下遷移啓動腳本
    說明:

db 目錄主要記錄工具遷移成功的文件標識,每次遷移任務會優先對比 db 中的記錄,若當前文件標識已被記錄,則會跳過當前文件,否則進行文件遷移。
log 目錄記錄着工具遷移時的所有日誌,若在遷移過程中出現錯誤,請先查看該目錄下的 error.log。

  1. 修改 config.ini 配置文件
    在執行遷移啓動腳本之前,需先進行 config.ini 配置文件修改(路徑:./conf/config.ini),config.ini 內容可以分爲以下幾部分:

3.1 配置遷移類型
type 表示遷移類型,用戶根據遷移需求填寫對應的標識。例如,需要將本地數據遷移至 COS,則[migrateType]的配置內容是type=migrateLocal。

[migrateType]
type=migrateLocal
3.2 配置遷移任務
用戶根據實際的遷移需求進行相關配置,主要包括遷移至目標 COS 信息配置及遷移任務相關配置。

#遷移工具的公共配置分節,包含了要遷移到得目標 COS 的賬戶信息
[common]
secretId=AKIDXXXXXXXXXXXXXXXXX
secretKey=GYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
bucketName=mybcket-1251668577
region=ap-guangzhou
storageClass=Standard
cosPath=/
https=off
tmpFolder=./tmp
smallFileThreshold=5242880
smallFileExecutorNum=64
bigFileExecutorNum=8
entireFileMd5Attached=on
daemonMode=off
daemonModeInterVal=60
executeTimeWindow=00:00,24:00
3.3 配置數據源信息
根據[migrateType]的遷移類型配置相應的分節。例如[migrateType]的配置內容是type=migrateLocal, 則用戶只需配置[migrateLocal]分節即可。

3.3.1 配置本地數據源 migrateLocal

若從本地遷移至 COS,則進行該部分配置,具體配置項及說明如下:

#從本地遷移到COS配置分節
[migrateLocal]
localPath=E:\code\java\workspace\cos_migrate_tool\test_data
exeludes=
ignoreModifiedTimeLessThanSeconds=

  1. 運行遷移工具
    Windows
    雙擊 start_migrate.bat 即可運行。

Linux
1.從config.ini配置文件讀入配置,運行命令爲:

sh start_migrate.sh
2.部分參數從命令行讀入配置,運行命令爲:
sh start_migrate.sh -Dcommon.cosPath=/savepoint0403_10/

ok如果一切順利的話已經將鏡像傳輸至COS中,之後就只需要在平臺內導入鏡像即可完成,鏡像方式遷移。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章