1. 程式人生 > >Ceph分布式存儲學習筆記

Ceph分布式存儲學習筆記

Ceph

本文介紹在Oracle Linux上創建配置ceph集群。Ceph軟件代號為jewel。

一、操作系統設置

以下操作在每個ceph集群節點都要操作。
1、OS內核設置

[root@hdp01 ~]# cat /proc/sys/kernel/pid_max
32768
[root@hdp01 ~]# vi /etc/sysctl.conf
kernel.pid_max = 4194303
[root@hdp01 ~]# sysctl -p

2、軟件倉庫

[root@hdp01 ~]# yum -y install yum-utils
[root@hdp01 ~]# yum-config-manager --enable ol7_ceph ol7_latest ol7_optional_latest ol7_addons

3、禁用防火墻和Selinux

[root@hdp01 ~]# systemctl disable firewalld
[root@hdp01 ~]# systemctl stop firewalld
[root@hdp01 ~]# sed -i -e ‘s,enforcing,disabled,‘ /etc/sysconfig/selinux 

4、設置免密碼SSH互訪(略)
5、各個節點配置NTP服務

[root@hdp01 ~]# echo "server ntp1.aliyun.com" >>/etc/ntp.conf
[root@hdp01 ~]# echo "server ntp2.aliyun.com" >>/etc/ntp.conf
[root@hdp01 ~]# echo "server ntp3.aliyun.com" >>/etc/ntp.conf
[root@hdp01 ~]# systemctl enable ntpd
[root@hdp01 ~]# systemctl start ntpd
[root@hdp01 ~]# ntpdate -u ntp1.aliyun.com

二、安裝配置Ceph

2.1 管理節點安裝配置ceph

[root@hdp01 ~]# yum -y install ceph-deploy
[root@hdp01 ~]# mkdir fc;cd fc
--創建集群
[root@hdp01 fc]# ceph-deploy new fc

2.2 編輯ceph配置文件

[root@hdp01 fc]# vi ceph.conf
osd pool default size = 3
public network = 192.168.120.0/24
rbd_default_features = 3

2.3 安裝配置集群存儲節點

[root@hdp01 fc]# ceph-deploy install hdp0{2..4}

此步驟就是調用yum安裝軟件包,如果之前配置了ceph的yum倉庫,在安裝過程中它會重新初始化yum倉庫,如果網絡差的情況下,此步驟會非常慢。最直接的就是在各個節點手工安裝以下軟件包:

[root@hdp02 ~]# yum -y install ceph-osd ceph-mds ceph-mon ceph-radosgw
[root@hdp03 ~]# yum -y install ceph-osd ceph-mds ceph-mon ceph-radosgw
[root@hdp04 ~]# yum -y install ceph-osd ceph-mds ceph-mon ceph-radosgw

2.4 創建ceph監控節點

[root@hdp01 fc]# ceph-deploy mon create-initial
[root@hdp01 fc]# ceph-deploy mon create hdp0{2,3,4}

在ceph集群中的監控節點都是奇數個,這裏使用了4個監控節點。創建完成後,收集下各個節點的密鑰信息:

[root@hdp01 fc]# ceph-deploy gatherkeys hdp0{2,3,4}

2.5 創建OSDs

[root@hdp01 fc]# ceph-deploy disk zap hdp01:sdb
[root@hdp01 fc]# ceph-deploy osd create hdp01:sdb
--檢查ceph集群狀態
[root@hdp01 fc]# ceph -s
    cluster ef4bfc8f-6e8b-497e-a5e5-336213a7f4f7
     health HEALTH_ERR
            64 pgs are stuck inactive for more than 300 seconds
            64 pgs degraded
            64 pgs stuck inactive
            64 pgs undersized
     monmap e1: 1 mons at {hdp01=192.168.120.96:6789/0}
            election epoch 3, quorum 0 hdp01
     osdmap e5: 1 osds: 1 up, 1 in
            flags sortbitwise
      pgmap v8: 64 pgs, 1 pools, 0 bytes data, 0 objects
            34004 kB used, 46023 MB / 46056 MB avail
                  64 undersized+degraded+peered

創建其他幾個OSD:

