溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

docker筆記39-ceph分布式存儲的搭建

發(fā)布時間:2020-08-11 21:44:18 來源:ITPUB博客 閱讀:247 作者:czxin788 欄目:開發(fā)技術

    在kubernetes 中,想實現(xiàn) pod 數(shù)據(jù)的持久化。在調研的過程中,發(fā)現(xiàn) ceph 在最近幾年發(fā)展火熱,也有很多案例落地企業(yè)。在選型方面,個人更加傾向于社區(qū)火熱的項目,GlusterFS、Ceph 都在考慮的范圍之內(nèi),但是由于 GlusterFS 只提供對象存儲和文件系統(tǒng)存儲,而 Ceph 則提供對象存儲、塊存儲以及文件系統(tǒng)存儲。懷著對新事物的向往,果斷選擇 Ceph 來實現(xiàn) Ceph 塊存儲對接 kubernetes 來實現(xiàn) pod 的數(shù)據(jù)持久化。

   ceph是無中心化的存儲,它沒有管理節(jié)點、計算節(jié)點的之分。

   ceph的文件是被分片的,每一個數(shù)據(jù)塊是 一個對象,對象保存在不同的服務器上。當節(jié)點失效,自動遷移數(shù)據(jù),重新復制副本??梢詣討B(tài)的添加元數(shù)據(jù)服務器和存儲節(jié)點,容量可以動態(tài)擴展。

   ceph分為mon監(jiān)視器節(jié)點(至少一個)、osd對象存儲節(jié)點(至少2個)、mds元數(shù)據(jù)節(jié)點。

    osd 進程負責存儲數(shù)據(jù)、處理數(shù)據(jù)的復制、恢復、回填、再平衡。并通過其他的osd守護進程的心跳,來向mon提供一些監(jiān)控信息。當你設置osd有2個副本的時候,至少需要2個osd守護進程才能達到archive+clean的狀態(tài),默認有3個副本。

    mon 負責維護集群狀態(tài)的各種圖表,包括監(jiān)視圖和osd圖等。

    mds 負責為ceph文件系統(tǒng)存儲數(shù)據(jù)的時候才使用。

    存儲的過程 :存儲的文件數(shù)據(jù)歸類為對象object;對象放在對應的池子里面(pool);pool由若干個pg組成;pg是由若干個osd組成;osd是由硬盤組成。

環(huán)境

 k8s-node1       172.16.1.201    管理節(jié)點 數(shù)據(jù)節(jié)點

 k8s-node2       172.16.1.202    數(shù)據(jù)節(jié)點

 k8s-node3       172.16.1.203    數(shù)據(jù)節(jié)點

上述要加入/etc/hosts文件里面。

該實驗的操作系統(tǒng)為centos 7,ceph k版本。

 ceph的部署  

1、關閉系統(tǒng)上的防火墻 以及selinux 

2、拷貝管理節(jié)點的秘鑰到其他節(jié)點實現(xiàn)無密碼登錄

ssh-keygen -t rsa 
ssh-copy-id  root@ceph-node1 .....

3、在各個節(jié)點上配置需要的yum源

