ceph

Ceph

Ceph是一种软件定义存储,可以运行在几乎所有主流的Linux发行版(比如CentOS和Ubuntu)和其它类UNIX操作系统(典型如FreeBSD)。
Ceph的分布式基因使其可以轻易管理成百上千个节点PB级及以上存储容量的大规模集群,同时基于计算的扁平寻址设计使得Ceph客户端可以直接和服务端的任意节点通信,从而避免因为存在访问热点而导致性能瓶颈。

Ceph是一个统一存储系统,即支持传统的文件存储协议,例如SAN和NAS;也支持对象存储协议,例如S3和Swift。
Ceph引入了一个叫CRUSH的新算法,而不是保存和操纵元数据。
CRUSH是Controlled Replication Under Scalable Hashing的缩写,CRUSH算法在后台计算数据存储和读取的位置,而不是为每个客户端请求执行元数据表的查找。通过动态计算元数据,不需要管理一个集中式的元数据表。
CRUSH使得Ceph能够自我管理和自我治愈。当故障区域中的组件故障时,CRUSH能够感知哪个组件故障了,并确定其对集群的影响。无须管理员的任何干预,CRUSH就会进行自我管理和自我疗愈,为因故障而丢失的数据执行恢复操作。
使用CRUSH,我们能够设计一个没有单点故障的高度可靠的存储基础设施。它也使得Ceph成为一个面向未来的高度可扩展和可靠的存储系统。
兼容性组合
Ceph是一个完备的企业级存储系统,它支持多种协议以及访问方式。这个统一的存储支持Ceph块、文件和对象存储

Ceph块存储

块存储是存储区域网络中使用的一个数据存储类别。
在这种类型中,数据以块的形式存储在卷里,卷会挂接到节点上。这些块形成的卷会映射到操作系统中,并被文件系统层控制。
Ceph引入了一个新的RBD协议,也就是Ceph块设备。RBD为客户端提供了可靠、分布式、高性能的块存储。RBD已经被Linux内核支持,几乎所有的Linux操作系统发行版都支持RBD。除了可靠性和性能之外,RBD也支持其他的企业级特性,如完整和增量式快照,精简的配置,写时复制式克隆以及全内存是缓存。
Ceph RBD(rbd)支持的最大镜像为16EB。这些镜像可以作为磁盘映射到物理机裸机、虚拟机或者其他主机用。业界领先的开源hypervisor,例如KVM和Xen完全支持RBD。

Ceph文件系统

Ceph文件系统(也就是CephFS)是一个兼容POSIX的文件系统,利用Ceph存储集群来保存用户数据。Linux内核驱动程序支持CephFS,这也使得CephFS高度适用于各大Linux操作系统发行版。CephFS将数据和元数据分开存储,为上层的应用程序提供较高的性能以及可靠性。
在Ceph集群内部,Ceph文件系统库(libcephfs)运行在RADOS库(librados)之上,后者是Ceph存储集群协议,由文件、块和对象存储共用。要使用CephFS,集群节点上最少要配置一个Ceph元数据服务器MDS客户端可以采用多种方式使用CephFS。

Ceph对象存储

对象存储是一种以对象形式而不是传统文件和块形式存储数据的方法。基于对象的存储已经引起了行业界的大量关注。为灵活地使用它们的巨量数据,这些组织正快速采用对象存储解决方案。
在这里插入图片描述
Ceph是一个分布式对象存储系统,通过它的对象网关(object gateway),也就是RADOS网关(radosgw)提供对象存储接口RADOS网关利用librgw(RADOS网关库)和librados这些库,允许应用程序跟Ceph对象存储建立连接。Ceph通过RESTful API提供可访问且最稳定的多租户对象存储解决方案之一。
RADOS网关提供RESTful接口让用户的应用程序将数据存储到Ceph集群中。RADOS网关接口满足一下特点:
要访问Ceph的对象存储系统,也可以绕开RADOS网关层,librados软件库允许用户的应用程序通过C、C++、Java、Python和PHP直接访问Ceph对象存储。

存储分类:
1)DAS直连存储[硬盘]
2)NAS网络附加存储[NFS,Samba…] 提供文件系统共享
3)SAN存储区域网络[iSCSI…] 提供块共享
4)分布式存储

备注:文件系统(ext3,ext4,xfs,ntfs,fat32)

常见的分布式存储:
Hadoop
Lustre
FastDFS
GlusterFS
Ceph(提供块、文件系统、对象存储)

Ceph核心组件:
MON监控组件(ceph-mon)监控和绘制地图
OSD存储设备(ceph-osd)提供共享容量
MDS文件系统(ceph-mds)
Radowsgateway对象存储(ceph-radosgw)

ceph的存储默认会提供3副本,所以OSD至少3台
MON有一个过半原则,所以至少3台

ceph提供:高可用、高性能、高可扩展行

【准备环境】4台虚拟机,1台做客户端,3台做ceph存储集群
主机名    IP地址
client      192.168.4.10/24
node1      192.168.4.11/24
node2     192.168.4.12/24
node3     192.168.4.13/24
修改主机名,配置IP地址.

把四台虚拟机全部关机.
每台虚拟机都添加一个光驱.做如下相同操作:
右击虚拟机,选【设置】---【添加】---【CD|DVD驱动器】--【完成】
点击刚刚新建的光盘[CD|DVD],勾选使用ISO映像文件--[浏览]
找到自己真机的ceph10.iso加载即可.

【重要提醒】添加新的光驱后,新添加的光驱是第一个光驱
之前的光驱变成了第二个光驱!!!!


给node1,node2,node3做ceph集群的3台主机添加磁盘
每个虚拟机加2个20G的磁盘.
右击虚拟机,选【设置】---【添加】---【磁盘】--【下一步】
【下一步】---大小【20G】---【下一步】--【完成】

备注:同样的操作在3台虚拟机上都做2遍。

启动所有虚拟机后,查看磁盘情况:
[root@client ~]# lsblk
[root@node1 ~]# lsblk
[root@node2 ~]# lsblk
[root@node3 ~]# lsblk


【重新挂载光盘,所有4台虚拟机操作】
[root@client ~]# umount /dev/sr0
[root@client ~]# umount /dev/sr1    #未挂载的话会报错
#备注:284M左右的光盘是Ceph光盘,8G的光盘是系统光盘.
[root@client ~]# mkdir /ceph
[root@client ~]# vim /etc/fstab
/dev/sr0    /ceph     iso9660   defaults   0  0
/dev/sr1    /media    iso9660   defaults   0  0
[root@client ~]# mount -a
[root@client ~]# lsblk
#确认284M光盘挂载到ceph目录,8G光盘挂载到/media目录.




[root@node1 ~]# umount /dev/sr0
[root@node1 ~]# umount /dev/sr1
[root@node1 ~]# mkdir /ceph
[root@node1 ~]# vim /etc/fstab
/dev/sr0    /ceph     iso9660   defaults   0  0
/dev/sr1    /media    iso9660   defaults   0  0
[root@node1 ~]# mount -a


[root@node2 ~]# umount /dev/sr0
[root@node2 ~]# umount /dev/sr1
[root@node2 ~]# mkdir /ceph
[root@node2 ~]# vim /etc/fstab
/dev/sr0    /ceph     iso9660   defaults   0  0
/dev/sr1    /media    iso9660   defaults   0  0
[root@node2 ~]# mount -a


