使用NFS作為Glance儲存後端

語言: CN / TW / HK

NFS服務介紹

NFS網路檔案系統提供了一種在類UNIX系統上共享檔案的方法。目前NFS有3個版本:NFSv2、NFSv3、NFSv4。CentOS7預設使用NFSv4提供服務,優點是提供了有狀態的連線,更容易追蹤連線狀態,增強安全性。NFS監聽在TCP 2049埠上。客戶端通過掛載的方式將NFS伺服器端共享的資料目錄掛載到本地目錄下。在客戶端看來,使用NFS的遠端檔案就像是在使用本地檔案一樣,只要具有相應的許可權就可以使用各種檔案操作命令(如cp、cd、mv和rm等),對共享的檔案進行相應的操作。Linux作業系統既可以作為NFS伺服器也可以作為NFS客戶,這就意味著它可以把檔案系統共享給其他系統,也可以掛載從其他系統上共享的檔案系統。

為什麼需要安裝NFS服務?當伺服器訪問流量過大時,需要多臺伺服器進行分流,而這多臺伺服器可以使用NFS服務進行共享。NFS除了可以實現基本的檔案系統共享之外,還可以結合遠端網路啟動,實現無盤工作站(PXE啟動系統,所有資料均在伺服器的磁碟陣列上)或瘦客戶工作站(本地自動系統)。NFS應用場景多為高可用檔案共享,多臺伺服器共享同樣的資料,但是它的可擴充套件性比較差,本身高可用方案不完善。取而代之,資料量比較大的可以採用MFS、TFS、HDFS等分散式檔案系統。

NFS服務安裝與配置

此處nfs-server節點使用的基礎映象為CentOS7.9,該基礎映象中已經安裝了NFS服務,檢視當前安裝的NFS服務

① nfs-utils:包含NFS伺服器端守護程序和NFS客戶端相關工具。

② rpcbind:提供RPC的埠對映的守護程序及其相關文件、執行檔案等。

[[email protected] ~]# rpm -qa | grep nfs-utils
nfs-utils-1.3.0-0.61.el7.x86_64
[[email protected] ~]# rpm -qa | grep rpcbind
rpcbind-0.2.0-47.el7.x86_64
[[email protected] ~]#

建立一個目錄作為NFS的共享目錄

[[email protected] ~]# mkdir /mnt/test
[[email protected] ~]# ll /mnt/
total 0
drwxr-xr-x 2 root root 6 May  7 12:58 test

建立完共享目錄後,編輯NFS服務的配置檔案/etc/exports

[[email protected] ~]# cat /etc/exports
/mnt/test 10.60.3.0/24(rw,no_root_squash,no_all_squash,sync,anonuid=501,anongid=501)
[[email protected] ~]# exportfs -r
[[email protected] ~]#

配置檔案說明:

● /mnt/test:為共享目錄(若沒有這個目錄,請新建一個)。

● 10.60.3.0/24:可以為一個網段,一個IP,也可以是域名。域名支援萬用字元,例如,*.qq.com。

● rw:read-write,可讀寫。

● ro:read-only,只讀。

● sync:檔案同時寫入硬碟和記憶體。

● async:檔案暫存於記憶體,而不是直接寫入記憶體。

● wdelay:延遲寫操作。

● no_root_squash:NFS客戶端連線服務端時,如果使用的是root,那麼對服務端共享的目錄來說,也擁有root許可權。顯然開啟這項是不安全的。

● root_squash:NFS客戶端連線服務端時,如果使用的是root,那麼對服務端共享的目錄來說,擁有匿名使用者許可權,通常它將使用nobody或nfsnobody身份。

● all_squash:不論NFS客戶端連線服務端時使用什麼使用者,對服務端共享的目錄來說,都擁有匿名使用者許可權。

● anonuid:匿名使用者的UID(User Identification,使用者身份證明)值,可以在此處自行設定。

● anongid:匿名使用者的GID(Group Identification,共享資源系統使用者的群體身份)

NFS服務啟動

nfs-server端命令啟動NFS的相關服務,並配置開機啟動。

