linux运维、架构之路-分布式存储Ceph
一、Ceph介绍
Ceph是一个Linux PB级分布式文件系统,能够在维护POSIX兼容性的同时加入了复制和容错功能。Ceph号称高可用的分布式存储系统,通过多个MON节点(通常为3个)维护集群的状态及元数据信息,而真正存储数据的OSD节点通过向MON节点汇报状态,并通过CRUSH算法将数据副本布局到相应OSD的所在磁盘上,完成数据的持久化存储。为了保证每个数据副本的高可用,通常采用三副本或EC方式。而提供文件服务的mds组件和提供对象存储的rgw组件都不存储实际数据,只是作为服务态进程存在。Ceph可以提供对象存储RODOSGW、块存储RBD、文件系统存储Ceph FS 三种功能。
二、Ceph特点
可轻松扩展到PB容量,对多种工作负载的高性能(每秒输入/输出操作[IOPS]和带宽),高可靠性。Ceph开发了一些非常有趣的概念(例如,动态元数据分区,数据分布和复制)。ceph的设计还保护单一点的故障容错功能,它假设大规模(PB级别存储)存储故障是常见现象而不是例外情况。它的设计并没有假设某种特殊工作负载,但是包括适应变化的工作负载,提供最佳性能的能力。
三、Ceph组件介绍
组件 | 概念 |
---|---|
Monitor | 一个Ceph集群需要多个Monitor组成的小集群,它们通过Paxos同步数据,用来保存OSD的元数据 |
OSD | OSD负责相应客户端请求返回具体数据的进程,一个Ceph集群一般都有很多个OSD |
MSD | MSD 全称Cepg Metadata Service,是CephFs服务依赖的元数据服务 |
Object | Ceph最底层的存储单位是Object对象,每个Object包含元数据和原始数据 |
PG | PG全称Placement Groups,是一个逻辑的概念,一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据 |
RADOS | 是Ceph集群的精华,为用户实现数据分配,Failover等集群操作 |
Libradio | Libradio是Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFs都是通过librados访问的目前提供PHP、Ruby、Java、Python等支持 |
CRUSH | CRUSH是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。 |
RBD | RBD全称RADOS block device,是Ceph对外提供的块设备服务 |
Image | RBD image是简单的块设备,可以直接被mount到主机,成为一个device,用户可以直接写入二进制数据。image的数据被保存为若干个RADOS对象存储中的对象;image的数据空间是thin provision的,意味着Ceph不预分配空间,而是等到实际写入数据时按照object分配空间;每个data object被保存为多份。pool将RBD镜像的ID和name等基本信息保存在rbd_directory中,这样rbd ls命令就可以快速返回一个pool中所有的RBD镜像了 |
RGW | RGW全称RADOS gateway,是Ceph对外提供的对象存储服务,接口与S3和Swift兼容 |
CephFs | CephFs全称Ceph File System,是Ceph对外提供的文件系统服务 |
Pool | pool是Ceph存储时的逻辑分区,它起到namespace的作用 |
四、Ceph部署
1、服务器规划
系统 |
IP地址 |
主机名 |
部署服务 |
配置 |
CentOS 7.5 |
192.168.56.10 |
Ceph-deploy |
Ceph、Ceph-deploy、Mon |
2C/2G |
CentOS 7.5 |
192.168.56.11 |
ceph01 |
Ceph |
2C/2G |
CentOS 7.5 |
192.168.56.12 |
ceph02 |
Ceph |
2C/2G |
2、环境初始化
- Ceph-deploy版本: 1.5.39
- Ceph版本: 10.2.11
- 系统版本:7.5.1804 (Core)
- 内核版本:3.10.0-862.el7.x86_64
①关闭selinux、iptables
systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config setenforce 0
②设置时间同步
yum -y install ntp systemctl enable ntpd systemctl start ntpd ntpdate -u cn.pool.ntp.org hwclock --systohc timedatectl set-timezone Asia/Shanghai
③修改主机名、host
hostnamectl set-hostname Ceph-deploy && bash hostnamectl set-hostname ceph01 && bash hostnamectl set-hostname ceph02 && bash cat >> /etc/hosts <<EOF 192.168.56.10 Ceph-deploy 192.168.56.11 ceph01 192.168.56.12 ceph02 EOF
④设置yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum clean all && yum makecache
⑤设置
成功最有效的方法就是向有经验的人学习!