[root@node3 ~]# umount /dev/sr0
[root@node3 ~]# umount /dev/sr1
[root@node3 ~]# mkdir /ceph
[root@node3 ~]# vim /etc/fstab
/dev/sr0    /ceph     iso9660   defaults   0  0
/dev/sr1    /media    iso9660   defaults   0  0
[root@node3 ~]# mount -a


【所有主机配置yum源,4台虚拟机做相同操作】
[root@client ~]# cd /etc/yum.repos.d/
[root@client yum.repos.d]# cat dvd.repo  #原本配置好的系统YUM
[centos]
name=centos
baseurl=file:///media/
gpgcheck=0
[root@client yum.repos.d]# vim ceph.repo    #新建yum配置
[mon]
name=mon
baseurl=file:///ceph/MON
gpgcheck=0
[osd]
name=osd
baseurl=file:///ceph/OSD
gpgcheck=0
[tools]
name=tools
baseurl=file:///ceph/Tools
gpgcheck=0
[root@client yum.repos.d]# yum repolist

[root@client yum.repos.d]# scp ceph.repo 192.168.4.11:/etc/yum.repos.d/
[root@client yum.repos.d]# scp ceph.repo 192.168.4.12:/etc/yum.repos.d/
[root@client yum.repos.d]# scp ceph.repo 192.168.4.13:/etc/yum.repos.d/


【ssh密钥,实现无密码连接】
#备注:我们需要找一台主机出来,后面的很多早在都是需要重复的
#很多操作都需要远程操作,
#所以需要找一台主机,让他可用无密码远程所有主机,包括远程自己.
#这台主机可用是任意主机(这里假设我们选择的是node1)

[root@node1 ~]# ssh-keygen
[root@node1 ~]# for i in 10 11 12 13
 do
    ssh-copy-id  192.168.4.$i
 done
#会提示yes/no,输入yes,会提示输入密码,输入系统密码即可.


【修改主机名解析,仅在node1操作】
[root@node1 ~]# vim /etc/hosts
#在该文件中手动添加如下内容:
192.168.4.10  client
192.168.4.11  node1
192.168.4.12  node2
192.168.4.13  node3
#【注意:这里解析的名称必须跟对应电脑的主机名称一致】
[root@node1 ~]# for i in client node1 node2 node3
 do
    scp  /etc/hosts  $i:/etc/
 done
#备注:
#/etc/hostname是主机名,/etc/hosts是本地域名解析
#hostname是自己识别的名称,hosts是识别自己和其他主机的解析名称


【配置NTP时间同步:Ceph要求所有主机时间必须一致】
使用node1做时间服务器,其他所有主机与node1同步时间
#仅node1操作
1)配置时间服务器
[root@client ~]#  yum -y install chrony
[root@client ~]# vim /etc/chrony.conf
allow 192.168.4.0/24        #修改26行
local stratum 10            #修改29行(去注释即可) stratum 译为:层
[root@client ~]# systemctl restart chronyd

[root@client ~]# firewall-cmd --set-default-zone=trusted
[root@client ~]# sed -i ‘/SELINUX/s/enforcing/permissive/’ /etc/selinux/config
[root@client ~]# setenforce 0

2)配置NTP客户端
[root@node1 ~]# for i in node1  node2  node3
do
    ssh  $i  "yum -y install chrony"
done
[root@node1 ~]# for i in  node1  node2  node3
 do
    ssh $i  "sed -i '2a server 192.168.4.10 iburst'  /etc/chrony.conf"
    ssh $i  "systemctl  restart chronyd"
 done

“iburst” 选项作用是如果在一个标准的轮询间隔内没有应答,客户端会发送一定数量的包
[root@node1 ~]# for i in node1 node2 node3
do
ssh $i “firewall-cmd --set-default-zone=trusted”
ssh $i “sed -i ‘/SELINUX/s/enforcing/permissive/’ /etc/selinux/config”
ssh $i “setenforce 0”
done

#备注:任意找一台主机验证
[root@node2 ~]# chronyc sources -v

【部署Ceph集群】

1)安装软件包(仅node1主机操作)


[root@node1 ~]# yum -y install ceph-deploy
#仅在node1主机安装(这是一个python脚本,可以自动部署ceph)

[root@node1 ~]# for i in  node1  node2  node3
 do
    ssh $i  "yum -y install ceph-mon ceph-osd ceph-mds ceph-radosgw"
 done

#任意主机验证:
[root@node1 ~]# rpm -qa |grep ceph


2)配置ceph-mon服务[仅node1主机操作]
[root@node1 ~]# mkdir /root/ceph-cluster
[root@node1 ~]# cd /root/ceph-cluster/
#创建任意目录,名称任意,位置任意.
#但是!!!以后但凡执行ceph-deploy这个脚本,必须先cd到该目录.

++++++++++++++++++++++++++++++++++

此时推荐:给虚拟机快照

++++++++++++++++++++++++++++++++++

[root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3
#在当前目录下生成ceph.conf主配置文件,
#ceph mon集群由node1,node2,node3组成
[root@node1 ceph-cluster]# cat ceph.conf    #输出结果如下:
[global]
fsid = bf92e6da-2d17-4bfd-ab01-917d3d3690c1
mon_initial_members = node1, node2, node3
mon_host = 192.168.4.11,192.168.4.12,192.168.4.13
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

#备注:默认ceph启动服务时会到/etc/ceph/目录去读取配置文件
#但是,ceph-deploy把ceph.conf创建到了当前目录
#接下来需要把当前目录的配置文件拷贝到/etc/ceph/目录
#然后启动ceph-mon服务.

[root@node1 ceph-cluster]# ceph-deploy mon create-initial
#脚本自动拷贝配置文件,自动启动所有主机的ceph-mon服务

[root@node1 ceph-cluster]# ceph -s        #验证
  cluster bf92e6da-2d17-4bfd-ab01-917d3d3690c1
 health HEALTH_ERR
        64 pgs are stuck inactive for more than 300 seconds
        64 pgs stuck inactive
        no osds
 monmap e1: 3 mons at {node1=192.168.4.11:6789/0,node2=192.168.4.12:6789/0,node3=192.168.4.13:6789/0}
        election epoch 4, quorum 0,1,2 node1,node2,node3
 osdmap e1: 0 osds: 0 up, 0 in
        flags sortbitwise
  pgmap v2: 64 pgs, 1 pools, 0 bytes data, 0 objects
        0 kB used, 0 kB / 0 kB avail
              64 creating

(在每个虚拟机主机查看自己的服务,各看各的)
[root@node1 ceph-cluster]# systemctl status ceph-mon@node1
[root@node2 ceph-cluster]# systemctl status ceph-mon@node2
[root@node3 ceph-cluster]# systemctl status ceph-mon@node3
#备注:管理员可以自己启动、重启、关闭,查看状态.


3)配置OSD服务,共享磁盘(仅在node1主机操作)
[首先需要初始化清空所有磁盘]
[root@node1 ceph-cluster]# for i in node1 node2 node3
 do
    ssh  $i  "lsblk"
 done