[email protected] ~]# systemctl start rpcbind
[[email protected] ~]# systemctl start nfs
[[email protected] ~]# systemctl enable rpcbind
[[email protected] ~]# systemctl enable nfs-server
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[[email protected] ~]#

nfs-server端檢視可掛載目錄

[[email protected] ~]# showmount -e 10.60.3.21
Export list for 10.60.3.21:
/mnt/test 10.60.3.0/24
[[email protected] ~]#

至此,NFS服務的Server端配置完畢,接下來要讓Controller節點作為NFS的Client端,配置Glance服務的後端儲存使用NFS服務

配置NFS作為Glance後端儲存

Controller節點,檢視是否安裝了NFS服務的客戶端

[[email protected] ~]#  rpm -qa |grep nfs-utils
nfs-utils-1.3.0-0.61.el7.x86_64

掛載目錄

在掛載目錄之前,必須要弄清楚一件事情,就是Glance服務的後端儲存在哪裡,或者說,使用glance image-create命令上傳的映象會被存放到哪裡。映象會被存放到/var/lib/glance/images目錄下,關於這個路徑,感興趣的讀者可以自行上傳映象測試

知道了Glance的儲存路徑,就可以掛載該目錄到NFS服務了

[[email protected] ~]# mount -t nfs 10.60.3.20:/mnt/test /var/lib/glance/images/
[[email protected] ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/vda1             100G   11G   90G  11% /
devtmpfs              3.8G     0  3.8G   0% /dev
tmpfs                 3.9G     0  3.9G   0% /dev/shm
tmpfs                 3.9G   17M  3.9G   1% /run
tmpfs                 3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/loop0            4.2G  4.2G     0 100% /opt/centos
/dev/loop1            3.6G  3.6G     0 100% /opt/iaas
tmpfs                 783M     0  783M   0% /run/user/0
10.60.3.20:/mnt/test  100G  967M  100G   1% /var/lib/glance/images
[[email protected] ~]#

修改配置

在做完掛載操作後,此時Glance服務還不能正常使用,若使用glance image-create命令上傳映象的話,會報錯,因為此時images目錄的使用者與使用者組不是glance,而是root,需要把images目錄的使用者與使用者組進行修改

[[email protected] images]# cd /var/lib/glance/
[[email protected] glance]# chown glance:glance images/
[[email protected] glance]# ll
total 0
drwxr-xr-x 2 glance glance 6 May  7 13:09 images
[[email protected] glance]#

測試驗證

這個時候,Glance服務就可以正常使用了,使用centos映象進行測試

[[email protected] images]# glance image-create --disk-format qcow2 --container-format bare --name centos --progress --file ./CentOS_7.5_x86_64_XD.qcow2 
[=============================>] 100%
+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | 3d3e9c954351a4b6953fd156f0c29f5c     |
| container_format | bare                                 |
| created_at       | 2022-05-07T13:18:54Z                 |
| disk_format      | qcow2                                |
| id               | 2afee0d2-cb11-47e0-890f-c6f49c089a04 |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | centos                               |
| owner            | bf36698d9afd45c4b46c1933469a9101     |
| protected        | False                                |
| size             | 510459904                            |
| status           | active                               |
| tags             | []                                   |
| updated_at       | 2022-05-07T13:19:52Z                 |
| virtual_size     | None                                 |
| visibility       | shared                               |
+------------------+--------------------------------------+

可以看到上傳映象成功。檢視images目錄下的檔案

[[email protected] images]# cd /var/lib/glance/images/
[[email protected] images]# ll
total 498496
-rw-r----- 1 glance glance 510459904 May  7 13:19 2afee0d2-cb11-47e0-890f-c6f49c089a04
[[email protected] images]#

然後回到nfs-server節點,檢視/mnt/test下的檔案

[[email protected] ~]# cd /mnt/test/
[[email protected] test]# ll
total 498496
-rw-r----- 1 161 161 510459904 May  7 13:19 2afee0d2-cb11-47e0-890f-c6f49c089a04
[[email protected] test]#

檔案的ID相同,驗證NFS作為Glance映象服務的後端儲存成功。