[root@hdp01 fc]# ceph-deploy disk zap hdp02:sdb
[root@hdp01 fc]# ceph-deploy osd create hdp02:sdb
[root@hdp01 fc]# ceph-deploy disk zap hdp03:sdb
[root@hdp01 fc]# ceph-deploy osd create hdp03:sdb
[root@hdp01 ~]# ceph health
HEALTH_OK
[root@hdp01 ~]# ceph status
    cluster 87d6656b-1ba9-4345-904e-37c9f860ebc3
     health HEALTH_OK
     monmap e4: 4 mons at {hdp01=192.168.120.96:6789/0,hdp02=192.168.120.97:6789/0,hdp03=192.168.120.98:6789/0,hdp04=192.168.120.99:6789/0}
            election epoch 8, quorum 0,1,2,3 hdp01,hdp02,hdp03,hdp04
     osdmap e23: 3 osds: 3 up, 3 in
            flags sortbitwise
      pgmap v189: 214 pgs, 2 pools, 14624 kB data, 16 objects
            153 MB used, 134 GB / 134 GB avail
                 214 active+clean

三、安裝配置ceph客戶端

3.1 設置客戶端和ceph集群之間的SSH互訪(略)
3.2 安裝ceph-common軟件包

[root@hdp05 ~]# yum -y install ceph-common

3.3 同步ceph配置文件到客戶端

[root@hdp01 fc]# ceph-deploy admin hdp05

四、創建RBD塊設備

4.1 客戶端創建存儲池

[root@hdp05 ~]# ceph osd pool create datastore 150 150

4.2 創建塊設備鏡像

[root@hdp05 ~]# rbd create --size 4096 --pool datastore vol01

如果沒有指定pool參數,則rbd使用默認的rbd pool。
4.3 將image映射為塊設備

[root@hdp05 ~]# rbd map vol01 --pool datastore
[root@hdp05 ~]# ll /dev/rbd0
brw-rw---- 1 root disk 248, 0 Apr 11 10:27 /dev/rbd0
[root@hdp05 ~]# ll /dev/rbd/datastore/
total 0
lrwxrwxrwx 1 root root 10 Apr 11 10:27 vol01 -> ../../rbd0
[root@hdp05 ~]# lsmod|grep rbd
rbd                    77824  1 
libceph               249856  1 rbd
[root@hdp05 ~]# rbd ls -p datastore
vol01

4.4 創建文件系統
可以直接對映射的設備創建文件系統,也可以對映射後的設備進行分區操作,然後創建文件系統。

[root@hdp05 ~]# mkfs.xfs /dev/rbd0 
[root@hdp05 ~]# mount /dev/rbd0 /mnt

4.5 RBD設備自動映射
如果安裝了ceph-common軟件包,默認會在/etc/ceph下面產生一個rbdmap文件。此文件主要作用是在系統啟動的時候自動映射塊設備。

# RbdDevice             Parameters
datastore/vol01         id=admin,keyring=/etc/ceph/ceph.client.admin.keyring

其中,rbdevice為poolname/blockname,parameters的id,這裏用的是admin,也就是ceph服務端的admin。
4.6 RBD設備擴容

[root@hdp05 ~]# rbd resize -p datastore --image vol01 -s 5120
Resizing image: 100% complete...done.
[root@hdp05 ~]# rbd info -p datastore --image vol01
rbd image ‘vol01‘:
        size 5120 MB in 1280 objects
        order 22 (4096 kB objects)
        block_name_prefix: rbd_data.11342ae8944a
        format: 2
        features: layering
        flags: 
[root@hdp05 ~]# mount /dev/rbd0 /mnt
[root@hdp05 ~]# df /mnt
Filesystem                 Size  Used Avail Use% Mounted on
......
/dev/rbd0                  4.0G   33M  4.0G   1% /mnt
[root@hdp05 ~]# xfs_growfs /mnt
[root@hdp05 ~]# df /mnt
Filesystem                 Size  Used Avail Use% Mounted on
/dev/rbd0                  5.0G   33M  5.0G   1% /mnt

4.7 查看image狀態

[root@hdp05 ~]# rbd status -p datastore --image vol01
Watchers:
        watcher=192.168.120.103:0/3157940806 client.4408 cookie=1
[root@hdp05 ~]# rbd status datastore/vol01
Watchers:
        watcher=192.168.120.103:0/3157940806 client.4408 cookie=1

4.8 查看image信息