#再次确认每台虚拟机是否有共享用的磁盘
#vmware里面是sdb和sdc,kvm里面是vdb和vdc.

#备注:sdb作缓存盘,sdc作数据盘
#client------[缓存盘512G]-------[数据盘5T]
#在生成环境中缓存盘必须使用SSD固态盘,数据盘可以是传统磁盘.

[root@node1 ceph-cluster]# ceph-deploy disk zap  node1:sdb
[root@node1 ceph-cluster]# ceph-deploy disk zap  node1:sdc
[root@node1 ceph-cluster]# ceph-deploy disk zap  node2:sdb
[root@node1 ceph-cluster]# ceph-deploy disk zap  node2:sdc
[root@node1 ceph-cluster]# ceph-deploy disk zap  node3:sdb
[root@node1 ceph-cluster]# ceph-deploy disk zap  node3:sdc

++++++++++++++++++++++++++++++++++

此时推荐:给虚拟机快照

++++++++++++++++++++++++++++++++++

#启动ceph-osd服务,把磁盘共享出去(仅在node1主机操作)#
#提示:只要执行ceph-deploy脚本,必须先cd到ceph-cluster目录

#[root@node1 ceph-cluster]# ceph-deploy osd create  node1:sdc node1:sdb  node2:sdc node2sdb  node3:sdc node3:sdb
#远程node1、node2、node3
#启动3台主机的ceph-osd服务,把sdc共享出去,sdb作为缓存盘.

[root@node1 ceph-cluster]# ceph -s
cluster bf92e6da-2d17-4bfd-ab01-917d3d3690c1
 health HEALTH_OK
 monmap e1: 3 mons at {node1=192.168.4.11:6789/0,node2=192.168.4.12:6789/0,node3=192.168.4.13:6789/0}
        election epoch 12, quorum 0,1,2 node1,node2,node3
 osdmap e14: 3 osds: 3 up, 3 in
        flags sortbitwise
  pgmap v29: 64 pgs, 1 pools, 0 bytes data, 0 objects
        100 MB used, 61306 MB / 61406 MB avail
              64 active+clean

常见错误:
使用osd create创建OSD存储空间时,如提示下面的错误提示:
[ceph_deploy][ERROR ] RuntimeError: bootstrap-osd keyring not found; run 'gatherkeys'
解决方法如下:
[root@node1 ceph-cluster]#  ceph-deploy gatherkeys node1 node2 node3


#备注:检查的命令
[root@node1 ceph-cluster]# ceph osd tree
#查看有几个osd,分别在哪些主机,服务状态


#在三台不同的主机查看服务状态,可以开启,关闭,重启服务.
[root@node1 ~]# systemctl status ceph-osd@0
[root@node2 ~]# systemctl status ceph-osd@1
[root@node3 ~]# systemctl status ceph-osd@2
#提醒:这些服务在30分钟只能启动3次,超过就报错.
#在这个文件中有定义/usr/lib/systemd/system/ceph-osd@.service

【创建共享,客户端访问:块共享】

#备注:ceph有一个共享池的概念以及共享镜像的概念.
#共享镜像就是最终提供给用户访问的共享盘
#所有共享镜像都必须在某个共享池中
#默认ceph提供了一个名称为rbd的共享池.

[root@node1 ~]# ceph osd lspools
#查看共享池,默认有一个名称为rbd的共享池

[root@node1 ~]# rbd list
#查看共享镜像(默认为空)

[root@node1 ~]# rbd create  jacob  \
--image-feature layering  --size 5G
#create创建共享镜像,名称为jacob,名称可以任意
#该共享支持分层快照的功能,共享大小为5G,大小可以任意.
#创建的jacob共享镜像默认在rbd池.
[root@node1 ~]# rbd list

[root@node1 ~]# rbd info jacob

[root@node1 ~]# rbd create  rbd/xyz  \
--image-feature layering  --size 5G
#可以在创建镜像时指定在哪个共享池中创建镜像

【动态调整共享镜像的大小】
[root@node1 ~]# rbd resize --image jacob --size 10G
[root@node1 ~]# rbd info jacob

[root@node1 ~]# rbd resize --image jacob --size 7G --allow-shrink

【客户端访问共享,客户端主机操作】
#备注:[root@node1 ~]# cat /etc/ceph/ceph.conf
#ceph的配置文件中要求用户访问ceph必须提供密码
#auth_cluster_required = cephx
#auth_service_required = cephx
#auth_client_required = cephx
#这里的cephx是密码占位符,密码占位符不是密码.
#密码在cat /etc/ceph/ceph.client.admin.keyring文件

[root@client ~]# yum -y install ceph-common
[root@client ~]# scp node1:/etc/ceph/ceph.conf  /etc/ceph/
[root@client ~]# scp node1:/etc/ceph/ceph.client.admin.keyring  /etc/ceph/
#备注:客户端有配置文件就知道ceph集群在哪.
#客户端有keyring文件才有权限访问ceph集群.

[root@client ~]# lsblk
[root@client ~]# rbd map jacob            #访问共享
[root@client ~]# lsblk
[root@client ~]# mkfs.xfs /dev/rbd0
[root@client ~]# mount /dev/rbd0   /mnt/
[root@client ~]# echo "hello the world" > /mnt/test.txt


【ceph快照】
[root@node1 ~]# rbd snap ls --image jacob
#查看jacob共享是否有快照

[root@node1 ~]# rbd snap create --image jacob \
--snap jacob-snap1
#通过snap create指令,给jacob镜像创建快照,快照名称为jacob-snap1
#快照名称可以任意.

[root@node1 ~]# rbd snap ls --image jacob

【ceph不支持在线还原快照】

[root@client ~]# rm /mnt/test.txt
[root@client ~]# umount /mnt/

[root@node1 ~]# rbd snap rollback --image jacob \
--snap jacob-snap1
#通过rollback指令还原快照

[root@client ~]# mount /dev/rbd0 /mnt/
[root@client ~]# ls  /mnt/

[root@client ~]# rbd showmapped



【基于快照创建一个新共享镜像image】
[root@node1 ~]# rbd snap ls --image jacob
SNAPID NAME           SIZE
 4 jacob-snap1 7168 MB
#查看快照,发现jacob镜像有一个快照.快照名称为jacob-snap1

[root@node1 ~]# rbd snap protect \
--image jacob --snap jacob-snap1
#保护快照,对jacob共享盘的jacob-snap1这个快照进行保护.

[root@node1 ~]# rbd snap rm --image jacob --snap jacob-snap1
#删除快照演示,会出错.

[root@node1 ~]# rbd clone jacob --snap jacob-snap1 kelong --image-feature layering
[root@node1 ~]# rbd list
[root@node1 ~]# rbd info kelong            #可以查看到快照的信息
[root@node1 ~]# rbd flatten kelong        #把镜像与快照分离
[root@node1 ~]# rbd info kelong            #一个独立的镜像盘

[root@node1 ~]# rbd snap unprotect --image jacob --snap jacob-snap1
#取消对快照的保护
[root@node1 ~]# rbd snap rm --image jacob --snap jacob-snap1
#删除快照
[root@node1 ~]# rbd snap list --image jacob
#查看快照


