CentOS 7部署Ceph集群及CephFS文件系统

一, Ceph简介
1.1基本介绍
Ceph是一个可靠地、自动重均衡、自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备存储和文件系统服务。Ceph 存储是一种可大规模扩展的可编程存储平台,支持云基础架构、媒体存储库、备份和恢复系统、数据湖。它具备诸多优势:摆脱对基于硬件的专有存储解决方案的依赖;将劳动力和存储成本整合到一个多功能解决方案中;提供现代化工作负载所需的经济高效扩展。

Ceph主要提供以下三个存储服务:

  • 对象存储(Object Storage),既可以通过使用Ceph的库,利用C, C++, Java, Python, PHP代码,也可以通过Restful网关以对象的形式访问或存储数据,兼容亚马逊的S3和OpenStack的Swift。
  • 块存储(Block Storage),作为块设备像硬盘一样直接挂载。
  • 文件系统(File System) ,如同网络文件系统一样挂载,兼容POSIX接口。

1.2 Ceph 核心组件
Ceph的核心组件包括Ceph OSD、Ceph Monitor和Ceph MDS。

  • OSD:OSD的英文全称是Object Storage Device,它的主要功能是存储数据、复制数据、平衡数据、恢复数据等,与其它OSD间进行心跳检查等,并将一些变化情况上报给Ceph Monitor。一般情况下一块硬盘对应一个OSD,由OSD来对硬盘存储进行管理,当然一个分区也可以成为一个OSD。伴随OSD的还有一个概念叫做Journal盘,一般写数据到Ceph集群时,都是先将数据写入到Journal盘中,然后每隔一段时间比如5秒再将Journal盘中的数据刷新到文件系统中。一般为了使读写时延更小,Journal盘都是采用SSD,一般分配10G以上,当然分配多点那是更好,Ceph中引入Journal盘的概念是因为Journal允许Ceph OSD功能很快做小的写操作;一个随机写入首先写入在上一个连续类型的journal,然后刷新到文件系统,这给了文件系统足够的时间来合并写入磁盘,一般情况下使用SSD作为OSD的journal可以有效缓冲突发负载
  • Ceph Monitor:由该英文名字我们可以知道它是一个监视器,负责监视Ceph集群,维护Ceph集群的健康状态,同时维护着Ceph集群中的各种Map图,比如OSD Map、Monitor Map、PG Map和CRUSH Map,这些Map统称为Cluster Map,Cluster Map是RADOS的关键数据结构,管理集群中的所有成员、关系、属性等信息以及数据的分发,比如当用户需要存储数据到Ceph集群时,OSD需要先通过Monitor获取最新的Map图,然后根据Map图和object id等计算出数据最终存储的位置。
  • Ceph MDS:MDS全称是Ceph MetaData Server,Osd 是存储数据和元数据的实际存储节点。主要保存的文件系统服务的元数据,每个 osd 其实就是一个线程,提供访问本地磁盘的服务。MDS为 Ceph 文件系统存储元数据,也就是说对象存储和块存储设备是不需要使用该服务的。

1.3 Ceph体系架构
从架构图中可以看到最底层的是RADOS,RADOS自身是一个完整的分布式对象存储系统,它具有可靠、智能、分布式等特性,Ceph的高可靠、高可拓展、高性能、高自动化都是由这一层来提供的,用户数据的存储最终也都是通过这一层来进行存储的,RADOS可以说就是Ceph的核心。RADOS系统主要由两部分组成,分别是OSD和Monitor。

基于RADOS层的上一层是LIBRADOS,LIBRADOS是一个库,它允许应用程序通过访问该库来与RADOS系统进行交互,支持多种编程语言,比如C、C++、Python等。

基于LIBRADOS层开发的又可以看到有三层,分别是RADOSGW、RBD和CEPH FS。

  • RADOSGW:RADOSGW是一套基于当前流行的RESTFUL协议的网关,并且兼容S3和Swift
  • RBD:RBD通过Linux内核客户端和QEMU/KVM驱动来提供一个分布式的块设备
  • CEPH FS:CEPH FS通过Linux内核客户端和FUSE来提供一个兼容POSIX的文件系统

