1. 程式人生 > >Ceph分布式存儲實戰(6)——Ceph存儲配置(CephFS的掛載)

Ceph分布式存儲實戰(6)——Ceph存儲配置(CephFS的掛載)

== 就是 ces osi test 文件系統 角色 低延時 分布式文件

一、什麽是POSIX標準
有一種情況是,在windows上寫的代碼,放到Linux上去運行居然報錯,為什麽?
比如在代碼中需要創建一個進程,linux下是fork函數,windows下是creatprocess函數,可我是在windows上寫的代碼,自然調用的是creatprocess函數
但是我將代碼拿到linux上運行,linux內核提供的系統調用根本就沒有creatprocess函數。怎麽可能會不報錯呢?對吧?
一定要註意,不同的內核提供的系統調用(也就是一個函數)是不同的。
因此,posix標準的出現就是為了解決這個問題。linux內核和windows內核提供的系統調用都要實現基本的posix標準,這樣就方便移植了。

二、什麽是CephFS
CephFS也稱ceph文件系統,他是一個POSIX兼容的分布式文件系統。

三、實現ceph文件系統的要求
1、需要一個已經正常運行的ceph集群
2、至少包含一個ceph元數據服務器(MDS)

為什麽ceph文件系統依賴於MDS?為毛線?
因為:
Ceph 元數據服務器( MDS )為 Ceph 文件系統存儲元數據。
元數據服務器使得POSIX 文件系統的用戶們,可以在不對 Ceph 存儲集群造成負擔的前提下,執行諸如 ls、find 等基本命令。

問題又來了,什麽是元數據?
可以簡單的理解為它是描述數據的數據,意思就是描述數據的信息,比如,數據的大小、位置、屬性等等信息

【可以在不對 Ceph 存儲集群造成負擔的前提下,執行諸如 ls、find 等基本命令。】意思就是說
在執行數據搜索和查看的時候,首先查找的是元數據,通過元數據中的描述信息準確且快速的找到數據。
而不用大費周章的在整個集群的osd上查找

通常,客戶端向cephfs發起I/O時,過程大概為兩步:
1、client端與mds節點通訊,獲取metadata信息(metadata也存在osd上)
2、client直接寫數據到osd


四、掛載ceph文件系統的方式
支持兩種方式
1、使用本地系統內核驅動程序進行掛載
2、使用ceph fuse進行掛載

五、創建mds
要運行 Ceph 文件系統,你必須先裝起至少帶一個 Ceph 元數據服務器的 Ceph 存儲集群。
我這裏讓ceph-node1,ceph-node2,ceph-node3 這三個節點都成為mds的角色
在管理節點上,通過ceph-deploy工具進行部署,執行命令如下
[root@ceph-node1 ~]# cd my-cluster/ #進入存放了ceph集群配置文件的目錄
[root@ceph-node1 my-cluster]# ceph-deploy mds create ceph-node1 ceph-node2 ceph-node3 #開始創建mds


六、創建CephFS
註意:
1、但是當前一套集群只能有一個文件系統存在。
2、一個 Ceph 文件系統需要至少兩個 RADOS 存儲池,一個用於數據、一個用於元數據。配置這些存儲池時需考慮:
2.1 為元數據存儲池設置較高的副本水平,因為此存儲池丟失任何數據都會導致整個文件系統失效。
2.2 為元數據存儲池分配低延時存儲器(像 SSD ),因為它會直接影響到客戶端的操作延時。

6.1 創建存儲池
確定 pg_num 取值是強制性的,因為不能自動計算。下面是幾個常用的值:
*少於 5 個 OSD 時可把 pg_num 設置為 128
*OSD 數量在 5 到 10 個時,可把 pg_num 設置為 512
*OSD 數量在 10 到 50 個時,可把 pg_num 設置為 4096
*OSD 數量大於 50 時,你得理解權衡方法、以及如何自己計算 pg_num 取值
*自己計算 pg_num 取值時可借助 pgcalc 工具
隨著 OSD 數量的增加,正確的 pg_num 取值變得更加重要,因為它顯著地影響著集群的行為、以及出錯時的數據持久性(即災難性事件導致數據丟失的概率)。

[root@ceph-node2 ~]# ceph osd pool create cephfs_data 128 #創建存儲數據的存儲池,128是PG數量
pool 'cephfs_data' created
[root@ceph-node2 ~]# ceph osd pool create cephfs_metadata 128 #創建存儲元數據的存儲池
pool 'cephfs_metadata' created
[root@ceph-node2 ~]# ceph osd lspools #查看池
0 rbd,1 HPC_Pool,2 my-test-pool,3 cephfs_data,4 cephfs_metadata,
[root@ceph-node2 ~]#