【客户端取消挂载】
[root@client ~]# rbd showmapped

[root@client ~]# umount  /dev/rbd0
[root@client ~]# rbd unmap  jacob
#通过共享名称卸载
[root@client ~]# rbd unmap  /dev/rbd1
#通过设备名卸载

存储分类:
1)DAS直连存储[硬盘]
2)NAS网络附加存储[NFS,Samba…] 提供文件系统共享
3)SAN存储区域网络[iSCSI…] 提供块共享
4)分布式存储

备注:文件系统(ext3,ext4,xfs,ntfs,fat32)

常见的分布式存储:
Hadoop
Lustre
FastDFS
GlusterFS
Ceph(提供块、文件系统、对象存储)

Ceph核心组件:
MON监控组件(ceph-mon)监控和绘制地图
OSD存储设备(ceph-osd)提供共享容量
MDS文件系统(ceph-mds)
Radowsgateway对象存储(ceph-radosgw)

ceph的存储默认会提供3副本,所以OSD至少3台
MON有一个过半原则,所以至少3台

ceph提供:高可用、高性能、高可扩展行

【准备环境】4台虚拟机,1台做客户端,3台做ceph存储集群
主机名    IP地址
client      192.168.4.10/24
node1      192.168.4.11/24
node2     192.168.4.12/24
node3     192.168.4.13/24
修改主机名,配置IP地址.

把四台虚拟机全部关机.
每台虚拟机都添加一个光驱.做如下相同操作:
右击虚拟机,选【设置】---【添加】---【CD|DVD驱动器】--【完成】
点击刚刚新建的光盘[CD|DVD],勾选使用ISO映像文件--[浏览]
找到自己真机的ceph10.iso加载即可.

【重要提醒】添加新的光驱后,新添加的光驱是第一个光驱
之前的光驱变成了第二个光驱!!!!


给node1,node2,node3做ceph集群的3台主机添加磁盘
每个虚拟机加2个20G的磁盘.
右击虚拟机,选【设置】---【添加】---【磁盘】--【下一步】
【下一步】---大小【20G】---【下一步】--【完成】

备注:同样的操作在3台虚拟机上都做2遍。

启动所有虚拟机后,查看磁盘情况:
[root@client ~]# lsblk
[root@node1 ~]# lsblk
[root@node2 ~]# lsblk
[root@node3 ~]# lsblk


【重新挂载光盘,所有4台虚拟机操作】
[root@client ~]# umount /dev/sr0
[root@client ~]# umount /dev/sr1    #未挂载的话会报错
#备注:284M左右的光盘是Ceph光盘,8G的光盘是系统光盘.
[root@client ~]# mkdir /ceph
[root@client ~]# vim /etc/fstab
/dev/sr0    /ceph     iso9660   defaults   0  0
/dev/sr1    /media    iso9660   defaults   0  0
[root@client ~]# mount -a
[root@client ~]# lsblk
#确认284M光盘挂载到ceph目录,8G光盘挂载到/media目录.




[root@node1 ~]# umount /dev/sr0
[root@node1 ~]# umount /dev/sr1
[root@node1 ~]# mkdir /ceph
[root@node1 ~]# vim /etc/fstab
/dev/sr0    /ceph     iso9660   defaults   0  0
/dev/sr1    /media    iso9660   defaults   0  0
[root@node1 ~]# mount -a


[root@node2 ~]# umount /dev/sr0
[root@node2 ~]# umount /dev/sr1
[root@node2 ~]# mkdir /ceph
[root@node2 ~]# vim /etc/fstab
/dev/sr0    /ceph     iso9660   defaults   0  0
/dev/sr1    /media    iso9660   defaults   0  0
[root@node2 ~]# mount -a


[root@node3 ~]# umount /dev/sr0
[root@node3 ~]# umount /dev/sr1
[root@node3 ~]# mkdir /ceph
[root@node3 ~]# vim /etc/fstab
/dev/sr0    /ceph     iso9660   defaults   0  0
/dev/sr1    /media    iso9660   defaults   0  0
[root@node3 ~]# mount -a


【所有主机配置yum源,4台虚拟机做相同操作】
[root@client ~]# cd /etc/yum.repos.d/
[root@client yum.repos.d]# cat dvd.repo  #原本配置好的系统YUM
[centos]
name=centos
baseurl=file:///media/
gpgcheck=0
[root@client yum.repos.d]# vim ceph.repo    #新建yum配置
[mon]
name=mon
baseurl=file:///ceph/MON
gpgcheck=0
[osd]
name=osd
baseurl=file:///ceph/OSD
gpgcheck=0
[tools]
name=tools
baseurl=file:///ceph/Tools
gpgcheck=0
[root@client yum.repos.d]# yum repolist

[root@client yum.repos.d]# scp ceph.repo 192.168.4.11:/etc/yum.repos.d/
[root@client yum.repos.d]# scp ceph.repo 192.168.4.12:/etc/yum.repos.d/
[root@client yum.repos.d]# scp ceph.repo 192.168.4.13:/etc/yum.repos.d/


【ssh密钥,实现无密码连接】
#备注:我们需要找一台主机出来,后面的很多早在都是需要重复的
#很多操作都需要远程操作,
#所以需要找一台主机,让他可用无密码远程所有主机,包括远程自己.
#这台主机可用是任意主机(这里假设我们选择的是node1)

[root@node1 ~]# ssh-keygen
[root@node1 ~]# for i in 10 11 12 13
 do
    ssh-copy-id  192.168.4.$i
 done
#会提示yes/no,输入yes,会提示输入密码,输入系统密码即可.


【修改主机名解析,仅在node1操作】
[root@node1 ~]# vim /etc/hosts
#在该文件中手动添加如下内容:
192.168.4.10  client
192.168.4.11  node1
192.168.4.12  node2
192.168.4.13  node3
#【注意:这里解析的名称必须跟对应电脑的主机名称一致】
[root@node1 ~]# for i in client node1 node2 node3
 do
    scp  /etc/hosts  $i:/etc/
 done
#备注:
#/etc/hostname是主机名,/etc/hosts是本地域名解析
#hostname是自己识别的名称,hosts是识别自己和其他主机的解析名称


【配置NTP时间同步:Ceph要求所有主机时间必须一致】
使用node1做时间服务器,其他所有主机与node1同步时间
#仅node1操作
1)配置时间服务器
[root@client ~]#  yum -y install chrony
[root@client ~]# vim /etc/chrony.conf
allow 192.168.4.0/24        #修改26行
local stratum 10            #修改29行(去注释即可) stratum 译为:层
[root@client ~]# systemctl restart chronyd

[root@client ~]# firewall-cmd --set-default-zone=trusted
[root@client ~]# sed -i ‘/SELINUX/s/enforcing/permissive/’ /etc/selinux/config
[root@client ~]# setenforce 0

2)配置NTP客户端
[root@node1 ~]# for i in node1  node2  node3
do
    ssh  $i  "yum -y install chrony"
done
[root@node1 ~]# for i in  node1  node2  node3
 do
    ssh $i  "sed -i '2a server 192.168.4.10 iburst'  /etc/chrony.conf"
    ssh $i  "systemctl  restart chronyd"
 done

