ceph分布式存儲的搭建


發現 ceph 在最近幾年發展火熱,也有很多案例落地企業。

ceph是無中心化的存儲,它沒有管理節點、計算節點的之分。
ceph的文件是被分片的,每一個數據塊是 一個對象,對象保存在不同的服務器上。當節點失效,自動遷移數據,重新復制副本。可以動態的添加元數據服務器和存儲節點,容量可以動態擴展。
ceph分為mon監視器節點(至少一個)、osd對象存儲節點(至少2個)、mds元數據節點。
osd 進程負責存儲數據、處理數據的復制、恢復、回填、再平衡。並通過其他的osd守護進程的心跳,來向mon提供一些監控信息。當你設置osd有2個副本的時候,至少需要2個osd守護進程才能達到archive+clean的狀態,默認有3個副本。
mon 負責維護集群狀態的各種圖表,包括監視圖和osd圖等。
mds 負責為ceph文件系統存儲數據的時候才使用。
存儲的過程 :存儲的文件數據歸類為對象object;對象放在對應的池子里面(pool);pool由若干個pg組成;pg是由若干個osd組成;osd是由硬盤組成。
環境
node1 172.16.1.201 管理節點 數據節點
node2 172.16.1.202 數據節點

node3 172.16.1.203 數據節點

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

該實驗的操作系統為centos 7,ceph k版本。

ceph的部署
1、關閉系統上的防火牆 以及selinux

2、拷貝管理節點的秘鑰到其他節點實現無密碼登錄

ssh-keygen -t rsa
ssh-copy-id root@ceph-node1 .....
3、在各個節點上配置需要的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、管理節點安裝ceph-deploy工具

[root@node1 yum.repos.d]# yum -y install ceph-deploy
5、管理節點創建工作目錄

[root@node1 ~]# mkdir -p /etc/ceph
6 、創建兩個mon
[root@node1 ~]# cd /etc/ceph
[root@node1 ceph]# ls
[root@node1 ceph]# ceph-deploy new node1 node2 ##這個意思是在node1和node2上分別創建一個mon,
[root@node1 ceph]# ls
ceph.conf ceph-deploy-ceph.log ceph.mon.keyring
7、默認情況下最少是需要一個mon、 2個osd

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

[root@node1 ceph]# vim ceph.conf
[global]
fsid = 2e6519d9-b733-446f-8a14-8622796f83ef
mon_initial_members = node1,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@node1 ceph]# ceph-deploy install node1 node2
9、 初始化mon 並收集所有的秘鑰

[root@node1 ceph]# ceph-deploy mon create-initial

[root@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、查看創建的集群用戶

[root@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: AQBbvtVbwiRJExAAdsh1uG+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.node1
key: AQBXvtVbeW/zKBAAfntYBheS7AkCwimr77PqEQ==
caps: [mon] allow *
11、創建osd

創建osd有兩種方式

a、使用系統裸盤,作為存儲空間;

b、使用現有文件系統,以目錄或分區作為存儲空間,官方建議為 OSD 及其日志使用獨立硬盤或分區作為存儲空間

1)、使用分區

[root@node1 ceph]#ceph-deploy disk zap node1:/dev/sdb node2:/dev/sdb ##通過zap命令清除分區及磁盤內容
[root@node1 ceph]#ceph-deploy osd prepare node1:/dev/sdb node2:/dev/sdb
[root@node1 ceph]#ceph-deploy osd activate node1:/dev/sdbnode2:/dev/sdb
2)、 使用目錄

[root@node1 ceph]#ssh node1 “mkdir /data/osd0;chown -R ceph:ceph /data/osd0"
[root@node1 ceph]#ssh node2 “mkdir /data/osd0;chown -R ceph:ceph /data/osd0
[root@node1 ceph]# ceph-deploy osd prepare node1:/data/osd0 node2:/data/osd0
[root@node1 ceph]# ceph-deploy osd activate node1:/data/osd0 node2:/data/osd0
12、使用ceph-deploy把配置文件和admin 秘鑰下發到所有節點

[root@node1 ceph]# ceph-deploy admin node1 node2
13 、給每一個節點的keyring 增加 r 權限

chmod +r /etc/ceph/ceph.client.admin.keyring
14、 檢查集群的健康狀況
[root@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 {node1=172.16.22.201:6789/0}
election epoch 4, quorum 0 node1
mgr active: node1
osdmap e9: 2 osds: 2 up, 2 in ##看這,個數是否對
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@node1 ceph]# ceph health
HEALTH_WARN 64 pgs degraded; 64 pgs stuck unclean; 64 pgs undersized
[root@node1 ceph]# ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.03677 root default
-2 0.01839 host node1
0 0.01839 osd.0 up 1.00000 1.00000
-3 0.01839 host node2
1 0.01839 osd.1 up 1.00000 1.00000
[root@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
這樣,我們就搭建完了兩個節點的ceph集群,其中1個mon,2個osd。
下面我們再介紹mon和osd的擴展
ceph集群的擴展
新增一個osd node3
1、以下操作,大部分命令是在node1上執行的(前面我們讓node1充當管理節點)

#切換到node1的/etc/ceph目錄下
[root@node1 ~]# cd /etc/ceph/
#給node3上安裝ceph-deploy軟件,但是如下命令要在node1上執行
[root@node1 ceph]# ceph-deploy install node3
#下面這個命令在node3上執行
[root@node3 ceph]# mkdir /data/osd0 -p
[root@node3 ceph]# chown -R ceph:ceph /data/osd0
#給node3創建osd
[root@node1 ceph]# ceph-deploy osd prepare node3:/data/osd0
[root@node1 ceph]# ceph-deploy osd activate node3:/data/osd0
#查看node3已經被加入集群里面了
[root@node1 ceph]# ceph -s
cluster 2e6519d9-b733-446f-8a14-8622796f83ef
health HEALTH_OK
monmap e2: 1 mons at {node1=172.16.22.201:6789/0}
election epoch 4, quorum 0 node1
mgr active: 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@node1 ceph]#
[root@node1 ceph]#
[root@node1 ceph]# ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.05516 root default
-2 0.01839 host node1
0 0.01839 osd.0 up 1.00000 1.00000
-3 0.01839 host node2
1 0.01839 osd.1 up 1.00000 1.00000
-4 0.01839 host node3
2 0.01839 osd.2 up 1.00000 1.00000


增加一個新的mon在node3 上面
在node1上執行

[root@node1 ceph]# ceph-deploy mon add node3
[root@node1 ceph]# ceph -s
cluster 2e6519d9-b733-446f-8a14-8622796f83ef
health HEALTH_OK
monmap e4: 3 mons at {node1=172.16.22.201:6789/0,node2=172.16.22.202:6789/0,node3=172.16.22.203:6789/0}
election epoch 8, quorum 0,1,2 node1,node2,node3
mgr active: node1 standbys: node3, 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@node1 ceph]# ceph mon stat
e4: 3 mons at {node1=172.16.22.201:6789/0,node2=172.16.22.202:6789/0,node3=172.16.22.203:6789/0}, election epoch 10, quorum 0,1,2 node1,node2,node3
在node1增加一個元數據的角色
元數據是在文件系統時才有用,而我們用的是塊設備,所以就沒用了

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM