ceph
- ceph被稱作面向未來的存儲
-
中文手冊:
-
ceph可以實(shí)現(xiàn)的存儲方式:
- 塊存儲:提供像普通硬盤一樣的存儲,為使用者提供“硬盤”
- 文件系統(tǒng)存儲:類似于NFS的共享方式,為使用者提供共享文件夾
- 對象存儲:像百度云盤一樣,需要使用單獨(dú)的客戶端
- ceph還是一個分布式的存儲系統(tǒng),非常靈活。如果需要擴(kuò)容,只要向ceph集中增加服務(wù)器即可。
- ceph存儲數(shù)據(jù)時采用多副本的方式進(jìn)行存儲,生產(chǎn)環(huán)境下,一個文件至少要存3份。ceph默認(rèn)也是三副本存儲。
ceph的構(gòu)成
- Ceph OSD 守護(hù)進(jìn)程: Ceph OSD 用于存儲數(shù)據(jù)。此外,Ceph OSD 利用 Ceph 節(jié)點(diǎn)的 CPU、內(nèi)存和網(wǎng)絡(luò)來執(zhí)行數(shù)據(jù)復(fù)制、糾刪代碼、重新平衡、恢復(fù)、監(jiān)控和報告功能。存儲節(jié)點(diǎn)有幾塊硬盤用于存儲,該節(jié)點(diǎn)就會有幾個osd進(jìn)程。
- Ceph Mon監(jiān)控器: Ceph Mon維護(hù) Ceph 存儲集群映射的主副本和 Ceph 存儲群集的當(dāng)前狀態(tài)。監(jiān)控器需要高度一致性,確保對Ceph 存儲集群狀態(tài)達(dá)成一致。維護(hù)著展示集群狀態(tài)的各種圖表,包括監(jiān)視器圖、 OSD 圖、歸置組( PG )圖、和 CRUSH 圖。
- MDSs: Ceph 元數(shù)據(jù)服務(wù)器( MDS )為 Ceph 文件系統(tǒng)存儲元數(shù)據(jù)。
- RGW:對象存儲網(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臺虛擬機(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為我們提供了一個ceph-deploy工具,可以在某一節(jié)點(diǎn)上統(tǒng)一操作全部節(jié)點(diǎn)
# 將Node1作為部署節(jié)點(diǎn),將來的操作都在node1上進(jìn)行。這樣,需要node1能夠免密操作其他主機(jī)
[root@node1 ~]# ssh-keygen # 生成密鑰對
[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個節(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可以時鐘同步
33 local stratum 10 # 即使沒有從一個源同步時鐘,也為其他主機(jī)提供時間
[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)證時間是否同步 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)建一個新的集群。
[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...這種報錯,可以試著執(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)只能啟動3次,超過報錯。
# 查看集群狀態(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)建存儲空間。ceph會硬盤分為兩個分區(qū),一個分區(qū)大小為5GB,用于保存ceph的內(nèi)部資源;另一個分區(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
# 將會出現(xiàn)2個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)塊存儲
- 塊設(shè)備存取數(shù)據(jù)時,可以一次存取很多。字符設(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è)備
- 塊存儲,就是可以提供像硬盤一樣的設(shè)備。使用塊存儲的節(jié)點(diǎn),第一次連接塊設(shè)備,需要對塊設(shè)備進(jìn)行分區(qū)、格式化,然后掛載使用。
- ceph提供存儲時,需要使用存儲池。為了給客戶端提供存儲資源,需要創(chuàng)建名為存儲池的容器。存儲池類似于邏輯卷管理中的卷組。卷組中包含很多硬盤和分區(qū);存儲池中包含各節(jié)點(diǎn)上的硬盤。
# ceph默認(rèn)有一個名為rbd的存儲池,其編號為0
[root@node1 ceph-cluster]# ceph osd lspools
0 rbd,
# 查看存儲池大小
[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
# 查看存儲池rbd存儲數(shù)據(jù)時,保存的副本數(shù)量
[root@node1 ceph-cluster]# ceph osd pool get rbd size
size: 3
# 在默認(rèn)存儲池中,創(chuàng)建一個名為demo-image大小為10G的鏡像,提供給客戶端使用
# 鏡像相當(dāng)于邏輯卷管理中的lv
[root@node1 ceph-cluster]# rbd create demo-image --size 10G
# 查看默認(rèn)存儲池中的鏡像
[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