1、搭建方法

-ceph-deploy:官方的部署工具
 -ceph-ansible:红帽的部署工具
 -ceph-chef:利用chef进行自动部署Ceph的工具
 -puppet-ceph:puppet的ceph模块

2、版本

Mimic   13版

3、部署前提

1.关闭SELinux
 
 2.关闭firewalld,并禁止开机自启
 
 3.禁止开机自启
 
 4.网卡 准备两块,一块公网用于对外提供服务,一块私网用于Ceph内部通信以及协调
 
 5.四台虚拟机准备2块500G的硬盘
 
 6.本节搭建共四个节点
 
 7.使用的是ceph-mon1节点作为管理节点

4、Ceph-Deploy

ceph-deploy应该部署在专用的节点,也就是管理节点AdminHost上。
 
 ceph-deploy无法处理客户端工具,如果你需要使用Ceph集群,需要自己安装和配置客户端,这个客户端可能是一个内核模块(librbd),也可能只是一个命令行工具。

5、集群拓扑和网络

Ceph集群内有两类流量:
 
 -Cluster Network:172.17.120.16-19(私网对内访问),集群内部各节点间的通信流量
 -Public Network:172.17.121.16-19(公网对外访问),Ceph对外提供服务的网络
 
 Cluster Network : 172.17.121.0/24
 
 Public Network : 172.17.120.0/24

6、生产环境实现高可用性所推荐的节点数量

Ceph-Mon:3个+
 
 Ceph-Mgr:2个+
 
 Ceph-Mds:2个+

7、Ceph的客户端是直接与OSD进行通信

Ceph的客户端,通过与Mon节点进行通信,获取完整的Cluster Map,然后在客户端本地,用CRUSH算法,根据Cluster Map,以及对应存储池的放置组规则,进行计算,获得所需数据存储于哪些OSD上面,然后直接与OSD建立通信进行读写。
 -mon:提供Ceph集群存储拓扑、数据分布的Cluster Map以及认证,
 -mgr:提供集群数据的收集、检测等功能。
 -mds:CephFS文件系统接口的一个守护进程,
 -rgw:RGW对象存储接口的一个守护进程
 -osd:Object Stroage Device,用于管理Ceph存储数据所用的硬盘设备的一个守护进程。

8、osd的四个状态

up:启动状态
 
 down:停止状态
 
 in:在RADOS集群里面
 
 out:在RADOS集群外边

9、开始

1、绑定hosts
[root@ceph-mon1 ~]# cat /etc/hosts
 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
 ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
 172.17.120.16 ceph-mon1
 172.17.120.17 ceph-mon1
 172.17.120.18 ceph-mon1
 172.17.120.19 ceph-osd4
 
 172.17.121.16 ceph-mon1
 172.17.121.17 ceph-mon1
 172.17.121.18 ceph-mon1
 172.17.121.19 ceph-osd4
2、生成秘钥文件
[root@ceph-mon1 ~]# ssh-keygen -t rsa -P ''
 [root@ceph-mon1 ~]# ssh-copy-id ceph-mon1
 [root@ceph-mon1 ~]# ssh-copy-id ceph-mon2
 [root@ceph-mon1 ~]# ssh-copy-id ceph-mon3
 [root@ceph-mon1 ~]# ssh-copy-id ceph-osd4
3、各节点cephadm用户添加sudo权限
[root@ceph-mon1 ~]# useradd cephadm
 [root@ceph-mon1 ~]# echo '111111' | passwd --stdin cephadm
 [root@ceph-mon1 ~]# echo "cephadm ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephadm
 [root@ceph-mon1 ~]# chmod 0440 /etc/sudoers.d/cephadm
4、在管理节点上以cephadm用户的身份来做各节点ssh免密登录
[cephadm@ceph-mon1 ~]$ ssh-copy-id cephadm@ceph-mon1
 [cephadm@ceph-mon1 ~]$ ssh-copy-id cephadm@ceph-mon2
 [cephadm@ceph-mon1 ~]$ ssh-copy-id cephadm@ceph-mon3
 [cephadm@ceph-mon1 ~]$ ssh-copy-id cephadm@ceph-osd4

10、yum源和初始化准备

1、安装过程中尽量使用阿里云的源,请事先在所有节点上配置好阿里云的ceph源
[root@ceph-mon1 ~] # vi /etc/yum.repos.d/ceph.repo
 [Ceph]
 name=Ceph packages for $basearch
 baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/$basearch
 enabled=1
 gpgcheck=1
 type=rpm-md
 gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
 
 [Ceph-noarch]
 name=Ceph noarch packages
 baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch
 enabled=1
 gpgcheck=1
 type=rpm-md
 gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
 
 [ceph-source]
 name=Ceph source packages
 baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS
 enabled=1
 gpgcheck=1
 type=rpm-md
 gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
