當(dāng)前位置:首頁 > IT技術(shù) > 其他 > 正文

Ceph概述、部署Ceph集群 、 Ceph塊存儲(chǔ)
2022-04-29 13:48:16

ceph

  • ceph被稱作面向未來的存儲(chǔ)
  • 中文手冊(cè):

  • ceph可以實(shí)現(xiàn)的存儲(chǔ)方式:

    • 塊存儲(chǔ):提供像普通硬盤一樣的存儲(chǔ),為使用者提供“硬盤”
    • 文件系統(tǒng)存儲(chǔ):類似于NFS的共享方式,為使用者提供共享文件夾
    • 對(duì)象存儲(chǔ):像百度云盤一樣,需要使用單獨(dú)的客戶端
  • ceph還是一個(gè)分布式的存儲(chǔ)系統(tǒng),非常靈活。如果需要擴(kuò)容,只要向ceph集中增加服務(wù)器即可。
  • ceph存儲(chǔ)數(shù)據(jù)時(shí)采用多副本的方式進(jìn)行存儲(chǔ),生產(chǎn)環(huán)境下,一個(gè)文件至少要存3份。ceph默認(rèn)也是三副本存儲(chǔ)。

ceph的構(gòu)成

  • Ceph OSD 守護(hù)進(jìn)程: Ceph OSD 用于存儲(chǔ)數(shù)據(jù)。此外,Ceph OSD 利用 Ceph 節(jié)點(diǎn)的 CPU、內(nèi)存和網(wǎng)絡(luò)來執(zhí)行數(shù)據(jù)復(fù)制、糾刪代碼、重新平衡、恢復(fù)、監(jiān)控和報(bào)告功能。存儲(chǔ)節(jié)點(diǎn)有幾塊硬盤用于存儲(chǔ),該節(jié)點(diǎn)就會(huì)有幾個(gè)osd進(jìn)程。
  • Ceph Mon監(jiān)控器: Ceph Mon維護(hù) Ceph 存儲(chǔ)集群映射的主副本和 Ceph 存儲(chǔ)群集的當(dāng)前狀態(tài)。監(jiān)控器需要高度一致性,確保對(duì)Ceph 存儲(chǔ)集群狀態(tài)達(dá)成一致。維護(hù)著展示集群狀態(tài)的各種圖表,包括監(jiān)視器圖、 OSD 圖、歸置組( PG )圖、和 CRUSH 圖。
  • MDSs: Ceph 元數(shù)據(jù)服務(wù)器( MDS )為 Ceph 文件系統(tǒng)存儲(chǔ)元數(shù)據(jù)。
  • RGW:對(duì)象存儲(chǔ)網(wǎng)關(guān)。主要為訪問ceph的軟件提供API接口。

搭建ceph集群

  • 節(jié)點(diǎn)準(zhǔn)備
主機(jī)名 IP地址
node1 192.168.4.11/24
node2 192.168.4.12/24
node3 192.168.4.13/24
client1 192.168.4.10/24

創(chuàng)建4臺(tái)虛擬機(jī)

  • 關(guān)機(jī),為node1-node3各額外再添加2塊20GB的硬盤
# 查看添加的硬盤,注意硬盤名字
[root@node1 ~]# lsblk 
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    0  30G  0 disk 
└─vda1 253:1    0  30G  0 part /
vdb    253:16   0  20G  0 disk 
vdc    253:32   0  20G  0 disk 
  • 配置yum源。除了系統(tǒng)yum源以外,還需要配置ceph的yum源

  • 各節(jié)點(diǎn)務(wù)必關(guān)閉selinux和防火墻

  • 集群安裝前的準(zhǔn)備工作
# ceph為我們提供了一個(gè)ceph-deploy工具,可以在某一節(jié)點(diǎn)上統(tǒng)一操作全部節(jié)點(diǎn)
# 將Node1作為部署節(jié)點(diǎn),將來的操作都在node1上進(jìn)行。這樣,需要node1能夠免密操作其他主機(jī)
[root@node1 ~]# ssh-keygen    # 生成密鑰對(duì)
[root@node1 ~]# for i in {10..13}
> do
> ssh-copy-id 192.168.4.$i
> done

# 在所有的主機(jī)上配置名稱解析。注意,解析的名字必須是該機(jī)器的主機(jī)名
[root@node1 ~]# vim /etc/hosts   # 增加4行
... ...
192.168.4.10    client1
192.168.4.11    node1
192.168.4.12    node2
192.168.4.13    node3
[root@node1 ~]# for i in 10 12 13
> do
> scp /etc/hosts 192.168.4.$i:/etc/
> done
  • 安裝集群
# 在3個(gè)節(jié)點(diǎn)上安裝軟件包
[root@node1 ~]# for i in node{1..3}
> do
> ssh $i yum install -y ceph-mon ceph-osd ceph-mds ceph-radosgw
> done