[root@hdp05 ~]# rbd info --pool datastore --image vol01
rbd image ‘vol01‘:
        size 4096 MB in 1024 objects
        order 22 (4096 kB objects)
        block_name_prefix: rbd_data.11342ae8944a
        format: 2
        features: layering
        flags: 

五、刪除RBD設備

-- 卸載掛載點

[root@hdp05 ~]# umount /mnt

--刪除映射

[root@hdp05 ~]# rbd unmap /dev/rbd/datastore/vol01

--刪除塊設備

[root@hdp05 ~]# rbd rm vol01 -p datastore

--刪除存儲池

[root@hdp05 ~]# ceph osd pool delete datastore datastore --yes-i-really-really-mean-it

六、CephFS配置

Ceph 文件系統( Ceph FS )是個 POSIX 兼容的文件系統,它使用 Ceph 存儲集群來存儲數據。Ceph 文件系統要求 Ceph 存儲集群內至少有一個 Ceph 元數據服務器。這裏將hdp04作為cephfs的元數據服務節點(MDS)。
6.1 創建MDS服務

[root@hdp01 fc]# ceph-deploy --overwrite-conf mds create hdp04
[root@hdp01 ~]# echo $(sed -n ‘s/.*key *= *\([^ ]*.*\)/\1/p‘ < /etc/ceph/ceph.client.admin.keyring) > /etc/ceph/admin.secret
[root@hdp01 ~]# chmod 600 /etc/ceph/admin.secret 
[root@hdp01 ~]# cat /etc/ceph/ceph.client.admin.keyring 
[client.admin]
        key = AQBfZM1aAhtVIhAAToLlVABZs/nH107Dt6z/jg==
[root@hdp01 ~]# cat /etc/ceph/admin.secret 
AQBfZM1aAhtVIhAAToLlVABZs/nH107Dt6z/jg==
[root@hdp01 ~]# scp /etc/ceph/admin.secret hdp07:/etc/ceph/   
[root@hdp01 ~]# scp /etc/ceph/admin.secret hdp05:/etc/ceph/

6.2 創建CephFS
MDS需要使用兩個pool,一個pool用來存儲數據,一個pool用來存儲元數據。

[root@hdp07 ~]# ceph osd pool create cephfs_data 1
pool ‘cephfs_data‘ created
[root@hdp07 ~]# ceph osd pool create cephfs_metadata 2
pool ‘cephfs_metadata‘ created
[root@hdp07 ~]# ceph fs new cephfs cephfs_metadata cephfs_data
new fs with metadata pool 5 and data pool 4
[root@hdp07 ~]# ceph mds stat
e5: 1/1/1 up {0=hdp04=up:active}
[root@hdp07 ~]# mount -t ceph hdp04:6789:/ /mnt -o name=admin,secretfile=/etc/ceph/admin.secret 
[root@hdp07 ~]# df
Filesystem                 Size  Used Avail Use% Mounted on
......
192.168.120.99:6789:/      135G  156M  135G   1% /mnt

還有一種方法就是通過fuse掛載,如下:

[root@hdp07 ~]# yum -y install ceph-fuse
[root@hdp07 ~]# ceph-fuse -c /etc/ceph/ceph.conf /mnt
2018-04-11 16:44:47.705919 7ff65fab5e80 -1 init, newargv = 0x559559a5a510 newargc=11
ceph-fuse[3325]: starting ceph client
ceph-fuse[3325]: starting fuse
[root@hdp07 ~]# df /mnt
Filesystem                 Size  Used Avail Use% Mounted on
ceph-fuse                  135G  156M  135G   1% /mnt

如果客戶端沒有安裝ceph-common軟件,則使用下面的方法:

[root@hdp08 ~]# mkdir -p /etc/ceph
[root@hdp01 ~]# scp /etc/ceph/ceph.conf root@hdp08:/etc/ceph
[root@hdp01 ~]# scp /etc/ceph/ceph.client.admin.keyring root@hdp08:/etc/ceph
[root@hdp08 ~]# chmod -R 644 /etc/ceph/
[root@hdp08 ~]# ceph-fuse -c /etc/ceph/ceph.conf /mnt
[root@hdp08 ~]# df /mnt
Filesystem                 Size  Used Avail Use% Mounted on
ceph-fuse                  135G  156M  135G   1% /mnt
[root@hdp08 ~]# umount /mnt

Ceph分布式存儲學習筆記