“iburst” 选项作用是如果在一个标准的轮询间隔内没有应答,客户端会发送一定数量的包
[root@node1 ~]# for i in node1 node2 node3
do
ssh $i “firewall-cmd --set-default-zone=trusted”
ssh $i “sed -i ‘/SELINUX/s/enforcing/permissive/’ /etc/selinux/config”
ssh $i “setenforce 0”
done

#备注:任意找一台主机验证
[root@node2 ~]# chronyc sources -v

【部署Ceph集群】

1)安装软件包(仅node1主机操作)


[root@node1 ~]# yum -y install ceph-deploy
#仅在node1主机安装(这是一个python脚本,可以自动部署ceph)

[root@node1 ~]# for i in  node1  node2  node3
 do
    ssh $i  "yum -y install ceph-mon ceph-osd ceph-mds ceph-radosgw"
 done

#任意主机验证:
[root@node1 ~]# rpm -qa |grep ceph


2)配置ceph-mon服务[仅node1主机操作]
[root@node1 ~]# mkdir /root/ceph-cluster
[root@node1 ~]# cd /root/ceph-cluster/
#创建任意目录,名称任意,位置任意.
#但是!!!以后但凡执行ceph-deploy这个脚本,必须先cd到该目录.

++++++++++++++++++++++++++++++++++

此时推荐:给虚拟机快照

++++++++++++++++++++++++++++++++++

[root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3
#在当前目录下生成ceph.conf主配置文件,
#ceph mon集群由node1,node2,node3组成
[root@node1 ceph-cluster]# cat ceph.conf    #输出结果如下:
[global]
fsid = bf92e6da-2d17-4bfd-ab01-917d3d3690c1
mon_initial_members = node1, node2, node3
mon_host = 192.168.4.11,192.168.4.12,192.168.4.13
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

#备注:默认ceph启动服务时会到/etc/ceph/目录去读取配置文件
#但是,ceph-deploy把ceph.conf创建到了当前目录
#接下来需要把当前目录的配置文件拷贝到/etc/ceph/目录
#然后启动ceph-mon服务.

[root@node1 ceph-cluster]# ceph-deploy mon create-initial
#脚本自动拷贝配置文件,自动启动所有主机的ceph-mon服务

[root@node1 ceph-cluster]# ceph -s        #验证
  cluster bf92e6da-2d17-4bfd-ab01-917d3d3690c1
 health HEALTH_ERR
        64 pgs are stuck inactive for more than 300 seconds
        64 pgs stuck inactive
        no osds
 monmap e1: 3 mons at {node1=192.168.4.11:6789/0,node2=192.168.4.12:6789/0,node3=192.168.4.13:6789/0}
        election epoch 4, quorum 0,1,2 node1,node2,node3
 osdmap e1: 0 osds: 0 up, 0 in
        flags sortbitwise
  pgmap v2: 64 pgs, 1 pools, 0 bytes data, 0 objects
        0 kB used, 0 kB / 0 kB avail
              64 creating

(在每个虚拟机主机查看自己的服务,各看各的)
[root@node1 ceph-cluster]# systemctl status ceph-mon@node1
[root@node2 ceph-cluster]# systemctl status ceph-mon@node2
[root@node3 ceph-cluster]# systemctl status ceph-mon@node3
#备注:管理员可以自己启动、重启、关闭,查看状态.


3)配置OSD服务,共享磁盘(仅在node1主机操作)
[首先需要初始化清空所有磁盘]
[root@node1 ceph-cluster]# for i in node1 node2 node3
 do
    ssh  $i  "lsblk"
 done
#再次确认每台虚拟机是否有共享用的磁盘
#vmware里面是sdb和sdc,kvm里面是vdb和vdc.

#备注:sdb作缓存盘,sdc作数据盘
#client------[缓存盘512G]-------[数据盘5T]
#在生成环境中缓存盘必须使用SSD固态盘,数据盘可以是传统磁盘.

[root@node1 ceph-cluster]# ceph-deploy disk zap  node1:sdb
[root@node1 ceph-cluster]# ceph-deploy disk zap  node1:sdc
[root@node1 ceph-cluster]# ceph-deploy disk zap  node2:sdb
[root@node1 ceph-cluster]# ceph-deploy disk zap  node2:sdc
[root@node1 ceph-cluster]# ceph-deploy disk zap  node3:sdb
[root@node1 ceph-cluster]# ceph-deploy disk zap  node3:sdc

++++++++++++++++++++++++++++++++++

此时推荐:给虚拟机快照

++++++++++++++++++++++++++++++++++

#启动ceph-osd服务,把磁盘共享出去(仅在node1主机操作)#
#提示:只要执行ceph-deploy脚本,必须先cd到ceph-cluster目录

#[root@node1 ceph-cluster]# ceph-deploy osd create  node1:sdc node1:sdb  node2:sdc node2sdb  node3:sdc node3:sdb
#远程node1、node2、node3
#启动3台主机的ceph-osd服务,把sdc共享出去,sdb作为缓存盘.

[root@node1 ceph-cluster]# ceph -s
cluster bf92e6da-2d17-4bfd-ab01-917d3d3690c1
 health HEALTH_OK
 monmap e1: 3 mons at {node1=192.168.4.11:6789/0,node2=192.168.4.12:6789/0,node3=192.168.4.13:6789/0}
        election epoch 12, quorum 0,1,2 node1,node2,node3
 osdmap e14: 3 osds: 3 up, 3 in
        flags sortbitwise
  pgmap v29: 64 pgs, 1 pools, 0 bytes data, 0 objects
        100 MB used, 61306 MB / 61406 MB avail
              64 active+clean

常见错误:
使用osd create创建OSD存储空间时,如提示下面的错误提示:
[ceph_deploy][ERROR ] RuntimeError: bootstrap-osd keyring not found; run 'gatherkeys'
解决方法如下:
[root@node1 ceph-cluster]#  ceph-deploy gatherkeys node1 node2 node3


#备注:检查的命令
[root@node1 ceph-cluster]# ceph osd tree
#查看有几个osd,分别在哪些主机,服务状态


#在三台不同的主机查看服务状态,可以开启,关闭,重启服务.
[root@node1 ~]# systemctl status ceph-osd@0
[root@node2 ~]# systemctl status ceph-osd@1
[root@node3 ~]# systemctl status ceph-osd@2
#提醒:这些服务在30分钟只能启动3次,超过就报错.
#在这个文件中有定义/usr/lib/systemd/system/ceph-osd@.service

【创建共享,客户端访问:块共享】

#备注:ceph有一个共享池的概念以及共享镜像的概念.
#共享镜像就是最终提供给用户访问的共享盘
#所有共享镜像都必须在某个共享池中
#默认ceph提供了一个名称为rbd的共享池.

[root@node1 ~]# ceph osd lspools
#查看共享池,默认有一个名称为rbd的共享池

[root@node1 ~]# rbd list
#查看共享镜像(默认为空)

[root@node1 ~]# rbd create  jacob  \
--image-feature layering  --size 5G
#create创建共享镜像,名称为jacob,名称可以任意
#该共享支持分层快照的功能,共享大小为5G,大小可以任意.
#创建的jacob共享镜像默认在rbd池.
[root@node1 ~]# rbd list