[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.163.com/ceph/rpm-kraken/el7/$basearch
enabled=1
priority=1
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.163.com/ceph/rpm-kraken/el7/noarch
enabled=1
priority=1
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.163.com/ceph/rpm-kraken/el7/SRPMS
enabled=0
priority=1
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc

4、管理節(jié)點安裝ceph-deploy工具 

[root@k8s-node1 yum.repos.d]# yum -y install ceph-deploy

5、管理節(jié)點創(chuàng)建工作目錄

[root@k8s-node1 ~]#  mkdir -p /etc/ceph

6 、創(chuàng)建兩個mon

[root@k8s-node1 ~]# cd /etc/ceph
[root@k8s-node1 ceph]# ls
[root@k8s-node1 ceph]# ceph-deploy new  k8s-node1 k8s-node2 ##這個意思是在k8s-node1和k8s-node2上分別創(chuàng)建一個mon,
[root@k8s-node1 ceph]# ls
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring

7、默認情況下最少是需要一個mon、 2個osd 

在配置文件ceph.conf 中加入我們的業(yè)務網(wǎng)段配置public network =172.16.22.0/24,結果如下:

[root@k8s-node1 ceph]# vim ceph.conf 
[global]
fsid = 2e6519d9-b733-446f-8a14-8622796f83ef
mon_initial_members = k8s-node1,k8s-node2
mon_host = 172.16.22.201,172.16.22.202
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
public network =172.16.22.0/24

8、 安裝ceph 集群

[root@k8s-node1 ceph]# ceph-deploy install  k8s-node1 k8s-node2

9、 初始化mon 并收集所有的秘鑰

[root@k8s-node1 ceph]# ceph-deploy mon create-initial
 
[root@k8s-node1 ceph]# ls
ceph.bootstrap-mds.keyring  ceph.bootstrap-osd.keyring  ceph.client.admin.keyring  ceph-deploy-ceph.log  rbdmap
ceph.bootstrap-mgr.keyring  ceph.bootstrap-rgw.keyring  ceph.conf                  ceph.mon.keyring

10、查看創(chuàng)建的集群用戶

[root@k8s-node1 ceph]# ceph auth list
installed auth entries:
client.admin
key: AQBavtVb2irGJBAAsbJcna7p5fdAXykjVbxznA==
caps: [mds] allow *
caps: [mgr] allow *
caps: [mon] allow *
caps: [osd] allow *
client.bootstrap-mds
key: AQBavtVbbNgXOxAAkvfj6L49OUfFX5XWd651AQ==
caps: [mon] allow profile bootstrap-mds
client.bootstrap-mgr
key: AQBbvtVbwiRJExAAdsh2uG+nL8l3UECzLT4+vw==
caps: [mon] allow profile bootstrap-mgr
client.bootstrap-osd
key: AQBbvtVbUV0NJxAAJAQ/yBs0c37C7ShBahwzsw==
caps: [mon] allow profile bootstrap-osd
client.bootstrap-rgw
key: AQBbvtVb/h/pOhAAmwK9r8DeqlOpQHxz9F/9eA==
caps: [mon] allow profile bootstrap-rgw
mgr.k8s-node1
key: AQBXvtVbeW/zKBAAfntYBheS7AkCwimr77PqEQ==
caps: [mon] allow *

11、創(chuàng)建osd 

創(chuàng)建osd有兩種方式

a、使用系統(tǒng)裸盤,作為存儲空間;

b、使用現(xiàn)有文件系統(tǒng),以目錄或分區(qū)作為存儲空間,官方建議為 OSD 及其日志使用獨立硬盤或分區(qū)作為存儲空間

 1)、使用分區(qū)

[root@k8s-node1 ceph]#ceph-deploy disk zap k8s-node1:/dev/sdb k8s-node2:/dev/sdb  ##通過zap命令清除分區(qū)及磁盤內(nèi)容
[root@k8s-node1 ceph]#ceph-deploy osd prepare  k8s-node1:/dev/sdb k8s-node2:/dev/sdb
[root@k8s-node1 ceph]#ceph-deploy osd activate k8s-node1:/dev/sdb k8s-node2:/dev/sdb

 2)、 使用目錄

[root@k8s-node1 ceph]#ssh k8s-node1 “mkdir /data/osd0;chown -R ceph:ceph /data/osd0"
[root@k8s-node1 ceph]#ssh k8s-node2 “mkdir /data/osd0;chown -R ceph:ceph /data/osd0
[root@k8s-node1 ceph]# ceph-deploy osd  prepare k8s-node1:/data/osd0 k8s-node2:/data/osd0
[root@k8s-node1 ceph]#  ceph-deploy osd  activate  k8s-node1:/data/osd0 k8s-node2:/data/osd0

12、使用ceph-deploy把配置文件和admin 秘鑰下發(fā)到所有節(jié)點

[root@k8s-node1 ceph]# ceph-deploy admin  k8s-node1 k8s-node2

13 、給每一個節(jié)點的keyring 增加 r 權限

chmod +r /etc/ceph/ceph.client.admin.keyring
14、 檢查集群的健康狀況
[root@k8s-node1 ceph]# ceph -s
    cluster 2e6519d9-b733-446f-8a14-8622796f83ef
     health HEALTH_WARN  #這個警告可以忽略
            64 pgs degraded
            64 pgs stuck unclean
            64 pgs undersized
     monmap e2: 1 mons at {k8s-node1=172.16.22.201:6789/0}
            election epoch 4, quorum 0 k8s-node1
        mgr active: k8s-node1 
     osdmap e9: 2 osds: 2 up, 2 in   ##看這,個數(shù)是否對
            flags sortbitwise,require_jewel_osds,require_kraken_osds
      pgmap v21: 64 pgs, 1 pools, 0 bytes data, 0 objects
            22761 MB used, 15722 MB / 38484 MB avail
                  64 active+undersized+degraded
                  
