Ceph学习
1 Ceph概述
1.1 什么是分布式存储
- 分布式存储是指一种独特的系统架构,它由一组网络进行通信、为了完成共同的任务而协调工作的计算机节点组成
- 分布式系统是为了用廉价的、普通的机器完成单个计算无法完成的计算、存储任务
- 其目的是利用更多的机器,处理更多的数据
1.2 常见的分布式文件系统
- Lustre
- Hadoop
- FastDFS
- Ceph
- GlusterFS
1.3 什么是Ceph
1.3.1 Ceph简介
- Ceph是一个分布式文件系统
Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。
Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。
1.3.2 Ceph特点
- 具有高扩展、高可用、高性能的特点
- 高性能
- 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。 b.考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。
- 能够支持上千个存储节点的规模,支持TB到PB级的数据。
- 高可用性
- 副本数可以灵活控制。
- 支持故障域分隔,数据强一致性。
- 多种故障场景自动进行修复自愈。
- 没有单点故障,自动管理。
- 高可扩展性
- 去中心化。
- 扩展灵活。
- 随着节点增加而线性增长。
- 特性丰富
- Ceph可以提供对象存储、块存储、文件系统存储
- 支持自定义接口,支持多种语言驱动。
- Ceph可以提供PB级别的存储空间(PB→TB→GB)
- 软件定义存储(Software Defined Storage)作为存储行业的一大发展趋势,已经越来越受到市场的认可
- 过半原则:必须有一半以上的服务器正常,才能使用,搭建集群通常用奇数
1.3.3Ceph组件
- OSD
- 存储设备
- 全称Object Storage Device,也就是负责响应客户端请求返回具体数据的进程。一个Ceph集群一般都有很多个OSD。
- Monitor
- 集群监控组件
- 一个Ceph集群需要多个Monitor组成的小集群,它们通过Paxos同步数据,用来保存OSD的元数据。
- RadosGateway(RGW)
- 对象存储网关
- MDSs
- 存放文件系统的元数据(对象存储和块存储不需要该组件)
- 全称Ceph Metadata Server,是CephFS服务依赖的元数据服务。
- Client
- ceph客户端
2 实验环境准备
- 准备四台虚拟机,其三台作为存储集群节点,一台安装为客户端,实现如下功能:
- 创建1台客户端虚拟机
- 创建3台存储集群虚拟机
- 配置主机名、IP地址、YUM源
- 修改所有主机的主机名
- 配置无密码SSH连接
- 配置NTP时间同步
- 添加额外的光驱(加载ceph10.iso)
- 创建虚拟机磁盘 (额外添加2块20G磁盘)
主机名 | IP地址 |
client | eth0:192.168.4.10/24 |
node1 | eth0:192.168.4.11/24 |
node2 | eth0:192.168.4.12/24 |
node3 | eth0:192.168.4.13/24 |
- 所有主机设置防火墙和SELinux(以client为例)
- 所有主机挂载ceph光盘和系统光盘
- lsblk检查磁盘情况
- 配置无密码连接(包括自己远程自己也不需要密码),在node1操作
- 修改/etc/hosts并同步到所有主机
- 为所有节点配置yum源,并同步到所有主机。
- Client主机配置为NTP服务器,node1,node2,node3做为NTP客户端配置
- 环境准备完成后,关机拍摄快照
3 部署Ceph集群
3.1 安装部署软件ceph-deploy
- 在node1安装部署软件ceph-deploy
- 创建目录(目录名称可以任意,推荐与案例一致)
3.2 部署Ceph 集群
- 给所有节点安装ceph相关软件包。
- 创建Ceph集群配置,在ceph-cluster目录下生成Ceph配置文件(ceph.conf)。
在ceph.conf配置文件中定义monitor主机是谁。
- 初始化所有节点的mon服务,也就是启动mon服务。
拷贝当前目录的配置文件到所有节点的/etc/ceph/目录并启动mon服务。
- 在每个node主机查看自己的服务(注意每台主机服务名称不同)
- 查看ceph集群状态(现在状态应该是health HEALTH_ERR)
常见错误(非必要操作,有错误可以参考):
如果提示如下错误信息:(如何无法修复说明环境准备有问题,需要重置所有虚拟机)[node1][ERROR ] admin_socket: exception getting command descriptions: [Error 2] No such file
解决方案如下(仅在node1操作):
a. 先检查自己的命令是否是在ceph-cluster目录下执行的!!!!如果确认是在该目录下执行的create-initial命令,依然报错,可以使用如下方式修复。[root@node1 ceph-cluster]# vim ceph.conf #文件最后追加以下内容 public_network = 192.168.4.0/24
b. 修改后重新推送配置文件:
[root@node1 ceph-cluster]# ceph-deploy --overwrite-conf config push node1 node2 node3 [root@node1 ceph-cluster]# ceph-deploy --overwrite-conf mon create-initial
c. 如果还出错,可能是准备实验环境时配置的域名解析和主机名不一致!!!
3.3 创建OSD
- 初始化清空磁盘数据(仅node1操作即可)。
初始化磁盘,将所有磁盘分区格式设置为GPT格式(根据实际情况填写磁盘名称)。
- 创建OSD存储空间(仅node1操作即可)
远程所有node主机,创建分区,格式化磁盘,挂载磁盘,启动osd服务共享磁盘。
- 在三台不同的主机查看OSD服务状态,可以开启、关闭、重启服务。
常见错误及解决方法(非必须操作)。
使用osd create创建OSD存储空间时,如提示下面的错误提示:
[ceph_deploy][ERROR ] RuntimeError: bootstrap-osd keyring not found; run ‘gatherkeys’
可以使用如下命令修复文件,重新配置ceph的密钥文件:[root@node1 ceph-cluster]# ceph-deploy gatherkeys node1 node2 node3
3.4 验证测试
- 查看集群状态。
- 常见错误(非必须操作)。
如果查看状态包含如下信息:
clock skew表示时间不同步,解决办法:请先将所有主机的时间都使用NTP时间同步!!!
Ceph要求所有主机时差不能超过0.05s,否则就会提示WARN。
如果状态还是失败,可以尝试执行如下命令,重启所有ceph服务:
3.5 扩展知识:创建ceph用户,查看用户
4 Ceph块存储
- 什么是块存储
- 光盘
- 磁盘
- 分布式块存储
- Ceph
- Cinder
- Ceph块设备也叫做RADOS块设备
- RADOS block device : RBD
- RBD驱动已经很好的集成在了Linux内核中
- RBD提供了企业功能,如快照、COW克隆等等
- RBD还支持内存缓存,从而能够大大的提高性能
4.1 创建镜像
- 查看存储池,默认存储池名称为rbd。
- 创建镜像、查看镜像
4.2 动态调整
- 扩容容量
- 缩小容量
4.3 通过KRBD访问
Linux内核可用直接访问Ceph块存储,KVM可用借助于librbd访问Ceph块存储。
客户端访问结构如图所示
- 客户端通过KRBD访问
- 客户端格式化、挂载分区
4.4 删除镜像
- 客户端撤销磁盘映射
5 块存储应用案例
5.1 创建镜像快照
- 查看镜像快照(默认所有镜像是没有快照的)
- 给镜像创建快照
- 删除客户端写入的测试文件
- 还原快照
5.2 创建快照克隆
- 克隆快照
- 查看克隆镜像与父镜像快照的关系
- 让新克隆的镜像与快照脱离关系
- 删除快照
6 Ceph文件系统
- 块共享,仅允许同时一个客户端访问,无法实现多人同时使用块设备。
- 而Ceph的文件系统共享则允许多人同时使用。
6.1 什么是CephFS
- 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。
- CephFS使用Ceph集群提供与POSIX兼容的文件系统
- 允许Linux直接将Ceph存储mount到本地
6.2 什么是元数据
- 元数据(Metadata)
- 任何文件系统中的数据分为数据和元数据
- 数据是指普通文件中的实际数据
- 而元数据指用来描述一个文件的特征到的系统数据
- 比如:访问权限、文件拥有者以及文件数据库的分布信息(inode)等
6.3 部署元数据服务器
- 使用虚拟机node3,部署MDS节点
主机名称 | IP地址 |
node3 | 192.168.4.13 |
- 要求如下:
IP地址:192.168.4.13
主机名:node3
配置yum源(包括操作系统的源、ceph的源)
与Client主机同步时间
node1允许无密码远程node3
修改node1的/etc/hosts,并同步到所有node主机
部署元数据服务器 - 安装软件
- 登陆node1部署节点操作
- 创建存储池
备注:一个文件系统是由inode和block两部分组成,效果如图-1所示。
inode存储文件的描述信息(metadata元数据),block中存储真正的数据。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GK8GEBN4-1598752772810)(https:#img-blog.csdnimg.cn/20200731140330651.png)]
- PG拓扑
PG是一个逻辑概念,没有对应的物质形态,是为了方便管理OSD而设计的概念。
为了方便理解,可以把PG想象成为是目录,可以创建32个目录来存放OSD,也可以创建64个目录来存放OSD。
6.4 创建Ceph文件系统
6.5 客户端挂载
客户端挂载(客户端需要安装ceph-common,前面已经安装)
7 对象存储服务器
7.1 什么是对象存储
- 对象存储
- 也就是键值存储,通其接口指令,也就是简单的GET、PUT、DEL和其他扩展,向存储服务上传下载数据
- 对象存储中所有数据都被认为是一个对象,所以,任何数据都可以存入对象存储服务器,如图片、视频、音频等
- RGW全称是Rados Gateway
- RGW是Ceph对象存储网关,用于向客户端应用呈现存储界面,提供RESTful API访问接口
7.2 创建对象存储
- 准备实验环境,要求如下:
IP地址:192.168.4.13
主机名:node3
配置yum源(包括操作系统的源、ceph的源)
与Client主机同步时间
node1允许无密码远程node3
修改node1的/etc/hosts,并同步到所有node主机 - 部署RGW软件包
- 新建网关实例
拷贝配置文件,启动一个rgw服务
- 登陆node3验证服务是否启动
- 修改服务端口
7.3 客户端测试
- curl测试
- 使用第三方软件访问
登陆node3(RGW)创建账户
- 客户端安装软件(软件需要自己上网搜索下载)
修改软件配置(注意,除了下面设置的内容,其他提示都默认回车)
- 创建存储数据的bucket(类似于存储数据的目录)
- 测试下载功能
- 测试删除功能