2、在所有节点执行:添加到缓存,增加安装速度
yum clearall;yum repolist
 yum clean all;yum makecache fast
3、管理节点安装ceph-deploy
[root@ceph-mon1 ~]# yum install ceph-deploy python-setuptools python2-subprocess32 ceph-common
4、管理节点以cephadm用户身份在家目录建立ceph-cluster目录
[root@ceph-mon1 ~]# su - cephadm
 [cephadm@ceph-mon1 ~]$ mkdir ceph-cluster
5、切换至ceph-cluster目录
[cephadm@ceph-mon1 ~]$ cdceph-cluster/

11、Mon

1、在管理节点以cephadm用户运行
[cephadm@ceph-mon1 ceph-cluster]$ ceph-deploynew ceph-mon1 --cluster-network17.17.121.0/20  --public-network172.17.120.0/20
 # mon节点,可以写第一个,也可以写多个
2、然后在所有节点——mon、mgr、osd都要安装,一定要把源的地址改成阿里云的,不然卡半天,翻墙都没用
[root@ceph-mon1 ~]# yum install ceph ceph-radosgw -y
3、在管理节点以cephadm用户运行
[root@ceph-mon1 ~]# su - cephadm
 [root@ceph-mon1 ~]# cd ceph-cluster
 [cephadm@ceph-mon1 ceph-cluster]$ ceph-deployinstall --no-adjust-reposceph-mon1 ceph-mon2 ceph-mon3 ceph-osd4
4、在管理节点以cephadm用户运行
[cephadm@ceph-mon1 ceph-cluster]$ ceph-deploymon create-initial
 # 这一步其实是在生成keyring文件
5、在管理节点以cephadm用户运行
[cephadm@ceph-mon1 ceph-cluster]$ ceph-deployadmin ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd4
 # 将配置和client.admin秘钥环推送到远程主机。
 # 每次更改ceph的配置文件,都可以用这个命令推送到所有节点上
6、在所有节点以root的身份运行
[root@ceph-mon1 ceph]# setfacl -m u:cephadm:r /etc/ceph/ceph.client.admin.keyring
 # ceph.client.admin.keyring文件是 ceph命令行 所需要使用的keyring文件
 # 不管哪个节点,只要需要使用cephadm用户执行命令行工具,这个文件就必须要让cephadm用户拥有访问权限,就必须执行这一步
 # 这一步如果不做,ceph命令是无法在非sudo环境执行的。

12、Mgr

1、L版本之后Ceph,必须要有一个mgr节点,所以我们在管理节点执行
[root@ceph-mon1 ceph]# su - cephadm
 [cephadm@ceph-mon1 ~]$ cdceph-cluster
 [cephadm@ceph-mon1 ceph-cluster]$ ceph-deploymgr create ceph-mon1
2、执行完成之后,在管理节点查看集群的健康状态,不过,这一步同样需要/etc/ceph/ceph.client.admin.keyring文件
[root@ceph-mon1 ceph]# su - cephadm
 [cephadm@ceph-mon1 ~]$ sudocpceph-cluster/{ceph.client.admin.keyring,ceph.conf} /etc/ceph/
 [cephadm@ceph-mon1 ~]$ ceph-s

13、OSD

1、列出osd节点上的所有可用磁盘
[cephadm@ceph-mon1 ceph-cluster]$ cdceph-cluster/
 [cephadm@ceph-mon1 ceph-cluster]$ ceph-deploydisk list ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd4
 # 要以cephadm用户在~/ceph-cluster/目录下执行
2、清空osd节点上用来作为osd设备的磁盘
[cephadm@ceph-mon1 ceph-cluster]$ lsblk
 NAME           MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
 sr0              11:0    11024M  0rom  
 vda             252:0    0  200G  0disk 
 ├─vda1          252:1    0  400M  0part /boot
 └─vda2          252:2    0199.6G  0part 
 ├─centos-root 253:0    0197.6G  0lvm /
 └─centos-swap 253:1    0    2G  0lvm [SWAP]
 vdb             252:16   0  500G  0disk 
 vdc             252:32   0  500G  0disk 
 
 
 [cephadm@ceph-mon1 ceph-cluster]$ ceph-deploydisk zap ceph-mon1 /dev/vdb /dev/vdc
 [cephadm@ceph-mon1 ceph-cluster]$ ceph-deploydisk zap ceph-mon2 /dev/vdb /dev/vdc
 [cephadm@ceph-mon1 ceph-cluster]$ ceph-deploydisk zap ceph-mon3 /dev/vdb /dev/vdc
 [cephadm@ceph-mon1 ceph-cluster]$ ceph-deploydisk zap ceph-osd4 /dev/vdb /dev/vdc
 # 注意,这里其实是在执行dd命令,执行错了就麻烦打了,全盘清空。
