Ceph 分布式存储

块存储:典型设备,磁盘阵列,硬盘

作用:主要是将裸磁盘空间映射给主机使用,磁盘阵列(内含多块硬盘)做RAID操作或者LVM操作,逻辑划分出N块Logic盘并映射给主机使用,操作系统会识别到N块硬盘,但是无法感知到底是逻辑盘还是物理盘,所以还是会对其进行分区和格式化(无法共享数据)。每块逻辑盘实际上是由多块硬盘共同组成,在读写数据的时候,几块物理硬盘可以并行寻址和操作,大大提高了IO效率。
优点:对块磁盘组成逻辑盘,读写效率增加
缺点:相当于自己主机的硬盘,无法进行数据共享

文件存储

典型设备FTP、NFS服务器
优点:克服了块存储文件无法共享的问题
缺点:读写、传输速率低
场景:日志、邮箱、目录结构文件存储
备注:常见的存储中 NFS、NAS也是属于文件系统存储

对象存储

对象存储:也叫做基于对象的存储,是用来描述解决和处理离散单元的方法的通用术语,这些离散单元被称作为对象。
对象存储经常被比作在一家高级餐厅代客停车。当一个顾客需要代客停车时,他就把钥匙交给别人,换来一张收据。这个顾客不用知道他的车被停在哪,也不用知道在他用餐时服务员会把他的车移动多少次。在这个比喻中,一个存储对象的唯一标识符就代表顾客的收据。
优点:综合了块读写高速、文件共享特性
存储数据类型:指非结构化数据,如图片、音视频、文档等
应用场景:即一次写入多次读取。

分布式存储

分布式存储:是将数据分散存储在多台独立的设备上。传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。
1、高可用性,副本数灵活控制,支持故障域分割,数据强一致性,没有单点故障
2、高可扩展性
3、特性丰富
简介:不管是想为云平台提供Ceph 对象存储和/或 Ceph 块设备,还是想部署一个 Ceph 文件系统或者把 Ceph 作为他用,所有 Ceph 存储集群的部署都始于部署一个个 Ceph 节点、网络和 Ceph 存储集群。Ceph 存储集群至少需要一个 Ceph Monitor 和两个 OSD 守护进程。而运行 Ceph 文件系统客户端时,则必须要有元数据服务器( Metadata Server )

Ceph简介

Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。Ceph 存储集群至少需要一个 Ceph Monitor 和两个 OSD 守护进程。而运行 Ceph 文件系统客户端时,则必须要有元数据服务器( Metadata Server )

Ceph优点

1. CRUSH算法

ceph摒弃了传统的集中式存储元数据寻址的方案,转而使用CRUSH算法完成数据的寻址操作。CRUSH在一致性哈希基础上很好的考虑了容灾域的隔离,能够实现各类负载的副本放置规则

2.高可用

Ceph中的数据副本数量可以由管理员自行定义,并可以通过CRUSH算法指定副本的物理存储位置以分隔故障域,支持数据强一致性;ceph可以忍受多种故障场景并自动尝试并行修复。

3 高扩展性

Ceph不同于swift,客户端所有的读写操作都要经过代理节点。一旦集群并发量增大时,代理节点很容易成为单点瓶颈。Ceph本身并没有主控节点,扩展起来比较容易,并且理论上,它的性能会随着磁盘数量的增加而线性增长。

4 特性丰富

Ceph支持三种调用接口:对象存储,块存储,文件系统挂载。三种方式可以一同使用。在国内一些公司的云环境中,通常会采用ceph作为openstack的唯一后端存储来提升数据转发效率。
Ceph的基本组成结构如下图:
分布式存储之Ceph集群介绍搭建 - 图1
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 等基本命令。

部署工作

官网指导部署
https://docs.ceph.com/en/latest/cephadm/install/

1.配置基础环境

准备三台服务器

  1. 192.168.106.100 ceph-admin
  2. 192.168.106.101 ceph-node1
  3. 192.168.106.1002 ceph-node2

2、三台服务器关闭防火墙、核心防护

  1. systemctl stop firewalld
  2. systemctl disable firewalld
  3. setenforce 0
  4. sed -i '7s/enforcing/disabled/' /etc/selinux/config

3、配置hosts

  1. cat /etc/hosts
  2. 192.168.106.100 ceph-admin
  3. 192.168.106.101 ceph-node1
  4. 192.168.106.1002 ceph-node2

4.免密登录

配置互信(各个节点)

  1. ssh-keygen -t rsa
  2. ssh-copy-id ceph-node1
  3. ssh-copy-id ceph-node2

5.配置初始环境

  1. yum -y install wget curl net-tools bash-completion
  2. wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  3. wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

