Ceph中文开源社区地址:​​http://ceph.org.cn/​​​​

Ceph官方文档:​​http://docs.ceph.org.cn/​​​​

ceph理论性的东西这里我就不说了,有兴趣的同学可以去看官方文档,我这就直接上实验过程了~

机器准备

HostName

IP

功能

Ceph1

10.15.5.246

admin,osd,mon

Ceph2

10.15.5.247

osd,mds

Ceph3

10.15.5.248

osd,mds

Ceph4

10.15.5.249

client

环境准备

  1. 创建虚拟机时多添加一块100G 的硬盘,容量不够的可以少一点;
  2. 修改主机名:Ceph{1…4};
  3. 关闭防火墙:systemctl stop/disable firewalld;
  4. 关闭selinux。

添加/etc/hosts
vim /etc/hosts
10.15.5.246 Ceph1
10.15.5.247 Ceph2
10.15.5.248 Ceph3
10.15.5.249 Ceph4
免密互信
# 每台上面操作
ssh-keygen -t rsa
# 互相增加(在Ceph1上+2/3/4 ,以此类推,直到所有可以直接通过主机名ssh)
ssh-copy-id Ceph{2..4}
格式化硬盘,创建osd目录并且挂载

我在创建虚拟机的时候添加了两块硬盘,/dev/sda 以及/dev/sdb,系统安装在/dev/sda上。

## Ceph1上操作
mkfs.xfs /dev/sdb
mkdir /var/local/osd{0..2}
mount /dev/sdb /var/local/osd0/

## Ceph2上操作
mkfs.xfs /dev/sdb
mkdir /var/local/osd{0..2}
mount /dev/sdb /var/local/osd1/

## Ceph3上操作
mkfs.xfs /dev/sdb
mkdir /var/local/osd{0..2}
mount /dev/sdb /var/local/osd2/

PS:以上操作为​临时​挂载,永久挂载需要写入 ​/etc/fstab​

安装ntp,完成时间同步

时间需要完全统一,不然会有问题,最好是职级内网搭建一个时间同步服务~

# 所有节点执行
yum install ntp
ntpdate ntp1.aliyun.com

基本准备工作就到这了~下面开始部署

安装ceph-deploy 管理工具
配置yum源

我这里用的阿里的源

# 基础软件源
cat /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#released updates
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
# Ceph源
[root@Ceph1 ~]# cat /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
priority=1