6.2 創建文件系統
創建好存儲池後,你就可以用 fs new 命令創建文件系統了:
[root@ceph-node2 ~]# ceph fs new mycephfs cephfs_metadata cephfs_data #開始執行創建,mycephfs是名字
new fs with metadata pool 4 and data pool 3
[root@ceph-node2 ~]# ceph fs ls #查看創建後的cephfs
name: mycephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

6.4 查看mds節點狀態
[root@ceph-node2 ~]# ceph mds stat
e45: 1/1/1 up {0=ceph-node3=up:active}, 2 up:standby #ceph-node3是活躍的,那麽其他兩個是處於熱備份的狀態

文件系統創建完畢後, MDS 服務器就能達到 active 狀態了,比如在一個單 MDS 系統中
建好文件系統且 MDS 活躍後,你就可以掛載此文件系統了


七、使用內核驅動程序掛載CephFs

1、在ceph-client1客戶端節點上創建掛載點目錄
[root@ceph-client1 ~]# mkdir /mnt/mycephfs


2、查看管理員秘鑰
因為要掛載啟用了 cephx 認證的 Ceph 文件系統,所以必須指定用戶名、密鑰。
[root@ceph-client1 ~]# cd /etc/ceph/
[root@ceph-client1 ceph]# cat ceph.client.admin.keyring
[client.admin]
key = AQBOp0xaDyeNGBAAqbEktnUq5GFVF5arsWbesA== #這個就是管理員的秘鑰,等會掛載的時候用得上
caps mds = "allow *"
caps mon = "allow *"
caps osd = "allow *"

3、使用linux的mount命令掛載cephfs
[root@ceph-client1 mnt]# mount -t ceph 192.168.89.103:6789:/ /mnt/mycephfs -o name=admin,secret=AQBOp0xaDyeNGBAAqbEktnUq5GFVF5arsWbesA==

4、用df -h命令查看掛載情況
[root@ceph-client1 mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 471M 0 471M 0% /dev
tmpfs 483M 0 483M 0% /dev/shm
tmpfs 483M 6.6M 477M 2% /run
tmpfs 483M 0 483M 0% /sys/fs/cgroup
/dev/mapper/cl-root 8.0G 1.5G 6.5G 19% /
/dev/sda1 1014M 186M 829M 19% /boot
/dev/rbd0 10G 33M 10G 1% /mnt/ceph-vol1
tmpfs 97M 0 97M 0% /run/user/0
192.168.89.103:6789:/ 45G 436M 45G 1% /mnt/mycephfs #這個就是掛載好的cephfs

5、卸載cephfs
[root@ceph-client1 mnt]# umount /mnt/mycephfs
[root@ceph-client1 mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 471M 0 471M 0% /dev
tmpfs 483M 0 483M 0% /dev/shm
tmpfs 483M 6.6M 477M 2% /run
tmpfs 483M 0 483M 0% /sys/fs/cgroup
/dev/mapper/cl-root 8.0G 1.5G 6.5G 19% /
/dev/sda1 1014M 186M 829M 19% /boot
/dev/rbd0 10G 33M 10G 1% /mnt/ceph-vol1
tmpfs 97M 0 97M 0% /run/user/0

6、以更安全的方式掛載
用法會把密碼遺留在 Bash 歷史裏,更安全的方法是從文件讀密碼
將admin的秘鑰保存到文件裏
[root@ceph-client1 mnt]# echo "AQBOp0xaDyeNGBAAqbEktnUq5GFVF5arsWbesA==" > /etc/ceph/admin.secret
[root@ceph-client1 mnt]# mount -t ceph 192.168.89.103:6789:/ /mnt/mycephfs -o name=admin,secretfile=/etc/ceph/admin.secret
[root@ceph-client1 mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 471M 0 471M 0% /dev
tmpfs 483M 0 483M 0% /dev/shm
tmpfs 483M 6.6M 477M 2% /run
tmpfs 483M 0 483M 0% /sys/fs/cgroup
/dev/mapper/cl-root 8.0G 1.5G 6.5G 19% /
/dev/sda1 1014M 186M 829M 19% /boot
/dev/rbd0 10G 33M 10G 1% /mnt/ceph-vol1
tmpfs 97M 0 97M 0% /run/user/0
192.168.89.103:6789:/ 45G 436M 45G 1% /mnt/mycephfs #這個就是掛載好的cephfs

Ceph分布式存儲實戰(6)——Ceph存儲配置(CephFS的掛載)