[root@node1 ~]# rbd info jacob

[root@node1 ~]# rbd create  rbd/xyz  \
--image-feature layering  --size 5G
#可以在创建镜像时指定在哪个共享池中创建镜像

【动态调整共享镜像的大小】
[root@node1 ~]# rbd resize --image jacob --size 10G
[root@node1 ~]# rbd info jacob

[root@node1 ~]# rbd resize --image jacob --size 7G --allow-shrink

【客户端访问共享,客户端主机操作】
#备注:[root@node1 ~]# cat /etc/ceph/ceph.conf
#ceph的配置文件中要求用户访问ceph必须提供密码
#auth_cluster_required = cephx
#auth_service_required = cephx
#auth_client_required = cephx
#这里的cephx是密码占位符,密码占位符不是密码.
#密码在cat /etc/ceph/ceph.client.admin.keyring文件

[root@client ~]# yum -y install ceph-common
[root@client ~]# scp node1:/etc/ceph/ceph.conf  /etc/ceph/
[root@client ~]# scp node1:/etc/ceph/ceph.client.admin.keyring  /etc/ceph/
#备注:客户端有配置文件就知道ceph集群在哪.
#客户端有keyring文件才有权限访问ceph集群.

[root@client ~]# lsblk
[root@client ~]# rbd map jacob            #访问共享
[root@client ~]# lsblk
[root@client ~]# mkfs.xfs /dev/rbd0
[root@client ~]# mount /dev/rbd0   /mnt/
[root@client ~]# echo "hello the world" > /mnt/test.txt


【ceph快照】
[root@node1 ~]# rbd snap ls --image jacob
#查看jacob共享是否有快照

[root@node1 ~]# rbd snap create --image jacob \
--snap jacob-snap1
#通过snap create指令,给jacob镜像创建快照,快照名称为jacob-snap1
#快照名称可以任意.

[root@node1 ~]# rbd snap ls --image jacob

【ceph不支持在线还原快照】

[root@client ~]# rm /mnt/test.txt
[root@client ~]# umount /mnt/

[root@node1 ~]# rbd snap rollback --image jacob \
--snap jacob-snap1
#通过rollback指令还原快照

[root@client ~]# mount /dev/rbd0 /mnt/
[root@client ~]# ls  /mnt/

[root@client ~]# rbd showmapped



【基于快照创建一个新共享镜像image】
[root@node1 ~]# rbd snap ls --image jacob
SNAPID NAME           SIZE
 4 jacob-snap1 7168 MB
#查看快照,发现jacob镜像有一个快照.快照名称为jacob-snap1

[root@node1 ~]# rbd snap protect \
--image jacob --snap jacob-snap1
#保护快照,对jacob共享盘的jacob-snap1这个快照进行保护.

[root@node1 ~]# rbd snap rm --image jacob --snap jacob-snap1
#删除快照演示,会出错.

[root@node1 ~]# rbd clone jacob --snap jacob-snap1 kelong --image-feature layering
[root@node1 ~]# rbd list
[root@node1 ~]# rbd info kelong            #可以查看到快照的信息
[root@node1 ~]# rbd flatten kelong        #把镜像与快照分离
[root@node1 ~]# rbd info kelong            #一个独立的镜像盘

[root@node1 ~]# rbd snap unprotect --image jacob --snap jacob-snap1
#取消对快照的保护
[root@node1 ~]# rbd snap rm --image jacob --snap jacob-snap1
#删除快照
[root@node1 ~]# rbd snap list --image jacob
#查看快照


【客户端取消挂载】
[root@client ~]# rbd showmapped

[root@client ~]# umount  /dev/rbd0
[root@client ~]# rbd unmap  jacob
#通过共享名称卸载
[root@client ~]# rbd unmap  /dev/rbd1
#通过设备名卸载

存储分类:
1)DAS直连存储[硬盘]
2)NAS网络附加存储[NFS,Samba…] 提供文件系统共享
3)SAN存储区域网络[iSCSI…] 提供块共享
4)分布式存储

备注:文件系统(ext3,ext4,xfs,ntfs,fat32)

常见的分布式存储:
Hadoop
Lustre
FastDFS
GlusterFS
Ceph(提供块、文件系统、对象存储)

Ceph核心组件:
MON监控组件(ceph-mon)监控和绘制地图
OSD存储设备(ceph-osd)提供共享容量
MDS文件系统(ceph-mds)
Radowsgateway对象存储(ceph-radosgw)

ceph的存储默认会提供3副本,所以OSD至少3台
MON有一个过半原则,所以至少3台

ceph提供:高可用、高性能、高可扩展行

【准备环境】4台虚拟机,1台做客户端,3台做ceph存储集群
主机名    IP地址
client      192.168.4.10/24
node1      192.168.4.11/24
node2     192.168.4.12/24
node3     192.168.4.13/24
修改主机名,配置IP地址.

把四台虚拟机全部关机.
每台虚拟机都添加一个光驱.做如下相同操作:
右击虚拟机,选【设置】---【添加】---【CD|DVD驱动器】--【完成】
点击刚刚新建的光盘[CD|DVD],勾选使用ISO映像文件--[浏览]
找到自己真机的ceph10.iso加载即可.

【重要提醒】添加新的光驱后,新添加的光驱是第一个光驱
之前的光驱变成了第二个光驱!!!!


给node1,node2,node3做ceph集群的3台主机添加磁盘
每个虚拟机加2个20G的磁盘.
右击虚拟机,选【设置】---【添加】---【磁盘】--【下一步】
【下一步】---大小【20G】---【下一步】--【完成】

备注:同样的操作在3台虚拟机上都做2遍。

启动所有虚拟机后,查看磁盘情况:
[root@client ~]# lsblk
[root@node1 ~]# lsblk
[root@node2 ~]# lsblk
[root@node3 ~]# lsblk


【重新挂载光盘,所有4台虚拟机操作】
[root@client ~]# umount /dev/sr0
[root@client ~]# umount /dev/sr1    #未挂载的话会报错
#备注:284M左右的光盘是Ceph光盘,8G的光盘是系统光盘.
[root@client ~]# mkdir /ceph
[root@client ~]# vim /etc/fstab
/dev/sr0    /ceph     iso9660   defaults   0  0
/dev/sr1    /media    iso9660   defaults   0  0
[root@client ~]# mount -a
[root@client ~]# lsblk
#确认284M光盘挂载到ceph目录,8G光盘挂载到/media目录.




[root@node1 ~]# umount /dev/sr0
[root@node1 ~]# umount /dev/sr1
[root@node1 ~]# mkdir /ceph
[root@node1 ~]# vim /etc/fstab
/dev/sr0    /ceph     iso9660   defaults   0  0
/dev/sr1    /media    iso9660   defaults   0  0
[root@node1 ~]# mount -a


[root@node2 ~]# umount /dev/sr0
[root@node2 ~]# umount /dev/sr1
[root@node2 ~]# mkdir /ceph
[root@node2 ~]# vim /etc/fstab
/dev/sr0    /ceph     iso9660   defaults   0  0
/dev/sr1    /media    iso9660   defaults   0  0
[root@node2 ~]# mount -a


