Openstack 之 備份組件Freezer
上面左邊是我的個人微信,如需進一步溝通,請加微信。 右邊是我的公眾號“Openstack私有雲”,如有興趣,請關註。
Openstack有一個組件Freezer專門負責備份,據說這個組件的核心開發是國內的九州雲的開發人員。下面是2016年九州雲對這個組件的介紹鏈接:
http://www.99cloud.net/html/2016/jiuzhouyuanchuang_0818/213.html
可以看到,這個組件覆蓋了openstack相當部分的備份需求,包括虛擬機、卷、數據庫等。上面的介紹是2016年的,不知道現在是否能支持ceph,下面通過動手實驗來驗證。首先找到官網對應freezer組件這一塊的user guide :
https://docs.openstack.org/freezer/queens/user/index.html
安裝部分就先跳過了,我通過kolla進行部署,直接在全局變量配置文件 /etc/kolla/globals.yml中將下面2個參數打開然後進行重新部署:
enable_freezer: "yes" enable_horizon_freezer: "{{ enable_freezer | bool }}"
接下來繼續看官網的文檔,發現根據官網的操作根本行不通。後面發現這個網址:
https://zhuanlan.zhihu.com/p/31597476
根據這個文檔完成了後面的操作。首先需要進行client的註冊:
進入 freezer api容器
docker exec -it freezer_api bash
執行
freezer-scheduler start
報錯,提示需要設置OS_AUTH_URL,編輯變量文件 :
vi /etc/freezer-openrc.sh export OS_PROJECT_DOMAIN_NAME=default export OS_USER_DOMAIN_NAME=default export OS_PROJECT_NAME=admin export OS_TENANT_NAME=admin export OS_USERNAME=admin export OS_PASSWORD=admin export OS_AUTH_URL=http://192.168.1.120:5000/v3 //註,容器外部環境的端口值是35357 export OS_INTERFACE=internal export OS_IDENTITY_API_VERSION=3
以上內容保存退出,並生效這個環境變量文件:
source /etc/freezer-openrc.sh
再次執行
freezer-scheduler start
這個命令完成client的註冊,如果需要多個節點都有freezer_api容器,相應節點都需要執行。
這個時候再登錄web管理界面,Disaster Restore ->Backup and Restore->Clients 裏面就有相應的client記錄了。
接下來是對Nova進行備份,可以通過web界面進行備份,備份步驟如下:
1、創建Action。登錄web管理界面,Disaster Restore ->Backup and Restore->動作->Create Action ,填寫相關的參數,其中,action選擇backup,mode選擇nova,storage選擇swift(在我的環境中部署的是ceph rgw組件,具有對象存儲功能),Container Name or Path 填寫對象存儲的Container名稱比如Novabackup,填寫Nova Instance ID ,Network ID可以不填,其中日誌可以指定,如果不指定,日誌默認在容器freezer_api中/root/.freezer/freezer.log 文件中,也可以在Advance中指定;
2、創建Job。登錄web管理界面,Disaster Restore ->Backup and Restore->Job->Create Job ,填寫開始時間、結束時間,註意Clients需要選擇,動作需要選擇上面創建的動作,其中動作需要拖動,剛開始總是點擊沒有反應,後面才發現需要拖動;而且開始時間、結束時間感覺沒有用,我填寫了一個下午2點多開始,第二天下午2點結束的的時間,後面查看日誌,發現是晚上10點20開始執行,執行時間2分多鐘,感覺很詭異。
3、創建sessions。登錄web管理界面,Disaster Restore ->Backup and Restore->Sessions->Create Session ,Session的概念是可以將多個job放在一起,但真不知道有什麽作用。創建session的時候和創建Job的時候一樣,也有開始時間、間隔、結束時間,這裏我沒有填寫。
4、在Job中啟動。web管理界面,Disaster Restore ->Backup and Restore->Job->選中job“動作”的下拉框,attach to session ,然後點start。
在我的理解,啟動job應該如果沒有填寫開始和結束時間,應該直接點擊job start 就應該立刻開始進行action,但是實際上沒有,感覺有些困惑。總之,通過web界面磕磕碰碰能夠完成nova的backup操作,後面我通過web界面又建了restore的job,沒有立即生效,所以決定restore還是通過命令freezer-agent完成。
上面是通過web界面對nova的一個虛擬機進行備份,下面介紹通過命令freezer-agent完成nova虛擬機的備份和恢復:
1、備份命令:
freezer-agent --mode nova --nova-inst-id 4ad2e0fd-02ba-414e-acae-5f79e267ea96 --container Novabackup --backup-name bk_nova_1
備份完成之後可以登錄web界面查看對象存儲,項目->對象存儲->容器->選擇上面備份的Novabackup,可以看到對象存儲中備份的cirros虛擬機占用空間是1G,這個有點奇怪,原始虛擬機鏡像大小是30多M,具體原因尚不知道。
2、還原命令:
freezer-agent --action restore --mode nova --nova-inst-id 4ad2e0fd-02ba-414e-acae-5f79e267ea96 --nova-restore-network b7e25abb-fac4-4658-be0e-f7751cfb9a88 --container Novabackup 註意上面的命令網絡參數--nova-restore-network 是必填項。
通過同步查看日誌,恢復的過程是先從對象存儲中下載文件上傳鏡像,然後根據這個鏡像創建虛擬機,創建完成後刪除鏡像。但是在我這個案例中,由於使用的是ceph存儲,由於虛擬機創建是直接使用鏡像作為父鏡像,不能刪除,可以找到相應的卷或者instance的卷對應的rbd,然後執行flatten操作,完成之後再將臨時創建的鏡像刪除,具體操作記錄如下:
a、進入ceph_mon容器:
docker exec -it ceph_mon bash
b、找到ceph中虛擬機ID,可以通過web界面查看:
rbd -p vms ls rbd -p vms info 5e60590e-f061-4f1c-9ea3-947232855328_disk
c、對虛擬機的rbd鏡像鏡像flatten操作:
rbd -p vms flatten 5e60590e-f061-4f1c-9ea3-947232855328_disk
(ceph-mon)[root@control02 /]# ceph osd pool ls rbd .rgw.root default.rgw.control default.rgw.data.root default.rgw.gc default.rgw.log images volumes backups vms default.rgw.users.uid default.rgw.buckets.index default.rgw.buckets.data (ceph-mon)[root@control02 /]# rbd -p vms ls 5e60590e-f061-4f1c-9ea3-947232855328_disk ff6359fc-948d-4758-8b1b-d10f317e8b41_disk (ceph-mon)[root@control02 /]# rbd -p vms info 5e60590e-f061-4f1c-9ea3-947232855328_disk rbd image '5e60590e-f061-4f1c-9ea3-947232855328_disk': size 1024 MB in 256 objects order 22 (4096 kB objects) block_name_prefix: rbd_data.9d8324122da3 format: 2 features: layering, exclusive-lock, object-map, fast-diff, deep-flatten flags: parent: images/195b9889-a51d-4b5e-841f-8deda3f4eeab@snap overlap: 1024 MB (ceph-mon)[root@control02 /]# (ceph-mon)[root@control02 /]# (ceph-mon)[root@control02 /]# rbd -p vms flatten 5e60590e-f061-4f1c-9ea3-947232855328_disk Image flatten: 100% complete...done. (ceph-mon)[root@control02 /]#
3、查看和管理備份
freezer-agent --action info 可以查看已完成的備份
(freezer-api)[root@control01 ~]# freezer-agent --action info {u'count': 33, u'bytes': 1073741824, u'name': u'Novabackup'} { "container_name": "Novabackup", "objects_count": 33, "size": "1024MB" } {u'count': 33, u'bytes': 1073741824, u'name': u'freezer-nova'} { "container_name": "freezer-nova", "objects_count": 33, "size": "1024MB" } {u'count': 0, u'bytes': 0, u'name': u'freezer_backups'} { "container_name": "freezer_backups", "objects_count": 0, "size": "1MB" } (freezer-api)[root@control01 ~]#
Openstack 之 備份組件Freezer