块存储:比如iscsi 文件存储:NFS/SAMBA 对象存储:都是C/S结构,客户端需要单独安装软件 ceph组件: MON:ceph通过一系列的映射表来监控集群状态,一般来说MON是奇数个 OSD:ceph对象存储设备,它是唯一的真正存储数据的设备。OSD也是一个进程,一般来说OSD关联到集群中的每块物理硬盘。所以集群中有多少块硬盘就有多少个OSD进程。 MDS:元数据服务器。元数据是描述数据的数据。MDS为cephFS维护文件系统结构,存储元数据。 client:需要单独安装组件

环境准备 91 -96 添加的3块盘 90-96 主机网络yum源配置 90-96配置的主机名映射配置 91 能无密码连接本机及其他主机 90主机NTP服务的配置 部署ceph集群 一、准备7台虚拟机(各人喜欢) 1、初始化 node91 192.168.4.91 node92 192.168.4.92 node93 192.168.4.93 node94 192.168.4.94 node95 192.168.4.95 node96 192.168.4.96 client90 192.168.4.90 2、将ceph光盘挂载到物理主机,以便将其作为yum源

~]# tail -1 /etc/fstab /ISO/rhcs2.0-rhosp9-20161113-x86_64.iso /var/ftp/ceph iso9660 defaults 0 0 yum源需要系统光盘和ceph光盘两个源。注意ceph光盘中rhceph-2.0-rhel-7-x86_64/目录有三个子目录MON/OSD/Tools,这是三个源 [root@node91 ~]# vim /etc/yum.repos.d/server.repo [rhel7] name=rhel7 baseurl=ftp://192.168.4.254/rhel7.4 enabled=1 gpgcheck=0 [mon] name=mon baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/MON enabled=1 gpgcheck=0 [osd] name=osd baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/OSD enabled=1 gpgcheck=0 [Tools] name=Tools baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/Tools enabled=1 gpgcheck=0 [root@node1 ~]# yum clean all [root@node1 ~]# yum repolist

3、将node91作为管理节点,为其生成ssh密钥,可以免密登陆其他节点 [root@node91 ~]# ssh-keygen -f /root/.ssh/id_rsa -N '' [root@node91 ~]# for i in {90..96}

do ssh-copy-id 192.168.4.$i done

4、通过hosts文件配置名称解析 [root@node91 ~]# for i in {1..6}

do echo "192.168.4.9$i node9$i" >> /etc/hosts done [root@node91 ~]# echo "192.168.4.90 client90" >> /etc/hosts [root@node91 ~]# for i in {90..96} do scp /etc/hosts 192.168.4.$i:/etc/ done

5、配置192.168.4.90为NTP服务器 [root@client 90~]# yum install -y chrony [root@client 90~]# vim /etc/chrony.conf server 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburst allow 192.168.4.0/24 local stratum 10 [root@client 90~]# systemctl restart chronyd

6、配置node91-node96为ntp客户端 [root@node91 ~]# for i in {91..96}

do ssh node$i yum install -y chrony done [root@node91 ~]# vim /etc/chrony.conf server 192.168.4.10 iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburst [root@node91 ~]# for i in {92..96} do scp /etc/chrony.conf node$i:/etc/ done [root@node91 ~]# for i in {91..96} do ssh node$i systemctl restart chronyd done

7、node91-node96为共享存储提供硬盘,每个节点加三块硬盘,每块盘大小为10GB 8、在node1上安装ceph管理软件ceph-deploy [root@node91 ~]# yum install -y ceph-deploy

9、创建ceph-deploy的工作目录 [root@node91 ~]# mkdir ceph-cluster [root@node91 ~]# cd ceph-cluster 生成管理集群的配置文件和密钥文件 [root@node91 ceph-cluster]# ceph-deploy new node{91,92,93,94,95,96} 为所有节点安装ceph软件包 [root@node91 ceph-cluster]# ceph-deploy install node{91,92,93,94,95,96}

10、初始化mon服务 [root@node91 ceph-cluster]# ceph-deploy mon create-initial

11、为所有节点准备磁盘分区,用来做存储服务器的日志盘 [root@node91 ceph-cluster]# for i in {91..96}

do ssh node$i parted /dev/vdb mklabel gpt ssh node$i parted /dev/vdb mkpart primary 1M 50% ssh node$i parted /dev/vdb mkpart primary 50% 100% done

[root@node91 ceph-cluster]# for i in {91..96}

do ssh node$i lsblk done

[root@node91 ceph-cluster]# for i in {91..96}

do ssh node$i chown ceph.ceph /dev/vdb1 ssh node$i chown ceph.ceph /dev/vdb2 done

[root@node91 ceph-cluster]# for i in {91..96} # 属主属组必须是ceph

do ssh node$i ls -lh /dev/vdb? done 12、配置OSD,初始化磁盘 [root@node91 ceph-cluster]# for i in {91..96} do ceph-deploy disk zap node$i:vdc node$i:vdd done

13、创建OSD存储空间,与日志盘关联(/dev/vdb1作vdc日志盘,/dev/vdb2作vdd日志盘) [root@node91 ceph-cluster]# for i in {91..96}

do ceph-deploy osd create node$i:vdc:/dev/vdb1 node$i:vdd:/dev/vdb2 done

14、查看ceph状态 [root@node91 ceph-cluster]# ceph -s 如果正常的话,可以看到 health HEALTH_OK 如果是health HEALTH_ERR,可以重起服务 [root@node91 ceph-cluster]# for i in {91..96}

do ssh node$i systemctl restart ceph*.service ceph*.target done

使用ceph块设备