[root@node3 ~]# umount /dev/sr0
[root@node3 ~]# umount /dev/sr1
[root@node3 ~]# mkdir /ceph
[root@node3 ~]# vim /etc/fstab
/dev/sr0    /ceph     iso9660   defaults   0  0
/dev/sr1    /media    iso9660   defaults   0  0
[root@node3 ~]# mount -a


【所有主机配置yum源,4台虚拟机做相同操作】
[root@client ~]# cd /etc/yum.repos.d/
[root@client yum.repos.d]# cat dvd.repo  #原本配置好的系统YUM
[centos]
name=centos
baseurl=file:///media/
gpgcheck=0
[root@client yum.repos.d]# vim ceph.repo    #新建yum配置
[mon]
name=mon
baseurl=file:///ceph/MON
gpgcheck=0
[osd]
name=osd
baseurl=file:///ceph/OSD
gpgcheck=0
[tools]
name=tools
baseurl=file:///ceph/Tools
gpgcheck=0
[root@client yum.repos.d]# yum repolist

[root@client yum.repos.d]# scp ceph.repo 192.168.4.11:/etc/yum.repos.d/
[root@client yum.repos.d]# scp ceph.repo 192.168.4.12:/etc/yum.repos.d/
[root@client yum.repos.d]# scp ceph.repo 192.168.4.13:/etc/yum.repos.d/


【ssh密钥,实现无密码连接】
#备注:我们需要找一台主机出来,后面的很多早在都是需要重复的
#很多操作都需要远程操作,
#所以需要找一台主机,让他可用无密码远程所有主机,包括远程自己.
#这台主机可用是任意主机(这里假设我们选择的是node1)

[root@node1 ~]# ssh-keygen
[root@node1 ~]# for i in 10 11 12 13
 do
    ssh-copy-id  192.168.4.$i
 done
#会提示yes/no,输入yes,会提示输入密码,输入系统密码即可.


【修改主机名解析,仅在node1操作】
[root@node1 ~]# vim /etc/hosts
#在该文件中手动添加如下内容:
192.168.4.10  client
192.168.4.11  node1
192.168.4.12  node2
192.168.4.13  node3
#【注意:这里解析的名称必须跟对应电脑的主机名称一致】
[root@node1 ~]# for i in client node1 node2 node3
 do
    scp  /etc/hosts  $i:/etc/
 done
#备注:
#/etc/hostname是主机名,/etc/hosts是本地域名解析
#hostname是自己识别的名称,hosts是识别自己和其他主机的解析名称


【配置NTP时间同步:Ceph要求所有主机时间必须一致】
使用node1做时间服务器,其他所有主机与node1同步时间
#仅node1操作
1)配置时间服务器
[root@client ~]#  yum -y install chrony
[root@client ~]# vim /etc/chrony.conf
allow 192.168.4.0/24        #修改26行
local stratum 10            #修改29行(去注释即可) stratum 译为:层
[root@client ~]# systemctl restart chronyd

[root@client ~]# firewall-cmd --set-default-zone=trusted
[root@client ~]# sed -i ‘/SELINUX/s/enforcing/permissive/’ /etc/selinux/config
[root@client ~]# setenforce 0

2)配置NTP客户端
[root@node1 ~]# for i in node1  node2  node3
do
    ssh  $i  "yum -y install chrony"
done
[root@node1 ~]# for i in  node1  node2  node3
 do
    ssh $i  "sed -i '2a server 192.168.4.10 iburst'  /etc/chrony.conf"
    ssh $i  "systemctl  restart chronyd"
 done

“iburst” 选项作用是如果在一个标准的轮询间隔内没有应答,客户端会发送一定数量的包
[root@node1 ~]# for i in node1 node2 node3
do
ssh $i “firewall-cmd --set-default-zone=trusted”
ssh $i “sed -i ‘/SELINUX/s/enforcing/permissive/’ /etc/selinux/config”
ssh $i “setenforce 0”
done

#备注:任意找一台主机验证
[root@node2 ~]# chronyc sources -v

【部署Ceph集群】

1)安装软件包(仅node1主机操作)


[root@node1 ~]# yum -y install ceph-deploy
#仅在node1主机安装(这是一个python脚本,可以自动部署ceph)

[root@node1 ~]# for i in  node1  node2  node3
 do
    ssh $i  "yum -y install ceph-mon ceph-osd ceph-mds ceph-radosgw"
 done

#任意主机验证:
[root@node1 ~]# rpm -qa |grep ceph


2)配置ceph-mon服务[仅node1主机操作]
[root@node1 ~]# mkdir /root/ceph-cluster
[root@node1 ~]# cd /root/ceph-cluster/
#创建任意目录,名称任意,位置任意.
#但是!!!以后但凡执行ceph-deploy这个脚本,必须先cd到该目录.

++++++++++++++++++++++++++++++++++

此时推荐:给虚拟机快照

++++++++++++++++++++++++++++++++++

[root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3
#在当前目录下生成ceph.conf主配置文件,
#ceph mon集群由node1,node2,node3组成
[root@node1 ceph-cluster]# cat ceph.conf    #输出结果如下:
[global]
fsid = bf92e6da-2d17-4bfd-ab01-917d3d3690c1
mon_initial_members = node1, node2, node3
mon_host = 192.168.4.11,192.168.4.12,192.168.4.13
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

#备注:默认ceph启动服务时会到/etc/ceph/目录去读取配置文件
#但是,ceph-deploy把ceph.conf创建到了当前目录
#接下来需要把当前目录的配置文件拷贝到/etc/ceph/目录
#然后启动ceph-mon服务.

[root@node1 ceph-cluster]# ceph-deploy mon create-initial
#脚本自动拷贝配置文件,自动启动所有主机的ceph-mon服务

[root@node1 ceph-cluster]# ceph -s        #验证
  cluster bf92e6da-2d17-4bfd-ab01-917d3d3690c1
 health HEALTH_ERR
        64 pgs are stuck inactive for more than 300 seconds
        64 pgs stuck inactive
        no osds
 monmap e1: 3 mons at {node1=192.168.4.11:6789/0,node2=192.168.4.12:6789/0,node3=192.168.4.13:6789/0}
        election epoch 4, quorum 0,1,2 node1,node2,node3
 osdmap e1: 0 osds: 0 up, 0 in
        flags sortbitwise
  pgmap v2: 64 pgs, 1 pools, 0 bytes data, 0 objects
        0 kB used, 0 kB / 0 kB avail
              64 creating

(在每个虚拟机主机查看自己的服务,各看各的)
[root@node1 ceph-cluster]# systemctl status ceph-mon@node1
[root@node2 ceph-cluster]# systemctl status ceph-mon@node2
[root@node3 ceph-cluster]# systemctl status ceph-mon@node3
#备注:管理员可以自己启动、重启、关闭,查看状态.


3)配置OSD服务,共享磁盘(仅在node1主机操作)
[首先需要初始化清空所有磁盘]
[root@node1 ceph-cluster]# for i in node1 node2 node3
 do
    ssh  $i  "lsblk"
 done
#再次确认每台虚拟机是否有共享用的磁盘
#vmware里面是sdb和sdc,kvm里面是vdb和vdc.

#备注:sdb作缓存盘,sdc作数据盘
#client------[缓存盘512G]-------[数据盘5T]
#在生成环境中缓存盘必须使用SSD固态盘,数据盘可以是传统磁盘.

