Ceph 概述
随着 OpenStack 日渐成为开源云计算的标准软件栈,Ceph 也已经成为 OpenStack 的首选后端存储。Ceph 是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。
ceph 官方文档 http://docs.ceph.org.cn/
ceph 中文开源社区 http://ceph.org.cn/
Ceph 是一个开源的分布式文件系统。因为它还支持块存储、对象存储,所以很自然的被用做云计算框架 openstack 或 cloudstack 整个存储后端。当然也可以单独作为存储,例如部署一套集群作为对象存储、SAN 存储、NAS 存储等。
ceph 支持
1、对象存储:即 radosgw,兼容 S3 接口。通过 rest api 上传、下载文件。
2、文件系统:posix 接口。可以将 ceph 集群看做一个共享文件系统挂载到本地。
3、块存储:即 rbd。有 kernel rbd 和 librbd 两种使用方式。支持快照、克隆。相当于一块硬盘挂到本地,用法和用途和硬盘一样。比如在 OpenStack 项目里,Ceph 的块设备存储可以对接OpenStack 的后端存储
Ceph 相比其它分布式存储有哪些优点?
1、统一存储
虽然 ceph 底层是一个分布式文件系统,但由于在上层开发了支持对象和块的接口。所以在开源存储软件中,能够一统江湖。至于能不能千秋万代,就不知了。
2、高扩展性
扩容方便、容量大。能够管理上千台服务器、EB 级的容量。
3、可靠性强
支持多份强一致性副本,EC。副本能够垮主机、机架、机房、数据中心存放。所以安全可靠。存储节点可以自动管理、自动修复。无单点故障,容错性强。
4、高性能
因为是多个副本,因此在读写操作时候能够做到高度并行化。理论上,节点越多,整个集群的IOPS 和吞吐量越高。另外一点 ceph 客户端读写数据直接与存储设备(osd) 交互。
Ceph 各组件介绍
Ceph OSDs: Ceph OSD 守护进程(Ceph OSD)的功能是存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他 OSD 守护进程的心跳来向 Ceph Monitors 提供一些监控信息。当Ceph 存储集群设定为有 2 个副本时,至少需要 2 个 OSD 守护进程,集群才能达到 active+clean 状态( Ceph 默认有 3 个副本,但你可以调整副本数)。
Monitors: Ceph Monitor 维护着展示集群状态的各种图表,包括监视器图、 OSD 图、归置组( PG )图、和 CRUSH 图。 Ceph 保存着发生在 Monitors 、 OSD 和 PG 上的每一次状态变更的历史信息(称为 epoch )。
MDSs: Ceph 元数据服务器(MDS)为 Ceph 文件系统存储元数据(也就是说,Ceph 块设备和Ceph 对象存储不使用 MDS )。元数据服务器使得 POSIX 文件系统的用户们,可以在不对 Ceph 存储集群造成负担的前提下,执行诸如 ls、find 等基本命令。
ceph 集群部署实验
主机准备 (禁用 selinux, 关闭防火墙)
centos60 192.168.0.60 admin,osd, mon 作为管理和监控节点
centos70 192.168.0.70 osd,mds
centos80 192.168.0.80 osd,mds
centos90 192.168.0.90 client
前三台服务器增加一块硬盘/dev/sdb 实验, 创建目录并挂载到/var/local/osd{0,1,2}
[root@centos60 ~]# mkfs.xfs /dev/sdb -f -f是强制格式化
[root@centos60 ~]# mkdir /var/local/osd{0,1,2}
[root@centos60 ~]# mount /dev/sdb /var/local/osd0/
[root@centos70 ~]# mkfs.xfs /dev/sdb
[root@centos70 ~]# mkdir /var/local/osd{0,1,2}
[root@centos70 ~]# mount /dev/sdb /var/local/osd1/
[root@centos80 ~]# mkfs.xfs /dev/sdb
[root@centos80 ~]# mkdir /var/local/osd{0,1,2}
[root@centos80 ~]# mount /dev/sdb /var/local/osd2/
编辑 hosts 文件(所有节点需要操作):
可用 hostnamectl set-hostname name 设置主机名
vim /etc/hosts
192.168.0.50 centos50
192.168.0.60 centos60
192.168.0.70 centos70
192.168.0.80 centos80
192.168.0.90 centos90
192.168.0.100 centos100
SSH 免密码登录(所有节点需要操作):
[root@centos60 ~]# ssh-keygen
[root@centos60 ~]# ssh-copy-id centos60
[root@centos60 ~]# ssh-copy-id centos70
[root@centos60 ~]# ssh-copy-id centos80
[root@centos60 ~]# ssh-copy-id centos90
同步时间:
使用互联网上提供的 NTP 服务,把 3 台主机时间保持一致(主机需要可以访问互联网)
yum -y install ntpdate
[root@centos60 ~]# ntpdate ntp1.aliyun.com
[root@centos70 ~]# ntpdate ntp1.aliyun.com
[root@centos80 ~]# ntpdate ntp1.aliyun.com
ntp1.aliyun.com
ntp2.aliyun.com
ntp3.aliyun.com
ntp4.aliyun.com
ntp5.aliyun.com
ntp6.aliyun.com
ntp7.aliyun.com
配置 Ceph 安装源
https://developer.aliyun.com/mirror/
在线安装
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
关闭主节点 ssh 连接询问
[root@centos60 ~]# cp /etc/ssh/ssh_config /etc/ssh/ssh_config.bak![]()
离线安装
创建本地 yum 源