二, 安装规划
2.1 安装环境
本次测试环境采用虚拟机的形式进行安装,一共部署了5台ceph节点,操作系统采用CentOS 7.5。另外还有一台虚拟做为验证节点,安装的OS为Ubuntu Desktop 16.04。
由于Ceph的安装需要安装大量的依赖包,所以在本环境中所有VM都可以访问互联网以便自动下载安装所需的依赖。如果安装环境不可访问互联网,需要解决大量的依赖关系,手动下载安装大量RPM包,工作量巨大,所以建议在安装时保证互联网是可以访问的。

2.2 节点规划

节点 Hostname IP地址 属性
Deploy节点 ceph-manage 192.168.137.10 ceph-deploy
Monitor节点 mon1 192.168.137.11 monitor
OSD节点 osd1 192.168.137.12 osd, mds
OSD节点 osd2 192.168.137.13 osd
OSD节点 osd3 192.168.137.14 osd

三, 环境准备
3.1 虚拟机准备
部署5台虚拟机,然后按规划修改IP地址,注意IP地址要使用固定IP方式,不要使用DHCP。然后修改hostname, hostname按自己需求来改,主要是易于识别主机的属性。最后确保5台虚拟机之间可以相互ping通。

3.2 创建用户
分别在5个节点上创建ceph用户,并赋予root权限。这里我们新建的用户名是cephuser
3.2.1创建用户:
adduser -d /home/cephuser -m cephuser
passwd cephuser

3.2.2赋予root权限
echo “ceph ALL = (root) NOPASSWD:AL” | sudo tee /etc/sudoers.d/ceph
chomod 0440 /etc/sudoers.d/ceph
sed -i s’/Defaults requiretty/#Defaults requiretty’/g /etc/sudoers

3.3 修改hosts文件
修改deploy节点的hosts文件,如下图:
vim /etc/hosts

3.4 设置无密码访问
设置deploy节点无密码访问其他节点
su – cephuser
ssh-keygen

ssh-copy-id ceph-manage
ssh-copy-id mon1
ssh-copy-id osd1
ssh-copy-id osd2
ssh-copy-id osd3

3.5 修改deploy节点上的~/.ssh/config文件如下图:
vim ~/.ssh/config
chmod 644 ~/.ssh/config

3.6 安装并配置NPT服务
3.6.1如果节点可以访问互联网,则分别在5台节点上按如下方式配置NTP服务。
yum install -y ntp ntpdate ntp-doc
ntpdate 0.us.pool.ntp.org
hwclock –systohc
systemctl enable ntpd.service
systemctl start ntpd.service

3.6.2如果你的部署环境无法访问互联网并且没有NTP服务器,那么你需要配置一台本地NTP服务器,可以将deploy节点部署为NTP server,在deploy节点上将NTP server指向自己,其它节点都配置NTP server为deploy节点。

3.7 关闭防火墙 & selinux
注意:这里是演示环境,所以为了方便,直接将防火墙和selinux关闭了。如果是正式的使用环境,不建议这么操作。在正式环境中,对于 RHEL 7 上的 firewalld ,要对公共域开放 Ceph Monitors 使用的 6789 端口和 OSD 使用的 6800:7300 端口范围,并且要配置为永久规则,这样重启后规则仍有效。具体信息可参考红帽的Ceph文档。

firewall-cmd –zone=public –add-port=6789/tcp –permanent
firewall-cmd –zone=public –add-port=6800-7100/tcp –permanent
firewall-cmd –reload

四, 配置ceph的YUM源
4.1删除默认的源
为了加快安装速度,这里我没有使用默认的源。你也可以选择跳过此步,直接使用默认源进行安装
yum clean all
rm -rf /etc/yum.repos.d/*.repo

4.2 下载阿里云的base源
为了加快安装速度,这里我使用的是阿里云的源进行安装,在国内下载速度会比较快。
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

4.3 下载阿里云的epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

4.4 修改repo中centos的版本
这里我使用的是CentOS 7.5, 所以要将版本修改为7.5.1804

4.5 添加ceph源
vim /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
五,    准备磁盘
5.1 说明
ceph节点的硬盘有两种用途,一是安装操作系统,二是作为OSD。建议将操作系统和OSD 守护进程数据分别
放到不同的硬盘。如果必须把数据和系统放在同一硬盘里,最好给数据分配一个单独的分区。 如果OSD的硬
盘使用的不是SSD做journal,ceph-deploy会自动进行分配
节点 磁盘分区
osd1 系统:sda, 数据:sdb, journal: sdc
osd2 系统:sda, 数据:sdb, journal: sdc
osd3 系统:sda, 数据:sdb, journal: sdc
5.2 查看磁盘
在三台osd节点上检查磁盘状态
sudo fdisk -l /dev/sdb
sudo fdisk -l /dev/sdc
5.3 格式化磁盘
在三台osd节点上分别对sdb和sdc进行格式化和建立文件系统的操作,文件系统使用XFS格式。
5.4 查看磁盘格式
六,部署阶段
经过上面的所有准备,现在我们的实验环境已经可以正式开始部署Ceph了。
6.1 安装ceph-deploy
在deploy节点上执行以下命令:
sudo yum update -y && sudo yum install ceph-deploy –y 等待ceph-deploy安装完成。
6.2 创建cluster目录
在deploy节点上执行以下命令:
su – cephuser //注意要以cephsuer身份创建目录
mkdir cluster
cd cluster/
6.3 创建集群
使用 ceph-deploy 的第一步就是新建一个集群,新集群具备:
 一个 Ceph 配置文件
 一个监视器密钥环
Ceph 配置文件至少要包含:
 它自己的文件系统 ID ( fsid )
 最初的监视器及其hostname和IP 地址。
ceph-deploy会用 DNS 把主机名解析为 IP 地址。监视器将被命名为域名的第一段(如前述的 mon1 ),
它会把指定主机名加入 Ceph 配置文件。在deploy节点上执行以下命令,new后面是跟的是monitor节点的
hostname,如果有多个monitor,用空格格开,这里我们只部署一个monitor节点。
ceph-deploy new mon1
6.4 修改ceph.conf文件
vim ceph.conf
Your network address
public network = 192.168.0.0/24 //如果IP不唯一,则需要配置public network参数
osd pool default size = 3 //我们规划了3个osd,所以将其修改为3
6.5 安装ceph
6.5.1在deploy节点上执行以下命令:
ceph-deploy install ceph-manage mon1 osd1 osd2 osd3
这个阶段安装的包比较多,并且要在所有指定的节点上进行安装,所以耗时会比较久。如果部署的节点多,
时间会更长,需要耐心等待其安装完成。
6.5.2 通过观察安装过程, 发现Ceph在安装每个节点的时候,都需要从源下载安装文件,所以比较耗时。
6.5.3 如果你的部署环境无法访问互联网,那么下面这些依赖包就需要手动下载下来,在拷贝到服务器上安
装,在安装的过程中,可能还会提示有这些依赖包还需要其它的依赖包才能安装。总之如果以这种方式安装,
处理这些依赖关系会非常耗费时间和精力。
6.5.4 安装完成
看到这个提示,说明ceph已经安装完成。这里安装的是最新的版本:10.2.11
6.6 初始化monitor
在deploy节点上执行以下命令初始化monitor,并收集所有密钥
ceph-deploy mon create-initial
ceph-deploy gatherkeys mon1
七,添加OSD到集群
7.1 检查OSD节点磁盘
在deploy节点上执行以下命令, 检查OSD节点上所有可用的磁盘
ceph-deploy disk list osd1 osd2 osd3
注:执行这个命令时,我只给OSD节点配置了两个硬盘,所以这里没看到sdc。正常配置时要把所有硬盘都先配
置好。
7.2 删除osd节点上的分区
执行以下命令,使用zap选项删除所有osd节点上的分区
ceph-deploy disk zap osd1:/dev/sdb :/dev/sdc osd2:/dev/sdb :/dev/sdc osd3:/dev/sdb :/dev/sdc
7.3 准备OSD
执行以下命令:
ceph-deploy osd prepare osd1:/dev/sdb :/dev/sdc osd2:/dev/sdb :/dev/sdc osd3:/dev/sdb :/dev/sdc
7.4 激活OSD
执行以下命令,激活所有OSD节点上的硬盘
ceph-deploy osd activate osd1:/dev/sdb1 osd2:/dev/sdb1 osd3:/dev/sdb1
7.5 查看OSD
执行以下命令,查看OSD状态
ceph-deploy disk list osd1 osd2 osd3
显示每个OSD节点上有两个ceph分区
/dev/sdb1 - Ceph Data
/dev/sdc2 - Ceph Journal
7.6 推送配置文件
用 ceph-deploy 把配置文件和 admin 密钥拷贝到管理节点和 Ceph 节点,这样你每次执行 Ceph 命令行
时就无需指定 monitor 地址和 ceph.client.admin.keyring 了
ceph-deploy admin ceph-admin mon1 osd1 osd2 osd3
sudo chmod 644 /etc/ceph/ceph.client.admin.keyring
7.7设置ceph集群自启动
在所有节点上执行以下命令:
sudo systemctl enable ceph-mon.target
sudo systemctl enable ceph-osd.target
sudo systemctl enable ceph.target
7.8检查Ceph状态
到这里ceph就已经安装完成了,可以使用以下命令检查ceph的健康状态。
sudo ceph health
sudo ceph –s
八,配置MDS服务
8.1 部署MDS
在deploy节点上执行以下命令:
ceph-deploy mds create osd1, 这里我们将MDS部署在osd1节点上
8.2验证MDS服务
执行以下命令:
ceph mds stat
九,创建CephFS
9.1 说明
 当前一套集群只能有一个文件系统存在。
 一个 Ceph 文件系统需要至少两个 RADOS 存储池,一个用于数据、一个用于元数据。配置这些存储池
时需考虑:
 为元数据存储池设置较高的副本水平,因为此存储池丢失任何数据都会导致整个文件系统失效。为元数
据存储池分配低延时存储器(像 SSD ),因为它会直接影响到客户端的操作延时。
9.2 创建存储池
执行以下命令:
ceph osd pool create cephfs_data 128 //创建存储数据的存储池,128是PG数量
ceph osd pool create cephfs_metadata 128 //创建存储元数据的存储池
9.3 创建文件系统
执行以下命令:
ceph fs new cephfs_metadata cephfs_data
9.4 查看文件系统
执行以下命令:
ceph fs ls
十,挂载ceph文件系统
10.1 说明
这里我们使用一台安装Ubuntu Desktop桌面系统的VM和挂载我们刚刚创建的ceph文件系统来进行验证。
挂载方式有很多种,比如:内核驱动挂载方式(10.4)和用户控件挂载方式(10.5),我这里使用的方
法是把秘钥copy出来然后直接挂载的(10.6)。
10.2 推送配置文件
在deploy节点上使用ceph-deploy拷贝ceph配置文件以及ceph.client.admin.keyring到osd1节点上面
ceph-deploy admin osd1
10.3 修改keyring文件权限:
sudo chmod +r /etc/ceph/ceph.client.admin.keyring
10.4内核驱动挂载Ceph文件系统
10.4.1 在Ubuntu Desktop上创建挂载点
sudo mkdir -p /mnt/mycephfs
10.4.2 存储密钥
cat /etc/ceph/ceph.client.admin.keyring
将key对应的值复制下来保存到文件:/etc/ceph/admin.secret中。
10.4.3 挂载
sudo mount -t ceph 192.168.137.11:6789:/ /mnt/mycephfs1 -o name=admin,secretfile=/etc/ceph/admin.secret
10.5用户控件挂载Ceph文件系统
10.5.1在Ubuntu Desktop上创建挂载点
sudo mkdir -p /mnt/mycephfs
10.5.2 安装ceph-fuse
sudo yum install -y ceph-fuse
10.5.3挂载
sudo ceph-fuse -m 192.168.137.11:6789 /mnt/mycephfs2
10.6 直接挂载
在Ubuntu 上执行如下图中命令
10.7 查看挂载点
10.8 验证
如下图,使用dd向挂载的目录中写入数据,验证cephfs可以正常工作
十一,参考文档
1,Ceph文档
http://docs.ceph.org.cn/start/intro/
2,Ceph论坛
http://bbs.ceph.org.cn/explore/
3,Ceph开源社区
http://ceph.org.cn/

发表评论