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

1、什麼是POSIX標準
    有一種狀況是,在windows上寫的代碼,放到Linux上去運行竟然報錯,爲何?
    好比在代碼中須要建立一個進程,linux下是fork函數,windows下是creatprocess函數,可我是在windows上寫的代碼,天然調用的是creatprocess函數
    可是我將代碼拿到linux上運行,linux內核提供的系統調用根本就沒有creatprocess函數。怎麼可能會不報錯呢?對吧?
    必定要注意,不一樣的內核提供的系統調用(也就是一個函數)是不一樣的。
    所以,posix標準的出現就是爲了解決這個問題。linux內核和windows內核提供的系統調用都要實現基本的posix標準,這樣就方便移植了。

2、什麼是CephFS
    CephFS也稱ceph文件系統,他是一個POSIX兼容的分佈式文件系統。
    
3、實現ceph文件系統的要求
    一、須要一個已經正常運行的ceph集羣
    二、至少包含一個ceph元數據服務器(MDS)
    
    爲何ceph文件系統依賴於MDS?爲毛線?
    由於:
        Ceph 元數據服務器( MDS )爲 Ceph 文件系統存儲元數據。
        元數據服務器使得POSIX 文件系統的用戶們,能夠在不對 Ceph 存儲集羣形成負擔的前提下,執行諸如 ls、find 等基本命令。
        
        問題又來了,什麼是元數據?
            能夠簡單的理解爲它是描述數據的數據,意思就是描述數據的信息,好比,數據的大小、位置、屬性等等信息
        
        【能夠在不對 Ceph 存儲集羣形成負擔的前提下,執行諸如 ls、find 等基本命令。】意思就是說
        在執行數據搜索和查看的時候,首先查找的是元數據,經過元數據中的描述信息準確且快速的找到數據。
        而不用大費周章的在整個集羣的osd上查找
        
    一般,客戶端向cephfs發起I/O時,過程大概爲兩步:
    一、client端與mds節點通信,獲取metadata信息(metadata也存在osd上)
    二、client直接寫數據到osd

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

5、建立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


6、建立CephFS
    注意:
        一、可是當前一套集羣只能有一個文件系統存在。
        二、一個 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 活躍後,你就能夠掛載此文件系統了

    
7、使用內核驅動程序掛載CephFs
    
    一、在ceph-client1客戶端節點上建立掛載點目錄
    [root@ceph-client1 ~]# mkdir /mnt/mycephfs
    
    
    二、查看管理員祕鑰
    由於要掛載啓用了 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 *"
    
    三、使用linux的mount命令掛載cephfs
    [root@ceph-client1 mnt]# mount -t ceph 192.168.89.103:6789:/ /mnt/mycephfs -o name=admin,secret=AQBOp0xaDyeNGBAAqbEktnUq5GFVF5arsWbesA==
    
    四、用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
    
    五、卸載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
    
    六、以更安全的方式掛載
    用法會把密碼遺留在 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 #這個就是掛載好的cephfsnode


8、經過FUSE方式掛載CephFS
    若是內核版本低於2.6.34,那麼可使用ceph的FUSE客戶端來進行掛載ceph文件系統
    
    一、在客戶端上安裝fuse
    [root@ceph-client1 ~]# yum -y install ceph-fuse

    二、建立掛載點目錄
    mkdir /mnt/fuse_cephfs/
    
    三、開始掛載
    [root@ceph-client1 mnt]# ceph-fuse -m 192.168.89.103:6789 /mnt/fuse_cephfs/
    ceph-fuse[2254]: starting ceph client
    2018-01-10 21:10:09.116450 7f9f777a9ec0 -1 init, newargv = 0x560707d1c780 newargc=11
    ceph-fuse[2254]: starting fuse
    
    四、查看掛載後的信息
    [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
    tmpfs                 97M     0   97M   0% /run/user/0
    ceph-fuse             45G  444M   45G   1% /mnt/fuse_cephfs
    
    五、我把以前經過kernel驅動程序的掛載方式中的掛載點目錄更改成了kernel_cephfs
    並再次執行了掛載後
    [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
    tmpfs                   97M     0   97M   0% /run/user/0
    ceph-fuse               45G  444M   45G   1% /mnt/fuse_cephfs #這是fuse客戶端方式掛載
    192.168.89.103:6789:/   45G  444M   45G   1% /mnt/kernel_cephfs #這是kernel的方式掛載
    
    事實證實:這二者能夠同時存在,我這裏是在同一臺機器上,固然更能夠在不一樣的機器上掛載同一個cephfs
                而且,我在/mnt/fuse_cephfs目錄下建立了file_fuse_123.txt,而後再到/mnt/kernel_cephfs去查看,也出現了file_fuse_123.txt
                此處證實,cephfs是分佈式的且共享型的網絡文件系統.
        注意,這兩種掛載方式雖然能夠在一臺機器上同時存在,可是在生產環境中這麼作是沒有太大意義的。我這裏僅僅只是爲了測試而已。
                
    六、開機自動掛載cephfs
    如須要開機時自動掛載cephfs,將下面的信息添加到客戶端的/etc/fstab中
    id=admin /mnt/fuse_cephfs fuse.ceph defaults 0 0
    
    七、重啓客戶端的注意事項
        一、重啓前最好是先umont調掛載後的文件系統
        二、而後再重啓linux

相關文章
相關標籤/搜索