tar xvf ceph10.tar.gz
vim /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=file:///opt/ceph-10
enable=1
gpgcheck=0
复制离线 yum 仓库至 其他机器
[root@centos60 ~]# scp -r /opt/ceph-10/ root@centos70:/opt/
[root@centos60 ~]# scp -r /opt/ceph-10/ root@centos80:/opt/
[root@centos60 ~]# scp -r /opt/ceph-10/ root@centos90:/opt/
[root@centos60 ~]# scp /etc/yum.repos.d/ceph.repo root@centos70:/etc/yum.repos.d/
[root@centos60 ~]# scp /etc/yum.repos.d/ceph.repo root@centos80:/etc/yum.repos.d/
[root@centos60 ~]# scp /etc/yum.repos.d/ceph.repo root@centos90:/etc/yum.repos.d/
[root@centos60 ~]# yum clean all #清空yum缓存,会清空/var/cache/yum/base/packages目录下的rpm包
[root@centos60 ~]# yum makecache #刷新yum缓存
安装 ceph-deploy 管理工具
[root@centos60 ~]# yum -y install ceph-deploy
创建 monitor 服务
[root@centos60 ~]# mkdir /etc/ceph && cd /etc/ceph
[root@centos60 ceph]# ceph-deploy new centos60 #mon 安装在 centos60节点![]()
出现这个报错,原因remoto包需要升级
[root@centos60 ceph]# yum -y install python2-pip
[root@centos60 ceph]# pip install --upgrade remoto
[root@centos60 ceph]# ceph-deploy new centos60
Ceph 配置文件、一个 monitor 密钥环和一个日志文件
修改副本数
[root@centos60 ceph]# vim ceph.conf
#配置文件的默认副本数从 3 改成 2,这样只有两个 osd 也能达到 active+clean 状态,把下面这行加入到[global]段(可选配置)
离线安装 ceph
在所有节点上安装:
yum -y install ceph ceph-radosgw
安装 ceph monito
[root@centos60 ceph]# ceph-deploy mon create centos60
收集节点的 keyring 文件
[root@centos60 ceph]# ceph-deploy gatherkeys centos60
部署 osd 服务
创建 osd
[root@centos60 ceph]# ceph-deploy osd prepare centos60:/var/local/osd0 centos70:/var/local/osd1 centos80:/var/local/osd2
激活 osd
[root@centos60 ceph]# chown -R ceph.ceph /var/local/osd{0,1,2} #先授予权限,否则会出现下面的报错
[root@centos60 ceph]# ceph-deploy osd activate centos60:/var/local/osd0 centos70:/var/local/osd1 centos80:/var/local/osd2
[root@centos70 ~]# chown -R ceph.ceph /var/local/osd{0,1,2}
[root@centos80 ~]# chown -R ceph.ceph /var/local/osd{0,1,2}
[root@centos60 ceph]# ceph-deploy osd activate centos60:/var/local/osd0 centos70:/var/local/osd1 centos80:/var/local/osd2
查看状态:
[root@centos60 ceph]# ceph-deploy osd list centos70 centos80 centos90
统一配置
(用 ceph-deploy 把配置文件和 admin 密钥拷贝到所有节点,这样每次执行 Ceph 命令行时就无需指定 monitor 地址和 ceph.client.admin.keyring 了)
[root@centos60 ceph]# ceph-deploy admin centos60 centos70 centos80 centos90
各节点修改 ceph.client.admin.keyring 权限:
chmod +r /etc/ceph/ceph.client.admin.keyring
查看 osd 状态
ceph -s![]()
部署 mds 服务
[root@centos60 ceph]# ceph-deploy mds create centos70 centos80
查看状态
[root@centos60 ceph]# ceph mds stat
e3:, 2 up:standby
集群状态
[root@centos60 ceph]# ceph -s
cluster 5fdd812d-240a-4047-90ac-0fd6fbccf0c6
health HEALTH_OK
monmap e1: 1 mons at {centos60=192.168.0.60:6789/0}
election epoch 3, quorum 0 centos60
osdmap e15: 3 osds: 3 up, 3 in
flags sortbitwise,require_jewel_osds
pgmap v27: 64 pgs, 1 pools, 0 bytes data, 0 objects
15681 MB used, 45728 MB / 61410 MB avail
64 active+clean
以上基本上完成了 ceph 存储集群的搭建
创建 ceph 文件系统
[root@centos60 ceph]# ceph fs ls
No filesystems enabled
创建存储池
[root@centos60 ceph]# ceph osd pool create cephfs_data 128
pool 'cephfs_data' created
[root@centos60 ceph]# ceph osd pool create cephfs_metadata 128
pool 'cephfs_metadata' created
其中: 128 ,
关于创建存储池
确定 pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值:
*少于 5 个 OSD 时可把 pg_num 设置为 128
*OSD 数量在 5 到 10 个时,可把 pg_num 设置为 512
*OSD 数量在 10 到 50 个时,可把 pg_num 设置为 4096
*OSD 数量大于 50 时,你得理解权衡方法、以及如何自己计算 pg_num 取值
*自己计算 pg_num 取值时可借助 pgcalc 工具
随着 OSD 数量的增加,正确的 pg_num 取值变得更加重要,因为它显著地影响着集群的行为、
以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。
创建文件系统
创建好存储池后,你就可以用 fs new 命令创建文件系统了
[root@centos60 ceph]# ceph fs new 128 cephfs_metadata cephfs_data
new fs with metadata pool 2 and data pool 1
查看创建后的 cephfs
[root@centos60 ceph]# ceph fs ls
name: 128, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
查看mds节点状态
[root@centos60 ceph]# ceph mds stat
e6: 1/1/1 up {0=centos80=up:active}, 1 up:standby
active 是活跃的,另 1 个是处于热备份的状态
多种 Ceph 挂载方式
内核驱动挂载 Ceph 文件系统
创建挂载点
[root@centos90 ~]# mkdir /opt
[root@centos60 ceph]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQCFOaFftj79HRAAVYwwjuKxHKRbMBLE71mieQ==
[root@centos90 ~]# vim /etc/ceph/admin.secret
AQCFOaFftj79HRAAVYwwjuKxHKRbMBLE71mieQ==
挂载
[root@centos90 ~]# mount -t ceph 192.168.0.60:6789:/ /opt -o name=admin,secretfile=/etc/ceph/admin.secret
取消挂载
umount /opt
用户控件挂载 Ceph 文件系统
安装 ceph-fuse
[root@centos90 ~]# yum install -y ceph-fuse
挂载
[root@centos90 ~]# ceph-fuse -m 192.168.0.60:6789 /opt
[root@centos90 ~]# scp /etc/ceph/ceph.client.admin.keyring root@centos90:/etc/ceph
ceph.client.admin.keyring 100% 63 85.0KB/s 00:00
[root@centos90 ~]# scp /etc/ceph/ceph.conf root@centos90:/etc/ceph/
ceph.conf 100% 223 228.8KB/s 00:00 
如果出现以该提示表示你需要使用-o nonempty 进行挂载。原因是/opt 目录不是空的,因为之前挂载到/opt 路径中时会创建一个额外的目录文件夹。所以该提示是为了防止你挂载到存在数据的目录中导致目录中原有数据丢失。
解决方法 2 种
1. 使用-o nonempty 参数挂载
[root@centos90 ~]# ceph-fuse -o nonempty -m 192.168.0.60:6789 /opt
2. 删除目录下的文件
[root@centos90 ~]# rm -rf /opt/*
[root@centos90 ~]# ceph-fuse -m 192.168.0.60:6789 /opt
取消挂载
[root@centos90 ~]# fusermount -u /opt
ceph 在开源社区还是比较热门的,但是更多的是应用于云计算的后端存储。所以大多数在生产环境中使用 ceph 的公司都会有专门的团队对 ceph 进行二次开发,ceph 的运维难度也比较大。但是经过合理的优化之后,ceph 的性能和稳定性都是值得期待的。
清理机器上的 ceph 相关配置:
停止所有进程: 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
本文详细介绍了Ceph分布式存储的部署过程,包括Ceph概述、集群部署实验和多种挂载方式。Ceph以其统一存储、高扩展性和可靠性成为OpenStack的首选后端存储。文章涵盖了从主机准备、安装Ceph守护进程到创建和激活OSD服务的步骤,以及MDSs和Monitors的配置,最后讨论了如何挂载Ceph文件系统。

16万+

被折叠的 条评论
为什么被折叠?