[root@k8s-node1 ceph]# ceph health
HEALTH_WARN 64 pgs degraded; 64 pgs stuck unclean; 64 pgs undersized
[root@k8s-node1 ceph]# ceph osd tree
ID WEIGHT  TYPE NAME          UP/DOWN REWEIGHT PRIMARY-AFFINITY 
-1 0.03677 root default                                         
-2 0.01839     host k8s-node1                                   
 0 0.01839         osd.0           up  1.00000          1.00000 
-3 0.01839     host k8s-node2                                   
 1 0.01839         osd.1           up  1.00000          1.00000
[root@k8s-node1 ceph]# ceph df
GLOBAL:
    SIZE       AVAIL      RAW USED     %RAW USED 
    38484M     15719M       22764M         59.15 
POOLS:
    NAME     ID     USED     %USED     MAX AVAIL     OBJECTS 
    rbd      0         0         0         4570M           0

    這樣,我們就搭建完了兩個節(jié)點的ceph集群,其中1個mon,2個osd。

    下面我們再介紹mon和osd的擴展

ceph集群的擴展

新增一個osd  k8s-node3

1、以下操作,大部分命令是在k8s-node1上執(zhí)行的(前面我們讓k8s-node1充當管理節(jié)點)

#切換到k8s-node1的/etc/ceph目錄下
[root@k8s-node1 ~]# cd /etc/ceph/
#給k8s-node3上安裝ceph-deploy軟件,但是如下命令要在k8s-node1上執(zhí)行
[root@k8s-node1 ceph]# ceph-deploy install  k8s-node3
#下面這個命令在k8s-node3上執(zhí)行
[root@k8s-node3 ceph]# mkdir /data/osd0 -p
[root@k8s-node3 ceph]# chown -R ceph:ceph /data/osd0
#給k8s-node3創(chuàng)建osd
[root@k8s-node1 ceph]# ceph-deploy osd  prepare k8s-node3:/data/osd0 
[root@k8s-node1 ceph]#  ceph-deploy osd  activate  k8s-node3:/data/osd0
#查看k8s-node3已經(jīng)被加入集群里面了
[root@k8s-node1 ceph]# ceph -s
    cluster 2e6519d9-b733-446f-8a14-8622796f83ef
     health HEALTH_OK
     monmap e2: 1 mons at {k8s-node1=172.16.22.201:6789/0}
            election epoch 4, quorum 0 k8s-node1
        mgr active: k8s-node1 
     osdmap e14: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds,require_kraken_osds
      pgmap v7372: 64 pgs, 1 pools, 0 bytes data, 0 objects
            35875 MB used, 21850 MB / 57726 MB avail
                  64 active+clean
[root@k8s-node1 ceph]# 
[root@k8s-node1 ceph]# 
[root@k8s-node1 ceph]# ceph osd tree
ID WEIGHT  TYPE NAME          UP/DOWN REWEIGHT PRIMARY-AFFINITY 
-1 0.05516 root default                                         
-2 0.01839     host k8s-node1                                   
 0 0.01839         osd.0           up  1.00000          1.00000 
-3 0.01839     host k8s-node2                                   
 1 0.01839         osd.1           up  1.00000          1.00000 
-4 0.01839     host k8s-node3                                   
 2 0.01839         osd.2           up  1.00000          1.00000

增加一個新的mon在k8s-node3 上面

在k8s-node1上執(zhí)行

[root@k8s-node1 ceph]# ceph-deploy mon add k8s-node3
[root@k8s-node1 ceph]# ceph -s
    cluster 2e6519d9-b733-446f-8a14-8622796f83ef
     health HEALTH_OK
     monmap e4: 3 mons at {k8s-node1=172.16.22.201:6789/0,k8s-node2=172.16.22.202:6789/0,k8s-node3=172.16.22.203:6789/0}
            election epoch 8, quorum 0,1,2 k8s-node1,k8s-node2,k8s-node3
        mgr active: k8s-node1 standbys: k8s-node3, k8s-node2
     osdmap e14: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds,require_kraken_osds
      pgmap v7517: 64 pgs, 1 pools, 0 bytes data, 0 objects
            35890 MB used, 21835 MB / 57726 MB avail
                  64 active+clean
[root@k8s-node1 ceph]# ceph mon stat
e4: 3 mons at {k8s-node1=172.16.22.201:6789/0,k8s-node2=172.16.22.202:6789/0,k8s-node3=172.16.22.203:6789/0}, election epoch 10, quorum 0,1,2 k8s-node1,k8s-node2,k8s-node3

在k8s-node1增加一個元數(shù)據(jù)的角色 

元數(shù)據(jù)是在文件系統(tǒng)時才有用,而我們用的是塊設備,所以就沒用了

[root@k8s-node1 ceph]#ceph-deploy mds create k8s-node1







向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI