初识ceph

ceph作为新一代的PB级高可靠性分布存储系统已经流行很长时间了,在研究了glusterfs之后,一直想找个机会研究一下它,这周终于抽出来时间了。

概念

相对于其它分布式存储系统,它开创性地用统一的系统提供了对象、块、和文件存储功能,它可靠性高、管理简便、并且是自由软件。Ceph提供了一个可无限伸缩的Ceph存储集群,它基于RADOSA Scalable, Reliable Storage Service for Petabyte-scale Storage Clusters

ceph_stack.png

从上面Ceph的架构图可以看到,底层都是RADOS,通过不同的Client(RADOSGW、RBD、CEPHFS)让应用上层识别为一个对象存储系统、块设备、Posix兼容的文件,另外LIBRADOS也使得各种开发语言都可以操作RADOS。

Ceph存储集群包含两种类型的守护进程: Ceph监视器、Ceph OSD守护进程。

Ceph监视器维护着集群运行图的主副本。一个监视器集群确保了当某个监视器失效时的高可用性。存储集群客户端向Ceph监视器索取集群运行图的最新副本。

Ceph OSD守护进程检查自身状态、以及其它OSD的状态,并报告给监视器们。同时Ceph OSD守护进程负责将数据存储为扁平的对象。

Ceph客户端和OSD守护进程都用CRUSH算法来计算对象的位置信息,而不是依赖于一个中心化的查询表。与以往方法相比,CRUSH的数据管理机制更好,它很干脆地把工作分配给集群内的所有客户端和OSD来处理,因此具有极大的伸缩性。CRUSH用智能数据复制确保弹性,更能适应超大规模存储。

Ceph存储系统有存储池的概念,它是存储对象的逻辑分区。每个存储池里都有很多归置组PG(Placement Group),CRUSH算法动态地将PG映射到实际的OSD。

Ceph客户端要进行IO读写操作流程如下:

  • Ceph客户端负责把展现给用户的数据格式(一块设备映像、 REST 风格对象、 CephFS 文件系统目录)转换为可存储于 Ceph 存储集群的对象
  • Ceph客户端先连接到某个 Ceph 监视器、获得最新的集群运行图副本
  • Ceph客户端根据对象的ID及存储池的ID计算得出目标PG的ID
  • Ceph客户端得到目标PG的主OSD地址,连接该OSD进行读写操作

ceph_data_op.png

从上面的流程可以看出与glusterfs相比,存储池与OSD之间有PG这么一个中间层。这个中间层使客户端与OSD之间松耦合了,从客户端的角色来看,它只知道对象被存储在某个PG里了,至于对象最终要存储在哪个OSD里它是不感知的。这样当新的OSD上线时,Ceph可以更方便地进行重均衡。

随着OSD数量的增加,一个存储池PG的数量设置将非常重要,它显著地影响着集群的行为、以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。官方还提供了一个工具pgcalc

另外CRUSH算法还支持根据数据存储位置来确定如何存储和检索对象。所以部署一个大规模数据集群的时候,应该好好设计自己的CRUSH图,因为它可以帮助管理 Ceph 集群、提升性能、和保证数据安全性。调整Ceph的CRUSH布局的方法见这里

实操

我是在5台CentOS6上进行Ceph在安装的,部署节点的拓扑结构如下:

预检

所有节点更换软件源

#使用阿里云的centos6软件源镜像
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
#使用阿里云的epel软件源镜像
rpm --import http://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-6
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
#使用阿里云的ceph软件源镜像
rpm --import https://download.ceph.com/keys/release.asc
echo "
[ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-el6/hammer/$basearch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-el6/hammer/noarch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-el6/hammer/SRPMS
enabled=0
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
" > /etc/yum.repos.d/Ceph.repo

所有节点设置NTP时间同步,可参考之前的`私有云数据中心NTP服务搭建`

所有节点上创建ceph操作用户

```bash
useradd -d /home/cephop -m cephop
passwd cephop
#确保cephop用户有sudo权限

同步hosts文件,确保各节点都可以正确解析节点名称

确保admin-node可无密码SSH登录其它节点

#在admin-node节点执行以下操作
su - cephop
ssh-keygen
ssh-copy-id cephop@node1
ssh-copy-id cephop@node2
ssh-copy-id cephop@node3
ssh-copy-id cephop@ceph-client
echo "
Host node1
   Hostname node1
   User cephop
Host node2
   Hostname node2
   User cephop
Host node3
   Hostname node3
   User cephop
Host ceph-client
   Hostname ceph-client
   User cephop
" > ~/.ssh/config

禁用ssh的requiretty特性

设置网络接口开机自启动

关闭防火墙

关闭selinux

管理节点安装ceph-deploy

1

sudo yum install -y ceph-deploy

存储集群安装

mkdir my-cluster
cd my-cluster
ceph-deploy new node1
echo "osd pool default size = 2" >> ceph.conf
ceph-deploy install admin-node node1 node2 node3 ceph-client
ceph-deploy mon create-initial

#在node2, node3上创建上创建osd目录
ssh node2
sudo mkdir /var/local/osd0
exit
ssh node3
sudo mkdir /var/local/osd1
exit

ceph-deploy osd prepare node2:/var/local/osd0 node3:/var/local/osd1
ceph-deploy osd activate node2:/var/local/osd0 node3:/var/local/osd1
ceph-deploy admin admin-node node1 node2 node3
sudo chmod +r /etc/ceph/ceph.client.admin.keyring
ceph health

块设备客户端安装

在管理节点执行下面的命令

ceph-deploy install ceph-client

ceph-deploy admin ceph-client

CentOS6需升级内核才能有brd内核模块,所以在ceph-client上执行下面的命令

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -ivh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install -y  kernel-lt
#修改/boot/grub/menu.lst确保启动后进入新的内核
reboot
#创建块设备映像
rbd create rbd/foo --size 4096
#将块设备映像映射为块设备
sudo rbd map rbd/foo --name client.admin
#格式化块设备
sudo mkfs.ext4 -m0 /dev/rbd1
#后面就可以使用这个块设备了,比如将/dev/rbd1挂载至目录等操作

其它Ceph客户端安装方法类似

总结

  • Ceph概念比较多,内部实现细节有很多精彩的地方,使用前务必要把它的体系结构这一章通读一遍。
  • Ceph推荐的网络方案是区分了公共网与集群网的,这点比glusterfs进步不少。见这里
  • Ceph里可以自定义CRUSH图,这个比glusterfs只能以地理位置分布进行复制的方案还是灵活不少。

参考

http://docs.ceph.org.cn/architecture/ http://docs.ceph.org.cn/start/ http://blog.dnsbed.com/archives/1714

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏tiane12

由IPv6引起的Disucz X3.1卡顿严重CPU100%的问题

2023
来自专栏沃趣科技

ASM 翻译系列第十四弹:ASM Internal Rebalancing act

原作者:Bane Radulovic 译者: 吴 栋 审核: 魏兴华 DBGeeK社群联合出品 Rebalancing act 在ASM中,每...

3705
来自专栏FreeBuf

使用Empire“探索”Windows个人电脑

Empire是针对windows平台的一套渗透工具,包括了从stager生成、提权到渗透维持的一系列功能。笔者早先在试用Empire的过程中发现其不适用于UTF...

1905
来自专栏DeveWork

WordPress在RSS Feed 中输出版权信息

不多说,这个功能主要是为了防止文章被恶意采集而产生的;当然,如果人家是直接复制粘贴来采集你的文章的话,这个功能就没意义了。防得了小偷防不了小人~~下面献上本站D...

2089
来自专栏程序你好

微软放大招?Windows 10 将加入原生虚拟机支持

据外媒报道,微软已经启动内部代号为 “19H1” (也称 Redstone 6)的下一个重大 Windows 10 更新的研发工作。Windows 10 19H...

652
来自专栏Python小屋

Python批量爬取名字中带有中文的pdf文件

在HBuilder中运行后网页地址为http://127.0.0.1:8020/first/index.html?__hbt=1536484051360:

941
来自专栏北京马哥教育

CentOS 与 Ubuntu 有什么不同?

豌豆贴心提醒,本文阅读时间5分钟 Linux 中的可选项似乎“无穷无尽”,因为每个人都可以通过修改一个已经发行的版本或者新的白手起家的版本(LFS) 来构建 ...

5409
来自专栏网络安全防护

Discuz!开源系统如何防御CC攻击?

Discuz!是一套免费的开源建站系统,在国内挺受欢迎的,主要用来搭建社区论坛类的网站。社区论坛类的网站由于流量比较大,很容易遭到DDOS攻击,特别是针对网页的...

1530
来自专栏ytkah

如何在js中将统计代码图标隐藏

  建站时我们都会加一下网站统计,方便把控内容的内容的运营。大部分站长安装的站点统计是第三方统计代码,js形式的,很少用以服务器日志为基础分析的统计。(当然能通...

4327
来自专栏张戈的专栏

CentOS 7.0.1406正式版发布,附更新记录及CentOS7 iso镜像文件下载地址

上次张戈博客刚公布了RHEL7 的最新资讯及下载地址,并且在文章结尾也猜测 centos7 也会即将发布,于是一直持续关注着 Centos 7 的最新动态,前些...

7196

扫码关注云+社区

领取腾讯云代金券