# 配置client1為ntp服務(wù)器
[root@client1 ~]# yum install -y chrony
[root@client1 ~]# vim /etc/chrony.conf 
 29 allow 192.168.4.0/24    # 授權(quán)192.168.4.0/24可以時(shí)鐘同步
 33 local stratum 10   # 即使沒有從一個(gè)源同步時(shí)鐘,也為其他主機(jī)提供時(shí)間
[root@client1 ~]# systemctl restart chronyd

# 配置node1-3成為client1的NTP客戶端
[root@node1 ~]# for i in node{1..3}
> do
> ssh $i yum install -y chrony
> done
[root@node1 ~]# vim /etc/chrony.conf  # 只改第7行
  7 server 192.168.4.10 iburst   # 替換gateway
[root@node1 ~]# for i in node{2..3}
> do
> scp /etc/chrony.conf $i:/etc/
> done
[root@node1 ~]# for i in node{1..3}
> do
> ssh $i systemctl restart chronyd
> done

# 驗(yàn)證時(shí)間是否同步  client1前面有^*表示同步成功
[root@node1 ~]# chronyc sources -v
... ...
^* client1                      10   6    17    40  -4385ns[-1241us] +/-  162us

# 在node1上安裝ceph-deploy部署工具
[root@node1 ~]# yum install -y ceph-deploy
# 查看使用幫助
[root@node1 ~]# ceph-deploy --help
[root@node1 ~]# ceph-deploy mon --help   # 查看mon子命令的幫助

# 創(chuàng)建ceph-deploy工作目錄
[root@node1 ~]# mkdir ceph-cluster
[root@node1 ~]# cd ceph-cluster

# 創(chuàng)建一個(gè)新的集群。
[root@node1 ceph-cluster]# ceph-deploy new node{1..3}
[root@node1 ceph-cluster]# ls
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring
[root@node1 ceph-cluster]# tree .
.
├── ceph.conf               # 集群配置文件
├── ceph-deploy-ceph.log    # 日志文件
└── ceph.mon.keyring        # 共享密鑰

# 開啟分層快照功能。
[root@node1 ceph-cluster]# vim ceph.conf   # 尾部追加一行如下
rbd_default_features = 1

# 初始化monitor
[root@node1 ceph-cluster]# ceph-deploy mon create-initial

# 如果安裝過程中出現(xiàn)keyring...這種報(bào)錯(cuò),可以試著執(zhí)行以下命令:
[root@node1 ceph-cluster]# ceph-deploy gatherkeys node{1..3}

[root@node1 ceph-cluster]# systemctl status ceph-mon*
● ceph-mon@node1.service .. ..
[root@node2 ~]# systemctl status ceph*
● ceph-mon@node2.service ... ...
[root@node3 ~]# systemctl status ceph*
● ceph-mon@node3.service ... ...
# 注意:這些服務(wù)在30分鐘之內(nèi)只能啟動(dòng)3次,超過報(bào)錯(cuò)。

# 查看集群狀態(tài)
[root@node1 ceph-cluster]# ceph -s
     health HEALTH_ERR   # 因?yàn)檫€沒有硬盤,所以狀態(tài)是HEALTH_ERR

# 創(chuàng)建OSD
[root@node1 ceph-cluster]# ceph-deploy disk --help
# 初始化各主機(jī)的硬盤。vmware應(yīng)該是sdb和sdc
[root@node1 ceph-cluster]# ceph-deploy disk zap node1:vdb node1:vdc 
[root@node1 ceph-cluster]# ceph-deploy disk zap node2:vdb node2:vdc 
[root@node1 ceph-cluster]# ceph-deploy disk zap node3:vdb node3:vdc 

# 創(chuàng)建存儲(chǔ)空間。ceph會(huì)硬盤分為兩個(gè)分區(qū),一個(gè)分區(qū)大小為5GB,用于保存ceph的內(nèi)部資源;另一個(gè)分區(qū)是剩余全部空間
[root@node1 ceph-cluster]# ceph-deploy osd --help
[root@node1 ceph-cluster]# ceph-deploy osd create node1:vd{b,c}
[root@node1 ceph-cluster]# lsblk 
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    0  30G  0 disk 
└─vda1 253:1    0  30G  0 part /
vdb    253:16   0  20G  0 disk 
├─vdb1 253:17   0  15G  0 part /var/lib/ceph/osd/ceph-0
└─vdb2 253:18   0   5G  0 part 
vdc    253:32   0  20G  0 disk 
├─vdc1 253:33   0  15G  0 part /var/lib/ceph/osd/ceph-1
└─vdc2 253:34   0   5G  0 part 
# 將會(huì)出現(xiàn)2個(gè)osd進(jìn)程,因?yàn)橛袃蓧K硬盤用于ceph
[root@node1 ceph-cluster]# systemctl status ceph-osd*

# 繼續(xù)初始化其他節(jié)點(diǎn)的OSD
[root@node1 ceph-cluster]# ceph-deploy osd create node2:vd{b,c}
[root@node1 ceph-cluster]# ceph-deploy osd create node3:vd{b,c}

# 查看集群狀態(tài)
[root@node1 ceph-cluster]# ceph -s
     health HEALTH_OK     # 狀態(tài)是HEALTH_OK表示一切正常

實(shí)現(xiàn)塊存儲(chǔ)

  • 塊設(shè)備存取數(shù)據(jù)時(shí),可以一次存取很多。字符設(shè)備只能是字符流
[root@node1 ceph-cluster]# ll /dev/vda
brw-rw---- 1 root disk 253, 0 11月  4 10:15 /dev/vda
# b表示block,塊設(shè)備
[root@node1 ceph-cluster]# ll /dev/tty
crw-rw-rw- 1 root tty 5, 0 11月  4 10:54 /dev/tty
# c表示character,字符設(shè)備
  • 塊存儲(chǔ),就是可以提供像硬盤一樣的設(shè)備。使用塊存儲(chǔ)的節(jié)點(diǎn),第一次連接塊設(shè)備,需要對(duì)塊設(shè)備進(jìn)行分區(qū)、格式化,然后掛載使用。
  • ceph提供存儲(chǔ)時(shí),需要使用存儲(chǔ)池。為了給客戶端提供存儲(chǔ)資源,需要?jiǎng)?chuàng)建名為存儲(chǔ)池的容器。存儲(chǔ)池類似于邏輯卷管理中的卷組。卷組中包含很多硬盤和分區(qū);存儲(chǔ)池中包含各節(jié)點(diǎn)上的硬盤。
# ceph默認(rèn)有一個(gè)名為rbd的存儲(chǔ)池,其編號(hào)為0
[root@node1 ceph-cluster]# ceph osd lspools 
0 rbd,

# 查看存儲(chǔ)池大小
[root@node1 ceph-cluster]# ceph df
GLOBAL:
    SIZE       AVAIL      RAW USED     %RAW USED 
    92093M     91889M         203M          0.22 
POOLS:
    NAME     ID     USED     %USED     MAX AVAIL     OBJECTS 
    rbd      0        16         0        30629M           0 

# 查看存儲(chǔ)池rbd存儲(chǔ)數(shù)據(jù)時(shí),保存的副本數(shù)量
[root@node1 ceph-cluster]# ceph osd pool get rbd size
size: 3

# 在默認(rèn)存儲(chǔ)池中,創(chuàng)建一個(gè)名為demo-image大小為10G的鏡像,提供給客戶端使用
# 鏡像相當(dāng)于邏輯卷管理中的lv
[root@node1 ceph-cluster]# rbd create demo-image --size 10G
# 查看默認(rèn)存儲(chǔ)池中的鏡像
[root@node1 ceph-cluster]# rbd list
demo-image
# 查看demo-image的詳細(xì)信息
[root@node1 ceph-cluster]# rbd info demo-image
rbd image 'demo-image':
    size 10240 MB in 2560 objects
    order 22 (4096 kB objects)
    block_name_prefix: rbd_data.1035238e1f29
    format: 2
    features: layering
    flags: 

# 擴(kuò)容
[root@node1 ceph-cluster]# rbd resize --size 15G demo-image
Resizing image: 100% complete...done.
[root@node1 ceph-cluster]# rbd info demo-image
rbd image 'demo-image':
    size 15360 MB in 3840 objects

# 縮減
[root@node1 ceph-cluster]# rbd resize --size 7G demo-image --allow-shrink
[root@node1 ceph-cluster]# rbd info demo-image
rbd image 'demo-image':
    size 7168 MB in 1792 objects

客戶端使用塊設(shè)備

  • 怎么用?裝軟件
  • ceph集群在哪?通過配置文件說明集群地址
  • 權(quán)限。keyring文件
# 安裝ceph客戶端軟件
[root@client1 ~]# yum install -y ceph-common

# 將配置文件和密鑰keyring文件拷貝給客戶端
[root@node1 ceph-cluster]# scp /etc/ceph/ceph.conf 192.168.4.10:/etc/ceph/
[root@node1 ceph-cluster]# scp /etc/ceph/ceph.client.admin.keyring 192.168.4.10:/etc/ceph/

# 客戶端查看鏡像
[root@client1 ~]# rbd list
demo-image

# 將ceph提供的鏡像映射到本地
[root@client1 ~]# rbd map demo-image
/dev/rbd0
[root@client1 ~]# lsblk 
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    0  30G  0 disk 
└─vda1 253:1    0  30G  0 part /
rbd0   252:0    0   7G  0 disk    # 多了一塊7GB的硬盤
[root@client1 ~]# ls /dev/rbd0 
/dev/rbd0

# 查看映射
[root@client1 ~]# rbd showmapped
id pool image      snap device    
0  rbd  demo-image -    /dev/rbd0 

# 使用
[root@client1 ~]# mkfs.xfs /dev/rbd0
[root@client1 ~]# mount /dev/rbd0 /mnt/
[root@client1 ~]# df -h /mnt/
文件系統(tǒng)        容量  已用  可用 已用% 掛載點(diǎn)
/dev/rbd0       7.0G   33M  7.0G    1% /mnt

本文摘自 :https://blog.51cto.com/z

開通會(huì)員,享受整站包年服務(wù)立即開通 >