ceph安裝及教程
ceph
????????????? ceph被稱(chēng)作面向未來(lái)的存儲(chǔ)
????????????? 中文手冊(cè):
–??????????? https://access.redhat.com/documentation/zh-cn/red_hat_ceph_storage/5/html/architecture_guide/index
–??????????? http://docs.ceph.org.cn/
????????????? ceph可以實(shí)現(xiàn)的存儲(chǔ)方式:
–??????????? 塊存儲(chǔ):提供像普通硬盤(pán)一樣的存儲(chǔ),為使用者提供“硬盤(pán)”
–??????????? 文件系統(tǒng)存儲(chǔ):類(lèi)似于NFS的共享方式,為使用者提供共享文件夾
–??????????? 對(duì)象存儲(chǔ):像百度云盤(pán)一樣,需要使用單獨(dú)的客戶(hù)端
????????????? 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ò)來(lái)執(zhí)行數(shù)據(jù)復(fù)制、糾刪代碼、重新平衡、恢復(fù)、監(jiān)控和報(bào)告功能。存儲(chǔ)節(jié)點(diǎn)有幾塊硬盤(pá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)。主要為訪(fǎng)問(wè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ī)
[root@zzgrhel8 ~]# clone-vm7
????????????? 關(guān)機(jī),為node1-node3各額外再添加2塊20GB的硬盤(pán)
# 查看添加的硬盤(pán),注意硬盤(pán)名字
[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源
# 在真機(jī)上提供yum源。真機(jī)務(wù)必關(guān)掉防火墻
[root@zzgrhel8 ~]# yum install -y vsftpd
[root@zzgrhel8 ~]# systemctl start vsftpd
[root@zzgrhel8 ~]# mkdir /var/ftp/ceph
[root@zzgrhel8 ~]# cp /linux-soft/2/ceph10.iso /iso/
[root@zzgrhel8 ~]# vim /etc/fstab?? # 追加一行如下
/iso/ceph10.iso /var/ftp/ceph?? iso9660 defaults,loop?? 0 0
[root@zzgrhel8 ~]# mount -a
[root@zzgrhel8 ~]# df -h /var/ftp/ceph/
文件系統(tǒng)??????? 容量? 已用? 可用 已用% 掛載點(diǎn)
/dev/loop3????? 284M? 284M???? 0? 100% /var/ftp/ceph
[root@zzgrhel8 ~]# ls /var/ftp/ceph/
EULA? MON? README?????????????? ???????Tools
GPL?? OSD? RPM-GPG-KEY-redhat-release? TRANS.TBL
# 在node1-3節(jié)點(diǎn)上配置yum
[root@node1 ~]# cat /etc/yum.repos.d/local.repo
[local_repo]
name=CentOS-$releasever - Base
baseurl=ftp://192.168.4.254/centos-1804
enabled=1
gpgcheck=0
[root@node1 ~]# vim /etc/yum.repos.d/ceph.repo
[osd]
name=ceph osd
baseurl=ftp://192.168.4.254/ceph/OSD
enabled=1
gpgcheck=0
[mon]
name=ceph mon
baseurl=ftp://192.168.4.254/ceph/MON
enabled=1
gpgcheck=0
[tools]
name=ceph tools
baseurl=ftp://192.168.4.254/ceph/Tools
enabled=1
gpgcheck=0
[root@node1 ~]# yum repolist
... ...
repolist: 10,013
[root@node1 ~]# scp /etc/yum.repos.d/ceph.repo 192.168.4.12:/etc/yum.repos.d/
[root@node1 ~]# ^12^13
[root@node1 ~]# ^13^10
????????????? 各節(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),將來(lái)的操作都在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ī)上配置名稱(chēng)解析。注意,解析的名字必須是該機(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?? # 即使沒(méi)有從一個(gè)源同步時(shí)鐘,也為其他主機(jī)提供時(shí)間
[root@client1 ~]# systemctl restart chronyd
# 配置node1-3成為client1的NTP客戶(hù)端
[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??????? # 共享密鑰
# 開(kāi)啟分層快照功能。
[root@node1 ceph-cluster]# vim ceph.conf?? # 尾部追加一行如下
rbd_default_features = 1
# 初始化monitor
[root@node1 ceph-cluster]# ceph-deploy mon create-initial
# 如果安裝過(guò)程中出現(xiàn)keyring...這種報(bào)錯(cuò),可以試著執(zhí)行以下命令:
[root@node1 ceph-cluster]# ceph-deploy gatherkeys node{1..3}
# 如果安裝錯(cuò)誤,可以清理數(shù)據(jù)后,重新執(zhí)行初始化。清理數(shù)據(jù)命令:
[root@node1 ceph-cluster]# ceph-deploy purge node1
[root@node1 ceph-cluster]# ceph-deploy purge node2
[root@node1 ceph-cluster]# ceph-deploy purge node3
[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次,超過(guò)報(bào)錯(cuò)。
# 查看集群狀態(tài)
[root@node1 ceph-cluster]# ceph -s
???? health HEALTH_ERR?? # 因?yàn)檫€沒(méi)有硬盤(pán),所以狀態(tài)是HEALTH_ERR
# 創(chuàng)建OSD
[root@node1 ceph-cluster]# ceph-deploy disk --help
# 初始化各主機(jī)的硬盤(pán)。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ì)硬盤(pán)分為兩個(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硬盤(pán)用于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ǔ),就是可以提供像硬盤(pán)一樣的設(shè)備。使用塊存儲(chǔ)的節(jié)點(diǎn),第一次連接塊設(shè)備,需要對(duì)塊設(shè)備進(jìn)行分區(qū)、格式化,然后掛載使用。
????????????? ceph提供存儲(chǔ)時(shí),需要使用存儲(chǔ)池。為了給客戶(hù)端提供存儲(chǔ)資源,需要?jiǎng)?chuàng)建名為存儲(chǔ)池的容器。存儲(chǔ)池類(lèi)似于邏輯卷管理中的卷組。卷組中包含很多硬盤(pán)和分區(qū);存儲(chǔ)池中包含各節(jié)點(diǎn)上的硬盤(pá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的鏡像,提供給客戶(hù)端使用
# 鏡像相當(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
客戶(hù)端使用塊設(shè)備
????????????? 怎么用?裝軟件
????????????? ceph集群在哪?通過(guò)配置文件說(shuō)明集群地址
????????????? 權(quán)限。keyring文件
# 安裝ceph客戶(hù)端軟件
[root@client1 ~]# yum install -y ceph-common
# 將配置文件和密鑰keyring文件拷貝給客戶(hù)端
[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/
# 客戶(hù)端查看鏡像
[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的硬盤(pán)
[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
塊存儲(chǔ)
# 查看塊設(shè)備映射信息
[root@client1 ~]# rbd showmapped
id pool image????? snap device???
0? rbd? 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 /mnt
# 停用設(shè)備
[root@client1 ~]# umount /mnt/
[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??? # 已經(jīng)卸載
[root@client1 ~]# rbd unmap /dev/rbd0
[root@client1 ~]# lsblk??? # /dev/rbd0消失
NAME?? MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda??? 253:0??? 0? 30G? 0 disk
└─vda1 253:1??? 0? 30G? 0 part /
快照
????????????? 快照可以保存某一時(shí)間點(diǎn)時(shí)的狀態(tài)數(shù)據(jù)
????????????? 希望回到以前的一個(gè)狀態(tài),可以恢復(fù)快照
# 新建名為img1的鏡像
[root@node1 ~]# rbd create img1 --size 10G
[root@client1 ~]# rbd list??? # 查看鏡像名
# 映射為本地硬盤(pán)
[root@client1 ~]# rbd map img1
/dev/rbd0
# 格式化后掛載
[root@client1 ~]# mkfs.ext4 /dev/rbd0
[root@client1 ~]# mount /dev/rbd0 /mnt
[root@client ~]# cp /etc/hosts /mnt/
[root@client ~]# ls /mnt/
hosts? lost+found
# 查看img1的快照
[root@node1 ~]# rbd snap ls img1
# 為img1創(chuàng)建名為img1-snap1的快照。
[root@node1 ~]# rbd snap create img1 --snap img1-snap1
[root@node1 ~]# rbd snap ls img1?? # 查看鏡像的快照
SNAPID NAME????????? SIZE
???? 6 img1-snap1 10240 MB
# 刪除快照
[root@node1 ~]# rbd snap remove img1 --snap img1-snap1
# 刪除鏡像,刪除前需要在客戶(hù)端卸載它
[root@client1 ~]# umount /mnt
[root@client1 ~]# rbd unmap /dev/rbd0
[root@node1 ~]# rbd rm img1
????????????? 使用鏡像、快照綜合示例
# 1. 在rbd存儲(chǔ)池中創(chuàng)建10GB的鏡像,名為img1
[root@node1 ~]# rbd --help?? # 查看子命令
[root@node1 ~]# rbd help create? # 查看子命令create的幫助
[root@node1 ~]# rbd create img1 --size 10G
[root@node1 ~]# rbd list
img1
[root@node1 ~]# rbd info img1
rbd image 'img1':
??? size 10240 MB in 2560 objects
??? order 22 (4096 kB objects)
??? block_name_prefix: rbd_data.1061238e1f29
??? format: 2
??? features: layering
??? flags:
# 2. 在客戶(hù)端使用鏡像img1,將其掛載到/mnt
[root@client1 ~]# rbd list
img1
[root@client1 ~]# rbd map img1
/dev/rbd0
[root@client1 ~]# mkfs.xfs /dev/rbd0
[root@client1 ~]# mount /dev/rbd0 /mnt/
[root@client1 ~]# rbd showmapped
id pool image snap device???
0? rbd? img1? -??? /dev/rbd0
[root@client1 ~]# df -h /mnt/
文件系統(tǒng)??????? 容量? 已用? 可用 已用% 掛載點(diǎn)
/dev/rbd0??????? 10G?? 33M?? 10G??? 1% /mnt
# 3. 向/mnt中寫(xiě)入數(shù)據(jù)
[root@client1 ~]# cp /etc/hosts /mnt/
[root@client1 ~]# cp /etc/passwd /mnt/
[root@client1 ~]# ls /mnt/
hosts? passwd
# 4. 創(chuàng)建img1的快照,名為img1-sn1
[root@node1 ~]# rbd snap create img1 --snap img1-sn1
[root@node1 ~]# rbd snap ls img1
SNAPID NAME???????? SIZE
???? 8 img1-sn1 10240 MB
# 5. 刪除/mnt/中的數(shù)據(jù)
[root@client1 ~]# rm -f /mnt/*
# 6. 通過(guò)快照還原數(shù)據(jù)
[root@client1 ~]# umount /mnt/
[root@client1 ~]# rbd unmap /dev/rbd0
[root@node1 ~]# rbd help snap rollback?? # 查看子命令幫助
# 回滾img1到快照img1-sn1
[root@node1 ~]# rbd snap rollback img1 --snap img1-sn1
# 重新掛載
[root@client1 ~]# rbd map img1
/dev/rbd0
[root@client1 ~]# mount /dev/rbd0 /mnt/
[root@client1 ~]# ls /mnt/?? # 數(shù)據(jù)還原完成
hosts? passwd
????????????? 保護(hù)快照,防止刪除
[root@node1 ~]# rbd help snap protect
# 保護(hù)鏡像img1的快照img1-sn1
[root@node1 ~]# rbd snap protect img1 --snap img1-sn1
[root@node1 ~]# rbd snap rm img1 --snap img1-sn1?? # 不能刪
快照克隆
????????????? 不能將一個(gè)鏡像同時(shí)掛載到多個(gè)節(jié)點(diǎn),如果這樣操作,將會(huì)損壞數(shù)據(jù)
????????????? 如果希望不同的節(jié)點(diǎn),擁有完全相同的數(shù)據(jù)盤(pán),可以使用克隆技術(shù)
????????????? 克隆是基于快照的,不能直接對(duì)鏡像克隆
????????????? 快照必須是受保護(hù)的快照,才能克隆
????????????? 克隆流程
?
????????????? 給多個(gè)客戶(hù)端生成數(shù)據(jù)相同的數(shù)據(jù)盤(pán)
# 1. 創(chuàng)建名為img2的鏡像,大小10GB
[root@node1 ~]# rbd create img2 --size 10G
# 2. 向鏡像中寫(xiě)入數(shù)據(jù)
[root@node1 ~]# rbd map img2
/dev/rbd0
[root@node1 ~]# mkfs.xfs /dev/rbd0
[root@node1 ~]# mount /dev/rbd0 /mnt/
[root@node1 ~]# for i in {1..20}
> do
> echo "Hello World $i" > /mnt/file$i.txt
> done
[root@node1 ~]# ls /mnt/
file10.txt? file15.txt? file1.txt?? file5.txt
file11.txt? file16.txt? file20.txt? file6.txt
file12.txt? file17.txt? file2.txt?? file7.txt
file13.txt? file18.txt? file3.txt?? file8.txt
file14.txt? file19.txt? file4.txt?? file9.txt
# 3. 卸載鏡像
[root@node1 ~]# umount /mnt/
[root@node1 ~]# rbd unmap /dev/rbd0
# 4. 為img2創(chuàng)建名為img2-sn1快照
[root@node1 ~]# rbd snap create img2 --snap img2-sn1
# 5. 保護(hù)img2-sn1快照
[root@node1 ~]# rbd snap protect img2 --snap img2-sn1
# 6. 通過(guò)受保護(hù)的快照img2-sn1創(chuàng)建克隆鏡像
[root@node1 ~]# rbd clone img2 --snap img2-sn1 img2-sn1-1 --image-feature layering
[root@node1 ~]# rbd clone img2 --snap img2-sn1 img2-sn1-2 --image-feature layering
# 7. 查看創(chuàng)建出來(lái)的、克隆的鏡像
[root@node1 ~]# rbd list
img1
img2
img2-sn1-1
img2-sn1-2
# 8. 不同的客戶(hù)端掛載不同的克隆鏡像,看到的是相同的數(shù)據(jù)
[root@client1 ~]# rbd map img2-sn1-1
/dev/rbd1
[root@client1 ~]# mkdir /data
[root@client1 ~]# mount /dev/rbd1 /data
[root@client1 ~]# ls /data
file10.txt? file15.txt? file1.txt?? file5.txt
file11.txt? file16.txt? file20.txt? file6.txt
file12.txt? file17.txt? file2.txt?? file7.txt
file13.txt? file18.txt? file3.txt?? file8.txt
file14.txt? file19.txt? file4.txt?? file9.txt
????????????? 查詢(xún)鏡像和快照
# 查看快照信息
[root@node1 ~]# rbd info img2 --snap img2-sn1
rbd image 'img2':
??? size 10240 MB in 2560 objects
??? order 22 (4096 kB objects)
??? block_name_prefix: rbd_data.107a238e1f29
??? format: 2
??? features: layering
??? flags:
??? protected: True??? # 受保護(hù)
# 查看克隆的快照
[root@node1 ~]# rbd info img2-sn1-2
rbd image 'img2-sn1-2':
??? size 10240 MB in 2560 objects
??? order 22 (4096 kB objects)
??? block_name_prefix: rbd_data.10842eb141f2
??? format: 2
??? features: layering
??? flags:
??? parent: rbd/img2@img2-sn1? # 父對(duì)象是rbd池中img2鏡像的img2-sn1快照
??? overlap: 10240 MB
????????????? 合并父子鏡像
–??????????? img2-sn1-2是基于img2的快照克隆來(lái)的,不能獨(dú)立使用。
–??????????? 如果父鏡像刪除了,子鏡像也無(wú)法使用。
–??????????? 將父鏡像內(nèi)容合并到子鏡像中,子鏡像就可以獨(dú)立使用了。
# 把img2的數(shù)據(jù)合并到子鏡像img2-sn1-2中
[root@node1 ~]# rbd flatten img2-sn1-2
# 查看狀態(tài),它就沒(méi)有父鏡像了
[root@node1 ~]# rbd info img2-sn1-2
rbd image 'img2-sn1-2':
??? size 10240 MB in 2560 objects
??? order 22 (4096 kB objects)
??? block_name_prefix: rbd_data.10842eb141f2
??? format: 2
??? features: layering
??? flags:
# 刪除父鏡像,如果鏡像正在被使用,則先取消
[root@client ~]# umount /data/
[root@client ~]# rbd unmap /dev/rbd1
# 1. 刪除鏡像img2-sn1-1
[root@node1 ~]# rbd rm img2-sn1-1
# 2. 取消img2-sn1的保護(hù)
[root@node1 ~]# rbd snap unprotect img2 --snap img2-sn1
# 3. 刪除img2-sn1快照
[root@node1 ~]# rbd snap rm img2 --snap img2-sn1
# 4. 刪除img2
[root@node1 ~]# rbd rm img2
# 因?yàn)閕mg2-sn1-2已經(jīng)是獨(dú)立的鏡像了,所以它還可以使用
[root@client1 ~]# rbd list
img1
img2-sn1-2
[root@client1 ~]# rbd map img2-sn1-2
/dev/rbd1
[root@client1 ~]# mount /dev/rbd1 /data/
[root@client1 ~]# ls /data/
file10.txt? file15.txt? file1.txt?? file5.txt
file11.txt? file16.txt? file20.txt? file6.txt
file12.txt? file17.txt? file2.txt?? file7.txt
file13.txt? file18.txt? file3.txt?? file8.txt
file14.txt? file19.txt? file4.txt? ?file9.txt
ceph文件系統(tǒng)
????????????? 文件系統(tǒng):相當(dāng)于是組織數(shù)據(jù)存儲(chǔ)的方式。
????????????? 格式化時(shí),就是在為存儲(chǔ)創(chuàng)建文件系統(tǒng)。
????????????? Linux對(duì)ceph有很好的支持,可以把ceph文件系統(tǒng)直接掛載到本地。
????????????? 要想實(shí)現(xiàn)文件系統(tǒng)的數(shù)據(jù)存儲(chǔ)方式,需要有MDS組件
????????????? 安裝并啟用mds
# 在node3節(jié)點(diǎn)上安裝MDS
[root@node1 ~]# ssh node3
[root@node3 ~]# yum install -y ceph-mds
# 的node1配置MDS
[root@node1 ~]# cd ceph-cluster/
[root@node1 ceph-cluster]# ceph-deploy mds create node3
使用MDS
????????????? 元數(shù)據(jù)就是描述數(shù)據(jù)的屬性。如屬主、屬組、權(quán)限等。
????????????? ceph文件系統(tǒng)中,數(shù)據(jù)和元數(shù)據(jù)是分開(kāi)存儲(chǔ)的
????????????? 新建存儲(chǔ)池
–??????????? 歸置組PG:存儲(chǔ)池包含PG。PG是一個(gè)容器,用于存儲(chǔ)數(shù)據(jù)。
–??????????? 為了管理方便,將數(shù)量眾多的數(shù)據(jù)放到不同的PG中管理,而不是直接把所有的數(shù)據(jù)扁平化存放。
–??????????? 通常一個(gè)存儲(chǔ)池中創(chuàng)建100個(gè)PG。
????????????? 創(chuàng)建ceph文件系統(tǒng)
# 1. 新建一個(gè)名為data1的存儲(chǔ)池,目的是存儲(chǔ)數(shù)據(jù),有100個(gè)PG
[root@node1 ceph-cluster]# ceph osd pool create data1 100
# 2. 新建一個(gè)名為metadata1的存儲(chǔ)池,目的是存儲(chǔ)元數(shù)據(jù)
[root@node1 ceph-cluster]# ceph osd pool create metadata1 100
# 3. 創(chuàng)建名為myfs1的cephfs,數(shù)據(jù)保存到data1中,元數(shù)據(jù)保存到metadata1中
[root@node1 ceph-cluster]# ceph fs new myfs1 metadata1 data1
# 查看存儲(chǔ)池
[root@node1 ceph-cluster]# ceph osd lspools
0 rbd,1 data1,2 metadata1,
[root@node1 ceph-cluster]# ceph df
GLOBAL:
??? SIZE?????? AVAIL????? RAW USED???? %RAW USED
??? 92093M???? 91574M???????? 519M?? ???????0.56
POOLS:
??? NAME????????? ID???? USED?????? %USED???? MAX AVAIL???? OBJECTS
??? rbd?????????? 0????? 86469k????? 0.28??????? 30488M??????? 2606
??? data1???????? 1?????????? 0???????? 0??????? 30488M?????????? 0
??? metadata1???? 2??????? 2068???????? 0??????? 30488M????????? 20
???
# 查看文件系統(tǒng)
[root@node1 ~]# ceph fs ls
name: myfs1, metadata pool: metadata1, data pools: [data1 ]
????????????? 客戶(hù)端使用cephfs
# 掛載文件系統(tǒng)需要密碼。查看密碼
[root@client1 ~]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
??? key = AQBmhINh1IZjHBAAvgk8m/FhyLiH4DCCrnrdPQ==
# -t 指定文件系統(tǒng)類(lèi)型。-o是選項(xiàng),提供用戶(hù)名和密碼
# cephfs的端口號(hào)默認(rèn)是6789
[root@client1 ~]# mkdir /mydata
[root@client1 ~]# mount -t ceph -o name=admin,secret=AQBmhINh1IZjHBAAvgk8m/FhyLiH4DCCrnrdPQ== 192.168.4.13:6789:/ /mydata
[root@client1 ~]# df -h /mydata
文件系統(tǒng)???????????? 容量? 已用? 可用 已用% 掛載點(diǎn)
192.168.4.13:6789:/?? 90G? 520M?? 90G??? 1% /mydata
對(duì)象存儲(chǔ)
????????????? 需要專(zhuān)門(mén)的客戶(hù)端訪(fǎng)問(wèn)
????????????? 鍵值對(duì)存儲(chǔ)方式
????????????? 對(duì)象存儲(chǔ)需要rgw組件
????????????? 安裝部署
[root@node1 ceph-cluster]# ssh node3
[root@node3 ~]# yum install -y ceph-radosgw
[root@node1 ~]# cd ceph-cluster/
[root@node1 ceph-cluster]# ceph-deploy rgw create node3
????????????? 客戶(hù)端使用:http://docs.ceph.org.cn/radosgw/s3/python/