使用NFS作為Glance存儲後端

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的埠映射的守護進程及其相關文檔、執行文件等。

[root@nfs-serverr ~]# rpm -qa | grep nfs-utils
nfs-utils-1.3.0-0.61.el7.x86_64
[root@nfs-server ~]# rpm -qa | grep rpcbind
rpcbind-0.2.0-47.el7.x86_64
[root@nfs-server ~]# 

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

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

創建完共享目錄後,編輯NFS服務的配置文件/etc/exports

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

配置文件說明:

● /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的相關服務,並配置開機啟動。

root@nfs-server ~]# systemctl start rpcbind
[root@nfs-server ~]# systemctl start nfs
[root@nfs-server ~]# systemctl enable rpcbind
[root@nfs-server ~]# 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.
[root@controller ~]# 

nfs-server端查看可掛載目錄

[root@nfs-server ~]# showmount -e 10.60.3.21
Export list for 10.60.3.21:
/mnt/test 10.60.3.0/24
[root@nfs-server ~]# 

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

配置NFS作為Glance後端存儲

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

[root@controller ~]#  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服務了

[root@controller ~]# mount -t nfs 10.60.3.20:/mnt/test /var/lib/glance/images/
[root@controller ~]# 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
[root@controller ~]# 

修改配置

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

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

測試驗證

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

[root@controller 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目錄下的文件

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

然後回到nfs-server節點,查看/mnt/test下的文件

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

文件的ID相同,驗證NFS作為Glance鏡像服務的後端存儲成功。