3、创建OSD
[cephadm@ceph-mon1 ceph-cluster]$ ceph-deployosd create ceph-mon1 --data/dev/vdb
 [cephadm@ceph-mon1 ceph-cluster]$ ceph-deployosd create ceph-mon2 --data/dev/vdb
 [cephadm@ceph-mon1 ceph-cluster]$ ceph-deployosd create ceph-mon3 --data/dev/vdb 
 [cephadm@ceph-mon1 ceph-cluster]$ ceph-deployosd create ceph-osd4 --data/dev/vdb
 [cephadm@ceph-mon1 ceph-cluster]$ ceph-deployosd create ceph-mon1 --data/dev/vdc
 [cephadm@ceph-mon1 ceph-cluster]$ ceph-deployosd create ceph-mon2 --data/dev/vdc
 [cephadm@ceph-mon1 ceph-cluster]$ ceph-deployosd create ceph-mon3 --data/dev/vdc
 [cephadm@ceph-mon1 ceph-cluster]$ ceph-deployosd create ceph-osd4 --data/dev/vdc
4、查看集群状态
[cephadm@ceph-mon1 ceph-cluster]$ ceph-s
 # 到这一步其实已经基本能用了
 # 我们来试一下

14、创建一个存储池,要想使用ceph的存储功能,必须先创建存储池

[cephadm@ceph-mon1 ceph-cluster]$ cephosd pool create mypool 6464

15、列出当前集群所有存储池

[cephadm@ceph-mon1 ceph-cluster]$ cephosd pool ls
 [cephadm@ceph-mon1 ceph-cluster]$ radoslspools

16、上传一个文件/etc/issue

[cephadm@ceph-mon1 ceph-cluster]$ radosput issue /etc/issue --pool=mypool

17、获取一个文件

[cephadm@ceph-mon1 ceph-cluster]$ radosgetissue my_issue -pmypool
 # issue是对象的ID
 # my_issue是outfile,即输出文件叫啥名字
 # -p指定存储池

18、删除一个文件

[cephadm@ceph-mon1 ceph-cluster]$ radosrmissue -pmypool

19、列出指定存储池有哪些文件

[cephadm@ceph-mon1 ceph-cluster]$ radosls--pool=mypool

20、查看指定文件在Ceph集群内是怎样做映射的

[cephadm@ceph-mon1 ceph-cluster]$ cephosd map mypool issue
 # mypool是存储池的名称
 # issue是文件的名称
 ceph map信息简要说明
 # pg 1.651f88da (1.1a),表示第1号存储池的1a号pg
 # up Ceph的存储池是三副本存储的,后面的三个数字是存储了此文件的三个osd的编号,p3表示3号osd是主osd
 # acting同理

到此为止,安装已经完成,接下来我们来扩展Ceph集群

21、扩展Ceph集群

1、添加mon节点
# 为了尽量完善一点,我们来演示一下。
 [root@ceph-mon1 ceph]# su - cephadm
 [root@ceph-mon1 ceph]# cd ceph-cluster
 [cephadm@ceph-mon1 ceph-cluster]$ ceph-deploymon add ceph-mon2
 [cephadm@ceph-mon1 ceph-cluster]$ ceph-deploymon add ceph-mon3
2、查看mon的quorum状态
[cephadm@ceph-mon1 ceph-cluster]$ cephquorum_status --formatjson-pretty
3、添加mgr节点,mgr是无状态的
[cephadm@ceph-mon1 ceph-cluster]$ ceph-deploymgr create ceph-mon2
4、查看集群状态
[cephadm@ceph-mon1 ceph-cluster]$ ceph-s

22、删除一个存储池

[cephadm@ceph-mon1 ceph-cluster]$ cephosd pool rmmypool mypool --yes-i-really-really-mean-it
 # 要求存储池的名字要写两遍
 # 后面必须加--yes-i-really-really-mean-it
 # 即便你写那么烦,

23、ceph命令高级玩法

[root@ceph-mon1 ceph]# ceph-deploy install --no-adjust-repos 
 # 装包的时候不更改yum源
 # 如果不指明这个选项,即便你提前配置了阿里云的yum源,它也会改成ceph官方的那个yum源
 
 [root@ceph-mon1 ceph]# ceph-deploy osd create {node} --data /path/to/data --block-db /path/to/db-device --block-wal /path/to/wal-device
 # 创建OSD时,将OSD的三类数据都分开存放——Object Data Blobs、SST文件、wal文件
 # --data选项指定的是Object Data存放的硬盘
 # --block-db选项指定的是SST文件
 # --block-wal选项指定的是wal文件
 
 [root@ceph-mon1 ceph]# ceph-deploy config push ceph-mon1
 # 把ceph.conf配置文件推送到节点上,如果你不特意指明,推送的其实是/home/cephadm/ceph-cluster目录下的ceph.conf文件
 
 [root@ceph-mon1 ceph]# ceph osd pool stats {<poolname>}
 # 查看一个存储池的状态