主要内容:
Ceph概述、部署Ceph集群、Ceph块存储
一、分布式存储基础
分布式系统(Distributed File System)是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连组成的系统;分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据;
常用分布式文件系统:Lustre、Hadoop、FastDFS、Ceph、GlusterFS
1)Ceph架构简介及使用场景介绍
- Ceph 是一个统一的分布式存储系统,特点具有高性能、高可用性、高可扩展性、特性丰富;
- Ceph 可以提供:对象存储、块存储、文件系统存储;
- Ceph 可以提供PB级别的存储空间(PB->TB->GB,即1024*1024GB=1048576GB)
- 软件定义存储(Software Defined Storage)
- Ceph 帮助手册官网:https://docs.ceph.com、http://docs.ceph.org.cn
2) Ceph特点介绍
① 高性能
- 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。
- 考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。
- 能够支持上千个存储节点的规模,支持TB到PB级的数据。
② 高可用性
- 副本数可以灵活控制。
- 支持故障域分隔,数据强一致性。
- 多种故障场景自动进行修复自愈。
- 没有单点故障,自动管理。
③ 高可扩展性
- 去中心化。
- 扩展灵活。
- 随着节点增加而线性增长。
④ 特性丰富
- 支持三种存储接口:块存储、文件存储、对象存储。
- 支持自定义接口,支持多种语言驱动。
3)Ceph组件
- OSDs(ceph-osd)真实的提供存储空间的硬件设备
作用:共享硬盘,OSD三备份(三副本)
- Monitors(ceph-mon)集群监控组件
作用:带健康检测功能及绘制map地图,MON过半原则(要求超过一半的服务器是正常的,所以服务器数量一般为奇数)
补充:地图内容包括几台主机组成OSD存储、主机IP、共享的存储磁盘等,且实时更新;
- RadosGateway(RGW,ceph-radosgw)对象存储网关
- MDSs(ceph-mds)存放文件系统的元数据(对象存储和块存储不需要该组件)
- Client-ceph(ceph-common)ceph客户端
注意:一个服务器至少需要3个OSD(做OSD的3副本备份);MON至少需要奇数位个服务器(MON过半原则)
扩展:Ceph核心组件及概念介绍(作为参考)
- Monitor:一个Ceph集群需要多个Monitor组成的小集群,它们通过Paxos同步数据,用来保存OSD的元数据。
- OSD:OSD全称Object Storage Device,也就是负责响应客户端请求返回具体数据的进程。一个Ceph集群一般都有很多个OSD。一般配置成和磁盘一一对应,一块磁盘启动一个OSD进程。
- MDS:MDS全称Ceph Metadata Server,是CephFS服务依赖的元数据服务。
- pool:是存储对象的逻辑分区,它规定了数据冗余的类型和对应的副本分布策略;支持两种类型:副本(replicated)和 纠删码( Erasure Code)
- PG:PG全称Placement Grouops归置组,是一个逻辑的概念,一个PG包含多个对象,是对象的集合,该集合里的所有对象都具有相同的放置策略(相同PG内的对象都会放到相同的硬盘上);PG是 ceph的核心概念,服务端数据均衡和恢复的最小粒度就是PG,引入PG这一层其实是为了更好的分配数据和定位数据。
- Object:Ceph最底层的存储单元是Object对象,每个Object包含元数据和原始数据。
- RADOS:RADOS全称Reliable Autonomic Distributed Object Store,是Ceph集群的精华,用户实现数据分配、Failover等集群操作。
- Libradio:Librados是Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的,目前提供PHP、Ruby、Java、Python、C和C++支持。
- CRUSH:CRUSH是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。
- RBD:RBD全称RADOS block device,是Ceph对外提供的块设备服务。
- RGW:RGW全称RADOS gateway,是Ceph对外提供的对象存储服务,接口与S3和Swift兼容。
- CephFS:CephFS全称Ceph File System,是Ceph对外提供的文件系统服务。
OSD存储代表共享的硬盘,MON用来健康检查健康和绘制地图;客户端可访问MON获取MAP地图(元数据),地图内容:主机组成OSD存储、主机IP、共享的存储磁盘信息;
用户端在存储数据时,通过数据切片(默认4M)进行上传;(高性能—>数据切割)
Ceph集群会自动将数据拷贝3份存放,且有寄生作用,当某个存放的服务器宕机通过寄生可以再复制,一般标准3副本(安全性—>3副本拷贝)
CRUSH数据分布算法(Controlled, Scalable, Decentralized Placement of Replicated Data),可控的、可扩展的、分布式的副本数据放置算法,主要目的是为了定位所存储数据的位置;
补充:在Ceph存储中,数据都是以object为基本单位进行存储的,每个object默认为4MB大小;若干个object属于一个PG(Placement Group,归置组);而若干个PG又属于一个OSD;一般来说,一个OSD对应于一块磁盘。PG到OSD的映射的过程算法叫做CRUSH 算法。(一个Object需要保存三个副本,也就是需要保存在三个osd上);
CRUSH算法是一个伪随机的过程,他可以从所有的OSD中,随机性选择一个OSD集合,但是同一个PG每次随机选择的结果是不变的,也就是映射的OSD集合是固定的。
案例1:部署实验环境
案例要求:设置防火墙/SELinux、配置主机名、IP、YUM源、无密码SSH连接、/etc/hosts域名解析、NTP时间同步、添加磁盘
- 1)创建1台客户端虚拟机192.168.4.10,3台存储集群虚拟机192.168.4.11、4.12、4.13
- 3)配置主机名、IP地址、YUM源
- 4)配置无密码SSH连接
- 5)配置NTP时间同步
- 6)添加虚拟机磁盘(为ceph集群作为存储使用)
步骤1:安装前准备
1)为所有节点配置yum源服务器
真机第二阶段素材中ceph10.iso挂载到/var/ftp/ceph目录,为所有虚拟机提供YUM源
[root@localhost 桌面]# mkdir /var/ftp/ceph
[root@localhost 桌面]# mount -t iso9660 /linux-soft/2/ceph10.iso /var/ftp/ceph/
[root@localhost 桌面]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/loop2 284M 284M 0 100% /var/ftp/ceph
[root@localhost 桌面]# vim /etc/fstab
/dev/loop2 /var/ftp/ceph iso9660 defaults 0 0
[root@localhost 桌面]# mount -a
补充:[-t] 选项为指定驱动设备,否则在配置永久挂载时无驱动设备,mount -a会报错;
2)为虚拟机添加磁盘(node1、node2、node3主机操作)
除client客户端,所有3台ceph服务器都添加2块 20G磁盘
[root@node1 ~]# lsblk //查看新增的2块磁盘(以node1为例)
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 30G 0 disk
└─vda1 253:1 0 30G 0 part /
vdb 253:16 0 20G 0 disk
vdc 253:32 0 20G 0 disk
3)所有主机设置防火墙和SELinux(所有主机操作)
[root@client ~]# firewall-cmd --set-default-zone=trusted
[root@client ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config
[root@client ~]# setenforce 0
[root@node1 ~]# firewall-cmd --set-default-zone=trusted
[root@node1 ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config
[root@node1 ~]# setenforce 0
[root@node2 ~]# firewall-cmd --set-default-zone=trusted
[root@node2 ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config
[root@node2 ~]# setenforce 0
[root@node3 ~]# firewall-cmd --set-default-zone=trusted
[root@node3 ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config
[root@node3 ~]# setenforce 0
4)配置SSH无密码连接(node1操作)
配置SSH无密码连接为了同时给其它所有主机远程拷贝文件、安装软件包、启动服务等;
注意:拷贝公钥时,包括node1主机也需要拷贝,实现远程自己不需要密码
[root@node1 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''
[root@node1 ~]# for i in {10..13}
> do
> ssh-copy-id 192.168.4.$i //将密钥传递给192.168.4.10、4.11、4.12、4.13
> done
5)修改/etc/hosts并同步到所有主机(node1操作)
注意:/etc/hosts解析的域名要与本机主机名一致
[root@node1 ~]# vim /etc/hosts //修改文件(不要删除文件原有内容)
...
192.168.4.10 client
192.168.4.11 node1
192.168.4.12 node2
192.168.4.13 node3
将/etc/hosts文件拷贝给所有其他主机(client、node1、node2、node3)
[root@node1 ~]# for i in client node{1..3}
> do
> scp /etc/hosts/ $i:/etc/
> done
6)修改所有节点都需要配置YUM源,并同步到所有主机
注意:由于真机以将ceph10.iso挂载到/var/ftp/ceph目录,且有3个YUM源
[root@node1 ~]# vim /etc/yum.repos.d/ceph.repo //新建YUM源配置文件
[mon]
name=mon
baseurl=ftp://192.168.4.254/ceph/MON
enabled=1
gpgcheck=0
[osd]
name=osd
baseurl=ftp://192.168.4.254/ceph/OSD
enabled=1
gpgcheck=0
[tools]
name=tools
baseurl=ftp://192.168.4.254/ceph/Tools
enabled=1
gpgcheck=0
[root@node1 ~]# yum clean all //清空缓存
[root@node1 ~]# yum repolist //列出yum清单
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
源标识 源名称 状态
local_repo CentOS-7 - Base &nbs