[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
gpgcheck=0
priority=1

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS
gpgcheck=0
priority=1
# 再安装一个epel源
yum install -y epel-release
yum clean all
yum makecache
安装ceph-deploy 以及开始配置
yum install -y ceph-deploy

创建Monitor服务

mkdir /etc/ceph
cd /etc/ceph
ceph-deploy new Ceph1
## 执行完成后会在当前路径生成以下三个文件,分别为ceph的配置文件、日志文件以及monitor的密钥环文件

内容有点长,我分两次截图了

Centos7 搭建ceph集群_linux

Centos7 搭建ceph集群_centos_02

如果想要修改守护进程数,也就是副本数,可以在ceph.conf配置文件中添加如下内容

osd_pool_default_size = 2  #副本数量
在所有主机上安装ceph
ceph-deploy install Ceph1 Ceph2 Ceph3 Ceph4
# 该命令直接走的官网下载,如果网速慢的可以换成通过阿里源yum下载
yum -y install ceph ceph-radosgw

大概需要几分钟,内容有点多,分三次截图

Centos7 搭建ceph集群_centos_03

Centos7 搭建ceph集群_ceph_04

Centos7 搭建ceph集群_配置文件_05

在管理节点安装Monitor(监控)
# 创建Monitor (监控)
ceph-deploy mon create Ceph1
# 收集keyring(密钥环)信息
ceph-deploy gatherkeys Ceph1

Centos7 搭建ceph集群_ceph_06

Centos7 搭建ceph集群_centos_07

Centos7 搭建ceph集群_ceph_08

创建OSD

在准备过程中已经完成了osd目录的创建以及挂载,这里直接创建osd节点

ceph-deploy osd prepare Ceph1:/var/local/osd0/ Ceph2:/var/local/osd1/ Ceph3:/var/local/osd2/
ls /var/local/osd0/
ceph_fsid fsid magic
# 完成后在各节点对应目录可看到对应文件

Centos7 搭建ceph集群_取值_09

激活OSD
ceph-deploy  osd activate Ceph1:/var/local/osd0/ Ceph2:/var/local/osd1/ Ceph3:/var/local/osd2/
# 这时会有一个报错,报错信息如下:
[Ceph1][WARNIN] 2020-10-22 17:01:52.548400 7f6ef1edbac0 -1 ** ERROR: error creating empty object store in /var/local/osd0/: (13) Permission denied
[Ceph1][WARNIN]
[Ceph1][ERROR ] RuntimeError: command returned non-zero exit status: 1
[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: /usr/sbin/ceph-disk -v activate --mark-init systemd --mount /var/local/osd0/

Centos7 搭建ceph集群_配置文件_10

解决方法:给三个节点的/var/local/osd{0…2}三个文件夹添加777权限即可。

继续执行,无报错

Centos7 搭建ceph集群_取值_11

Centos7 搭建ceph集群_centos_12

查看OSD
ceph-deploy osd list Ceph1 Ceph2 Ceph3

Centos7 搭建ceph集群_centos_13

Centos7 搭建ceph集群_ceph_14

同步配置文件以及密钥

使用命令将配置文件和admin密钥同步到各个节点,以便各个节点使用ceph命令时无需指定Monitor地址和ceph.client.admin.keyring密钥。注意:还需要修改各个节点ceph.client.admin.keyring密钥的权限

ceph-deploy admin Ceph1 Ceph2 Ceph3
chmod +r ceph.client.admin.keyring ## 都执行一下

Centos7 搭建ceph集群_linux_15

查看OSD健康状态
ceph health

Centos7 搭建ceph集群_配置文件_16

部署mds
ceph-deploy mds create Ceph1 Ceph2 Ceph3
ceph mds stat

部分截图

Centos7 搭建ceph集群_ceph_17

Centos7 搭建ceph集群_centos_18

查看集群状态
ceph -s

Centos7 搭建ceph集群_配置文件_19

创建ceph文件系统
# 查看文件系统
ceph fs ls

Centos7 搭建ceph集群_linux_20

创建存储池
ceph osd pool create cephfs_data 128
ceph osd pool create cephfs_metadata 128

Centos7 搭建ceph集群_linux_21

PS:命令最后的128是指定pg_num的值,这个值是不能自动计算的,需要手动赋予。一般来说,少于5个osd时,pg_num可以设置为128;osd在5到10个之间,pg_num可以设置为512;osd在10到50个之间,pg_num可以设置为4096;但是osd一旦超过50个,那么就得自己计算pg_num的取值,也可以借助工具pgcalc计算,网址是​​https://ceph.com/pgcalc/​​。

随着osd数量的增加,正确的pg_num取值变得更加重要,因为它显著地影响着集群的行为、以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。

创建文件系统
ceph fs new 128 cephfs_metadata cephfs_data

Centos7 搭建ceph集群_linux_22

查看节点状态
ceph mds stat

Centos7 搭建ceph集群_linux_23

常用命令
ceph osd pool get [存储池名称] size  //查看存储池副本数
ceph osd pool set [存储池名称] size 3  //修改存储池副本数
ceph osd lspools  //打印存储池列表
ceph osd pool create [存储池名称] [pg_num的取值]  //创建存储池
ceph osd pool rename [旧的存储池名称] [新的存储池名称]  //存储池重命名
ceph osd pool get [存储池名称] pg_num  //查看存储池的pg_num
ceph osd pool get [存储池名称] pgp_num  //查看存储池的pgp_num
ceph osd pool set [存储池名称] pg_num [pg_num的取值]  //修改存储池的pg_num值
ceph osd pool set [存储池名称] pgp_num [pgp_num的取值]  //修改存储池的pgp_num值
查看存储池配额
ceph osd pool get-quota cephfs_metadata

Centos7 搭建ceph集群_centos_24

客户端挂载
方式一
# 创建挂载点
mkdir /ceph

# 获取存储密钥,没有的话重新去manager节点拷贝
[root@Ceph3 ~]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQBXN5Ffe3KNEhAA1vvvpkw9eedD8zF5CmoP4A==

# 将key所在行内容保存到/etc/ceph/admin.secret 文件中
[root@Ceph4 ~]# cat /etc/ceph/admin.secret
AQBXN5Ffe3KNEhAA1vvvpkw9eedD8zF5CmoP4A==
# 挂载
mount -t ceph 10.15.5.246:6789:/ /ceph/ -o name=admin,secretfile=/etc/ceph/admin.secret
df -h

Centos7 搭建ceph集群_配置文件_25

方式二(用户控件挂载ceph文件系统)
# 下载cecph-fuse
yum install -y ceph-fuse

# 挂载
ceph-fuse -m 10.15.5.246:6789 /ceph-2/

# 卸载
fusermount -u /ceph-2

Centos7 搭建ceph集群_ceph_26

Others

怎么卸载~

停止所有进程: stop ceph-all

卸载所有ceph程序:ceph-deploy uninstall [{ceph-node}]

删除ceph相关的安装包:ceph-deploy purge {ceph-node} [{ceph-data}]

删除ceph相关的配置:ceph-deploy purgedata {ceph-node} [{ceph-data}]

删除key:ceph-deploy forgetkeys

卸载ceph-deploy管理:yum -y remove ceph-deploy