[root@node1 ceph-cluster]# ceph-deploy disk zap  node1:sdb
[root@node1 ceph-cluster]# ceph-deploy disk zap  node1:sdc
[root@node1 ceph-cluster]# ceph-deploy disk zap  node2:sdb
[root@node1 ceph-cluster]# ceph-deploy disk zap  node2:sdc
[root@node1 ceph-cluster]# ceph-deploy disk zap  node3:sdb
[root@node1 ceph-cluster]# ceph-deploy disk zap  node3:sdc

++++++++++++++++++++++++++++++++++

此时推荐:给虚拟机快照

++++++++++++++++++++++++++++++++++

#启动ceph-osd服务,把磁盘共享出去(仅在node1主机操作)#
#提示:只要执行ceph-deploy脚本,必须先cd到ceph-cluster目录

#[root@node1 ceph-cluster]# ceph-deploy osd create  node1:sdc node1:sdb  node2:sdc node2sdb  node3:sdc node3:sdb
#远程node1、node2、node3
#启动3台主机的ceph-osd服务,把sdc共享出去,sdb作为缓存盘.

[root@node1 ceph-cluster]# ceph -s
cluster bf92e6da-2d17-4bfd-ab01-917d3d3690c1
 health HEALTH_OK
 monmap e1: 3 mons at {node1=192.168.4.11:6789/0,node2=192.168.4.12:6789/0,node3=192.168.4.13:6789/0}
        election epoch 12, quorum 0,1,2 node1,node2,node3
 osdmap e14: 3 osds: 3 up, 3 in
        flags sortbitwise
  pgmap v29: 64 pgs, 1 pools, 0 bytes data, 0 objects
        100 MB used, 61306 MB / 61406 MB avail
              64 active+clean

常见错误:
使用osd create创建OSD存储空间时,如提示下面的错误提示:
[ceph_deploy][ERROR ] RuntimeError: bootstrap-osd keyring not found; run 'gatherkeys'
解决方法如下:
[root@node1 ceph-cluster]#  ceph-deploy gatherkeys node1 node2 node3


#备注:检查的命令
[root@node1 ceph-cluster]# ceph osd tree
#查看有几个osd,分别在哪些主机,服务状态


#在三台不同的主机查看服务状态,可以开启,关闭,重启服务.
[root@node1 ~]# systemctl status ceph-osd@0
[root@node2 ~]# systemctl status ceph-osd@1
[root@node3 ~]# systemctl status ceph-osd@2
#提醒:这些服务在30分钟只能启动3次,超过就报错.
#在这个文件中有定义/usr/lib/systemd/system/ceph-osd@.service

【创建共享,客户端访问:块共享】

#备注:ceph有一个共享池的概念以及共享镜像的概念.
#共享镜像就是最终提供给用户访问的共享盘
#所有共享镜像都必须在某个共享池中
#默认ceph提供了一个名称为rbd的共享池.

[root@node1 ~]# ceph osd lspools
#查看共享池,默认有一个名称为rbd的共享池

[root@node1 ~]# rbd list
#查看共享镜像(默认为空)

[root@node1 ~]# rbd create  jacob  \
--image-feature layering  --size 5G
#create创建共享镜像,名称为jacob,名称可以任意
#该共享支持分层快照的功能,共享大小为5G,大小可以任意.
#创建的jacob共享镜像默认在rbd池.
[root@node1 ~]# rbd list

[root@node1 ~]# rbd info jacob

[root@node1 ~]# rbd create  rbd/xyz  \
--image-feature layering  --size 5G
#可以在创建镜像时指定在哪个共享池中创建镜像

【动态调整共享镜像的大小】
[root@node1 ~]# rbd resize --image jacob --size 10G
[root@node1 ~]# rbd info jacob

[root@node1 ~]# rbd resize --image jacob --size 7G --allow-shrink

【客户端访问共享,客户端主机操作】
#备注:[root@node1 ~]# cat /etc/ceph/ceph.conf
#ceph的配置文件中要求用户访问ceph必须提供密码
#auth_cluster_required = cephx
#auth_service_required = cephx
#auth_client_required = cephx
#这里的cephx是密码占位符,密码占位符不是密码.
#密码在cat /etc/ceph/ceph.client.admin.keyring文件

[root@client ~]# yum -y install ceph-common
[root@client ~]# scp node1:/etc/ceph/ceph.conf  /etc/ceph/
[root@client ~]# scp node1:/etc/ceph/ceph.client.admin.keyring  /etc/ceph/
#备注:客户端有配置文件就知道ceph集群在哪.
#客户端有keyring文件才有权限访问ceph集群.

[root@client ~]# lsblk
[root@client ~]# rbd map jacob            #访问共享
[root@client ~]# lsblk
[root@client ~]# mkfs.xfs /dev/rbd0
[root@client ~]# mount /dev/rbd0   /mnt/
[root@client ~]# echo "hello the world" > /mnt/test.txt


【ceph快照】
[root@node1 ~]# rbd snap ls --image jacob
#查看jacob共享是否有快照

[root@node1 ~]# rbd snap create --image jacob \
--snap jacob-snap1
#通过snap create指令,给jacob镜像创建快照,快照名称为jacob-snap1
#快照名称可以任意.

[root@node1 ~]# rbd snap ls --image jacob

【ceph不支持在线还原快照】

[root@client ~]# rm /mnt/test.txt
[root@client ~]# umount /mnt/

[root@node1 ~]# rbd snap rollback --image jacob \
--snap jacob-snap1
#通过rollback指令还原快照

[root@client ~]# mount /dev/rbd0 /mnt/
[root@client ~]# ls  /mnt/

[root@client ~]# rbd showmapped



【基于快照创建一个新共享镜像image】
[root@node1 ~]# rbd snap ls --image jacob
SNAPID NAME           SIZE
 4 jacob-snap1 7168 MB
#查看快照,发现jacob镜像有一个快照.快照名称为jacob-snap1

[root@node1 ~]# rbd snap protect \
--image jacob --snap jacob-snap1
#保护快照,对jacob共享盘的jacob-snap1这个快照进行保护.

[root@node1 ~]# rbd snap rm --image jacob --snap jacob-snap1
#删除快照演示,会出错.

[root@node1 ~]# rbd clone jacob --snap jacob-snap1 kelong --image-feature layering
[root@node1 ~]# rbd list
[root@node1 ~]# rbd info kelong            #可以查看到快照的信息
[root@node1 ~]# rbd flatten kelong        #把镜像与快照分离
[root@node1 ~]# rbd info kelong            #一个独立的镜像盘

[root@node1 ~]# rbd snap unprotect --image jacob --snap jacob-snap1
#取消对快照的保护
[root@node1 ~]# rbd snap rm --image jacob --snap jacob-snap1
#删除快照
[root@node1 ~]# rbd snap list --image jacob
#查看快照


【客户端取消挂载】
[root@client ~]# rbd showmapped

[root@client ~]# umount  /dev/rbd0
[root@client ~]# rbd unmap  jacob
#通过共享名称卸载
[root@client ~]# rbd unmap  /dev/rbd1
#通过设备名卸载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值