1、块设备存在于存储池中,默认ceph集群已有有一个名为rbd的池了 [root@node91 ceph-cluster]# ceph osd lspools 2、在默认池里创建一个名为demo-image的镜像,镜像可以当成远程主机的硬盘 [root@node91 ceph-cluster]# rbd create demo-image --image-feature layering --size 10G

3、指定在rbd这个池中创建一个名为image的镜像 [root@node91 ceph-cluster]# rbd create rbd/image --image-feature layering --size 10G

4、查看镜像信息 [root@node91 ceph-cluster]# rbd ls [root@node91 ceph-cluster]# rbd info image

5、缩减/增容镜像 [root@node91 ceph-cluster]# rbd resize --size 7G image --allow-shrink [root@node91 ceph-cluster]# rbd info image [root@node91 ceph-cluster]# rbd resize --size 15G image [root@node91 ceph-cluster]# rbd info image

6、如果需要使用Ceph的块存储,那么首先要把ceph镜像映射到本地 [root@node91 ceph-cluster]# lsblk # 此时还没有ceph存储 [root@node91 ceph-cluster]# rbd map demo-image #影射 [root@node91 ceph-cluster]# lsblk # 此时多了一个10GB的/dev/rbd0 [root@node91 ceph-cluster]# mkfs.xfs /dev/rbd0 [root@node91 ceph-cluster]# mount /dev/rbd0 /mnt/ [root@node91 ceph-cluster]# df -h /mnt/ [root@node91 ceph-cluster]# cp /etc/hosts /mnt/ # 此步骤只是测试共享存储可用 [root@node91 ceph-cluster]# cat /mnt/hosts

配置ceph客户端 1、安装软件包 [root@client90 ~]# yum install -y ceph-common 2、为了让客户端能够找到集群,需要集群配置文件 [root@node91 ceph-cluster]# scp /etc/ceph/ceph.conf 192.168.4.10:/etc/ceph/ 3、客户端访问集群,需要授权,可以为客户端创建用户,也可以使用默认创建的admin帐户 [root@node91 ceph-cluster]# scp /etc/ceph/ceph.client.admin.keyring 192.168.4.90:/etc/ceph/ 4、使用ceph块设备 [root@client90 ~]# rbd ls [root@client 90~]# rbd map image #影射 [root@client 90~]# mkfs.xfs /dev/rbd0 [root@client 90~]# rbd showmapped # 查看ceph块设备信息 [root@client 90~]# mount /dev/rbd0 /mnt/ [root@client 90~]# echo 'Hello ceph' > /mnt/mytest.txt # 只是测试

查看ceph存储的大小 [root@node91 ceph-cluster]# rados df

管理快照 快照:某一状态点的镜像,将来有任何误操作,都可以通过还原快照来恢复 1、查看image的快照 [root@client 90~]# rbd snap ls image 2、为image创建名为image-snap1的快照 [root@client90 ~]# rbd snap create image --snap image-snap1 [root@client 90~]# rbd snap ls image 3、模拟误删除操作

(1)删除文件 [root@client90 ~]# cat /mnt/mytest.txt Hello ceph [root@client90 ~]# rm -f /mnt/mytest.txt (2)卸载存储并还原快照 [root@client90 ~]# umount /mnt/ [root@client90 ~]# rbd snap rollback image --snap image-snap1 (3)挂载存储,检查数据是否恢复 [root@client90 ~]# mount /dev/rbd0 /mnt/ [root@client90 ~]# ll /mnt/ [root@client90 ~]# cat /mnt/mytest.txt

克隆镜像 1、通过快照进行镜像克隆,首先保护快照 [root@client90 ~]# rbd snap protect image --snap image-snap1 2、创建名为image-clone的克隆镜像 [root@client90 ~]# rbd clone image --snap image-snap1 image-clone --image-feature layering 3、查看克隆镜像与父镜像关系 [root@client90 ~]# rbd info image-clone 4、合并克隆镜像,使之成为一个整体 [root@client90 ~]# rbd flatten image-clone [root@client90 ~]# rbd info image-clone # 已经没有父镜像了

删除操作 1、取消RBD映射 [root@client90 ~]# umount /mnt/ [root@client90 ~]# rbd unmap /dev/rbd/rbd/image [root@client90 ~]# lsblk # 没有rbd0了 2、删除快照 [root@client90 ~]# rbd snap unprotect image --snap image-snap1 [root@client90 ~]# rbd snap rm image --snap image-snap1 3、删除镜像 [root@client90 ~]# rbd list [root@client90 ~]# rbd rm image

常见错误处理 初始化monitor常见错误

如果出现以下错误 :## ceph-deploy mon create-initial [node91][ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory

解决方案: [root@node91 ceph-clu]# vim ceph.conf 最下面加入行: public_network = 192.168.4.0/24 再执行以下命令: [root@host1 ceoh-clu]# ceph-deploy --overwrite-conf config push node91 node92 node93 node94 node95 node96

-#ceph -s 状态不正常 ]#ceph -s
HEALTH_WARN too few PGs per OSD (16 < min 30)

查看rbd pool的PGS ]ceph osd pool get rbd pg_nu 解决办法:修改默认pool rbd的pgs ]ceph osd pool set rbd pg_num 128 set pool 0 pg_num to 128 注意需要把pgp_num也一并修改,默认两个pg_num和pgp_num一样大小均为64,此处也将两个的值都设为128 ]ceph osd pool set rbd pgp_num 128 set pool 0 pgp_num to 128 再次ceph -s

health HEALTH_OK

当发现跟时间相关的错误时可以尝试重新同步所有主机的时间