配置ceph源

  1. cat << EOF > /etc/yum.repos.d/ceph.repo
  2. [ceph]
  3. name=Ceph packages for
  4. baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/$basearch
  5. enabled=1
  6. gpgcheck=1
  7. type=rpm-md
  8. gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
  9. priority=1
  10. [ceph-noarch]
  11. name=Ceph noarch packages
  12. baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/
  13. enabled=1
  14. gpgcheck=1
  15. type=rpm-md
  16. gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
  17. priority=1
  18. [ceph-source]
  19. name=Ceph source packages
  20. baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS/
  21. enabled=1
  22. gpgcheck=1
  23. type=rpm-md
  24. gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
  25. priority=1
  26. EOF

6、配置NTP时间同步

服务端:

  1. vim /etc/chrony.conf
  2. allow 192.168/16
  3. local stratum 10
  4. systemctl restart chronyd.service

客户端

  1. vim /etc/chrony.conf
  2. server 192.168.106.100 iburst
  3. systemctl restart chronyd.service
  4. chronyc sources

7.安装docker 环境

  1. yum -y install docker-ce
  2. systemctl restart docker
  3. systemctl enable docker
  4. docker pull ceph/daemon:v3.0.5-stable-3.0-luminous-centos-7-x86_64 #各个节点安装

首先启动主节点mon(ceph-admin节点)

  1. docker run -d --net=host --name=mon -v /etc/ceph:/etc/ceph -v /var/lib/ceph:/var/lib/ceph -e MON_IP=192.168.106.100 -e CEPH_PUBLIC_NETWORK=192.168.106.0/24 ceph/daemon:v3.0.5-stable-3.0-luminous-centos-7-x86_64 mon

若直接使用非xfs文件系统的硬盘,需要在配置文件中加以下配置:

  1. vim /etc/ceph/ceph.conf
  2. osd max object name len = 256
  3. osd max object namespace len = 64

8.拷贝配置文件

  1. scp -r /etc/ceph/ ceph-node1:/etc/
  2. scp -r /etc/ceph/ ceph-node2:/etc/
  3. scp -r /var/lib/ceph ceph-node1:/var/lib/
  4. scp -r /var/lib/ceph ceph-node2:/var/lib/

ceph-node1执行

9.创建mon

  1. docker run -d --net=host --name=mon -v /etc/ceph:/etc/ceph -v /var/lib/ceph:/var/lib/ceph -e MON_IP=192.168.106.101 -e CEPH_PUBLIC_NETWORK=192.168.106.0/24 ceph/daemon:v3.0.5-stable-3.0-luminous-centos-7-x86_64 mon

ceph-node2执行

  1. docker run -d --net=host --name=mon -v /etc/ceph:/etc/ceph -v /var/lib/ceph:/var/lib/ceph -e MON_IP=192.168.106.102 -e CEPH_PUBLIC_NETWORK=192.168.106.0/24 ceph/daemon:v3.0.5-stable-3.0-luminous-centos-7-x86_64 mon

10.挂载osd (三台服务器都要执行格式化和挂载)

  1. mkdir /osd0
  2. mkfs.xfs /dev/sdb
  3. mount /dev/sdb /osd0

11.启动OSD服务

  1. docker run -d --net=host --name=osd1 -v /etc/ceph:/etc/ceph -v /var/lib/ceph:/var/lib/ceph -v /dev:/dev -v /osd0:/var/lib/ceph/osd --privileged=true ceph/daemon:v3.0.5-stable-3.0-luminous-centos-7-x86_64 osd_directory

12.在node1启动mgr:

  1. docker run -d --net=host \
  2. -v /etc/ceph:/etc/ceph \
  3. -v /var/lib/ceph/:/var/lib/ceph/ \
  4. ceph/daemon:v3.0.5-stable-3.0-luminous-centos-7-x86_64 mgr

13.在ceph中创建一个pool存储池

rdb是存储池名字,64是pg数量,pg值计算参考https://ceph.com/pgcalc/

  1. docker exec mon ceph osd pool create rbd 64

14.配置crushmap,根据osd数目,0.15做相应调整,整体之和不大于1

  1. docker exec mon ceph osd crush add osd.0 0.15 host=admin
  2. docker exec mon ceph osd crush add osd.1 0.15 host=admin

检查osd tree

  1. docker exec mon ceph osd tree

15.更新crushmap使得节点都归属于root default

  1. docker exec mon ceph osd crush move node0 root=default
  2. docker exec mon ceph osd crush move node1 root=default

16.检查ceph运行情况

  1. docker exec mon ceph -s

分布式存储之Ceph集群介绍搭建 - 图2

17.测试

测试ceph集群在块存储下镜像的创建和文件的上传,如果成功才能说明ceph集群安装成功

  1. docker exec mon rbd create rbd/test-image --size 100M
  2. docker exec mon rbd info rbd/test-image
  3. docker exec mon rados -p rbd ls

分布式存储之Ceph集群介绍搭建 - 图3