分布式存储ceph部署

07-13 1560阅读

目录

1.存储基础

1.1 单机存储设备

1.2 单机存储的问题

1.3 商业存储解决方案

1.4 分布式存储

2.Ceph 简介

3.Ceph 优势

4.Ceph 架构

5.Ceph 核心组件

6.OSD 存储引擎

7.Ceph 数据的存储过程

8.Ceph 版本发行生命周期

9.Ceph 集群部署

10.基于 ceph-deploy 部署 Ceph 集群

10.1 根据规划设置主机名

10.2 配置 hosts 解析 

10.3 安装常用软件和依赖包 

10.4 在 admin 管理节点配置 ssh 免密登录所有节点

10.5 配置时间同步

10.6 配置 Ceph yum源

10.7 执行完上面所有的操作之后重启所有主机

10.8 所有节点都创建 Ceph 工作目录

10.9 管理节点安装 ceph-deploy 部署工具

10.10 在管理节点为其它节点安装 Ceph 软件包

10.11 添加网卡

10.12 生成初始配置

 10.13 在管理节点初始化 mon 节点

10.14 部署能够管理 Ceph 集群的节点

10.15 部署 osd 存储节点 

10.16 部署 mgr 节点

10.17 开启监控模块


1.存储基础

1.1 单机存储设备

  • DAS(直接附加存储,是直接接到计算机的主板总线上去的存储)
    • IDE、SATA、SCSI、SAS、USB 接口的磁盘
    • 所谓接口就是一种存储设备驱动下的磁盘设备,提供块级别的存储
  • NAS(网络附加存储,是通过网络附加到当前主机文件系统之上的存储)
    • NFS、CIFS、FTP
    • 文件系统级别的存储,本身就是一个做好的文件系统,通过nfs接口在用户空间输出后,客户端基于内核模块与远程主机进行网络通信,把它转为好像本地文件系统一样来使用,这种存储服务是没办法对它再一次格式化创建文件系统块的
  • SAN(存储区域网络)
    • SCSI协议(只是用来传输数据的存取操作,物理层使用SCSI线缆来传输)、FCSAN(物理层使用光纤来传输)、iSCSI(物理层使用以太网来传输)
    • 也是一种网络存储,但不同之处在于SAN提供给客户端主机使用的接口是块级别的存储

    1.2 单机存储的问题

    存储处理能力不足

    传统的IDE的IO值是100次/秒,SATA固态磁盘500次/秒,固态硬盘达到2000-4000次/秒。即使磁盘的IO能力再大数十倍,也不够抗住网站访问高峰期数十万、数百万甚至上亿用户的同时访问,这同时还要受到主机网络IO能力的限制。

    存储空间能力不足

    单块磁盘的容量再大,也无法满足用户的正常访问所需的数据容量限制。

    单点故障问题

    单机存储数据存在单点故障问题

    1.3 商业存储解决方案

    EMC、NetAPP、IBM、DELL、华为、浪潮

    1.4 分布式存储

    • 块存储(例如硬盘,一般是一个存储被一个服务器挂载使用,适用于容器或虚拟机存储卷分配、日志存储、文件存储)
      • 就是一个裸设备,用于提供没有被组织过的存储空间,底层以分块的方式来存储数据
    • 文件存储(例如NFS,解决块存储无法共享问题,可以一个存储被多个服务器同时挂载,适用于目录结构的存储、日志存储)
      • 是一种数据的组织存放接口,一般是建立在块级别的存储结构之上,以文件形式来存储数据,而文件的元数据和实际数据是分开存储的
    • 对象存储(例如OSS,一个存储可以被多服务同时访问,具备块存储的高速读写能力,也具备文件存储共享的特性,适用图片存储、视频存储)
      • 基于API接口提供的文件存储,每一个文件都是一个对象,且文件大小各不相同的,文件的元数据和实际数据是存放在一起的

      2.Ceph 简介

      Ceph使用C++语言开发,是一个开放、自我修复和自我管理的开源分布式存储系统。具有高扩展性、高性能、高可靠性的优点。

      Ceph目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack,Kubernetes都可与Ceph整合以支持虚拟机镜像的后端存储。

      粗略估计,我国70%—80%的云平台都将Ceph作为底层的存储平台,由此可见Ceph俨然成为了开源云平台的标配。目前国内使用Ceph搭建分布式存储系统较为成功的企业有华为、阿里、中兴、华三、浪潮、中国移动、网易、乐视、360、星辰天合存储、杉岩数据等。 

      3.Ceph 优势

      • 高扩展性:去中心化,支持使用普通X86服务器,支持上千个存储节点的规模,支持TB到EB级的扩展。
      • 高可靠性:没有单点故障,多数据副本,自动管理,自动修复。
      • 高性能:摒弃了传统的集中式存储元数据寻址的方案,采用 CRUSH 算法,数据分布均衡,并行度高。
      • 功能强大:Ceph是个大一统的存储系统,集块存储接口(RBD)、文件存储接口(CephFS)、对象存储接口(RadosGW)于一身,因而适用于不同的应用场景。

        4.Ceph 架构

        自下向上,可以将Ceph系统分为四个层次:

        RADOS 基础存储系统(Reliab1e,Autonomic,Distributed object store,即可靠的、自动化的、分布式的对象存储)

        RADOS是Ceph最底层的功能模块,是一个无限可扩容的对象存储服务,能将文件拆解成无数个对象(碎片)存放在硬盘中,大大提高了数据的稳定性。它主要由OSD和Monitor两个组件组成,OSD和Monitor都可以部署在多台服务器中,这就是ceph分布式的由来,高扩展性的由来。

        LIBRADOS 基础库

        Librados提供了与RADOS进行交互的方式,并向上层应用提供Ceph服务的API接口,因此上层的RBD、RGW和CephFS都是通过Librados访问的,目前提供PHP、Ruby、Java、Python、Go、C和C++支持,以便直接基于RADOS(而不是整个Ceph)进行客户端应用开发。

        高层应用接口:包括了三个部分

        1)对象存储接口 RGW(RADOS Gateway)

        网关接口,基于Librados开发的对象存储系统,提供S3和Swift兼容的RESTful API接口。

        2)块存储接口 RBD(Reliable Block Device)

        基于Librados提供块设备接口,主要用于Host/VM。

        3)文件存储接口 CephFS(Ceph File System)

        Ceph文件系统,提供了一个符合POSIX标准的文件系统,它使用Ceph存储集群在文件系统上存储用户数据。基于Librados提供的分布式文件系统接口。

        应用层:基于高层接口或者基础库Librados开发出来的各种APP,或者Host、VM等诸多客户端

        5.Ceph 核心组件

        Ceph是一个对象式存储系统,它把每一个待管理的数据流(如文件等数据)切分为一到多个固定大小(默认4兆)的对象数据(Object),并以其为原子单元(原子是构成元素的最小单元)完成数据的读写。

        OSD(Object Storage Daemon,守护进程 ceph-osd)

        是负责物理存储的进程,一般配置成和磁盘一一对应,一块磁盘启动一个OSD进程。主要功能是存储数据、复制数据、平衡数据、恢复数据,以及与其它OSD间进行心跳检查,负责响应客户端请求返回具体数据的进程等。通常至少需要3个OSD来实现冗余和高可用性。

        PG(Placement Group 归置组)

        PG 是一个虚拟的概念而已,物理上不真实存在。它在数据寻址时类似于数据库中的索引:Ceph 先将每个对象数据通过HASH算法固定映射到一个 PG 中,然后将 PG 通过 CRUSH 算法映射到 OSD。

        Pool

        Pool 是存储对象的逻辑分区,它起到 namespace 的作用。每个 Pool 包含一定数量(可配置)的 PG。Pool 可以做故障隔离域,根据不同的用户场景统一进行隔离。

        Pool中数据保存方式支持两种类型:

        • ●多副本(replicated):类似 raid1,一个对象数据默认保存 3 个副本,放在不同的 OSD
        • ●纠删码(Erasure Code):类似 raid5,对 CPU 消耗稍大,但是节约磁盘空间,对象数据保存只有 1 个副本。由于Ceph部分功能不支持纠删码池,此类型存储池使用不多

          Pool、PG 和 OSD 的关系:

          一个Pool里有很多个PG;一个PG里包含一堆对象,一个对象只能属于一个PG;PG有主从之分,一个PG分布在不同的OSD上(针对多副本类型)

          Monitor(守护进程 ceph-mon)

          用来保存OSD的元数据。负责维护集群状态的映射视图(Cluster Map:OSD Map、Monitor Map、PG Map 和 CRUSH Map),维护展示集群状态的各种图表, 管理集群客户端认证与授权。一个Ceph集群通常至少需要 3 或 5 个(奇数个)Monitor 节点才能实现冗余和高可用性,它们通过 Paxos 协议实现节点间的同步数据。

          Manager(守护进程 ceph-mgr)

          负责跟踪运行时指标和 Ceph 集群的当前状态,包括存储利用率、当前性能指标和系统负载。为外部监视和管理系统提供额外的监视和接口,例如 zabbix、prometheus、 cephmetrics 等。一个 Ceph 集群通常至少需要 2 个 mgr 节点实现高可用性,基于 raft 协议实现节点间的信息同步。

          MDS(Metadata Server,守护进程 ceph-mds)

          是 CephFS 服务依赖的元数据服务。负责保存文件系统的元数据,管理目录结构。对象存储和块设备存储不需要元数据服务;如果不使用 CephFS 可以不安装。

          6.OSD 存储引擎

          OSD 有两种方式管理它们存储的数据。在 Luminous 12.2.z 及以后的发行版中,默认(也是推荐的)后端是 BlueStore。在 Luminous 发布之前, 默认是 FileStore, 也是唯一的选项。

          ●Filestore

          FileStore是在Ceph中存储对象的一个遗留方法。它依赖于一个标准文件系统(只能是XFS),并结合一个键/值数据库(传统上是LevelDB,现在BlueStore是RocksDB),用于保存和管理元数据。

          FileStore经过了良好的测试,在生产中得到了广泛的应用。然而,由于它的总体设计和对传统文件系统的依赖,使得它在性能上存在许多不足。

          ●Bluestore

          从 Ceph 12.2.0(Luminous) 版本开始的。在 Luminous 版本中,BlueStore 被引入作为一种新的、高性能的 OSD 存储引擎,以替代旧的 FileStore 引擎。

          在 Ceph 中,BlueStore 可以提供更快的响应时间和更高的数据吞吐量,同时也具有更好的可靠性和稳定性。相比之下,旧的 FileStore 存储引擎通常需要更多的 CPU 和内存资源,对 IO 延迟的敏感度也较高。

          FileStore 将对象存储为块设备基础上的文件系统(通常是 XFS)中的文件。

          BlueStore 将对象直接存储在原始块设备上,免除了对文件系统层的需要,提高了读写操作速度,通过直接操作底层块设备来管理数据,而不是传统的文件系统。

          这种方法提供了更好的性能和可靠性,因为可以将数据划分为较小的块并使用校验和来检测错误。此外,BlueStore可以直接与Solid State Drive(SSD)交互,并利用其快速读写速度。

          BlueStore还具有可扩展性,可以处理数百万个物理盘和千亿个对象。它实现了动态负载平衡和自动恢复机制,以确保高可用性和数据可靠性。

          7.Ceph 数据的存储过程

          1)客户端从 mon 获取最新的 Cluster Map

          2)在 Ceph 中,一切皆对象。Ceph 存储的数据都会被切分成为一到多个固定大小的对象(Object)。Object size 大小可以由管理员调整,通常为 2M 或 4M。

          每个对象都会有一个唯一的 OID,由 ino 与 ono 组成:

          • ●ino :即是文件的 FileID,用于在全局唯一标识每一个文件
          • ●ono :则是分片的编号

            比如:一个文件 FileID 为 A,它被切成了两个对象,一个对象编号0,另一个编号1,那么这两个文件的 oid 则为 A0 与 A1。

            OID 的好处是可以唯一标示每个不同的对象,并且存储了对象与文件的从属关系。由于 Ceph 的所有数据都虚拟成了整齐划一的对象,所以在读写时效率都会比较高。

            3)通过对 OID 使用 HASH 算法得到一个16进制的特征码,用特征码与 Pool 中的 PG 总数取余,得到的序号则是 PGID 。

            即 Pool_ID + HASH(OID) % PG_NUM 得到 PGID

            4)PG 会根据设置的副本数量进行复制,通过对 PGID 使用 CRUSH 算法算出 PG 中目标主和次 OSD 的 ID,存储到不同的 OSD 节点上(其实是把 PG 中的所有对象存储到 OSD 上)。

            即通过 CRUSH(PGID) 得到将 PG 中的数据存储到各个 OSD 组中

            CRUSH 是 Ceph 使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。

            8.Ceph 版本发行生命周期

            Ceph从Nautilus版本(14.2.0)开始,每年都会有一个新的稳定版发行,预计是每年的3月份发布,每年的新版本都会起一个新的名称(例如,“Mimic”)和一个主版本号(例如,13代表Mimic,因为“M”是字母表的第13个字母)。

            版本号的格式为 x.y.z,x 表示发布周期(例如,13 代表 Mimic,17 代表 Quincy),y 表示发布版本类型,即

            • ● x.0.z :y等于 0,表示开发版本
            • ● x.1.z :y等于 1,表示发布候选版本(用于测试集群)
            • ● x.2.z :y等于 2,表示稳定/错误修复版本(针对用户)

              9.Ceph 集群部署

              目前 Ceph 官方提供很多种部署 Ceph 集群的方法,常用的分别是 ceph-deploy,cephadm 和 二进制:

              • ceph-deploy :一个集群自动化部署工具,使用较久,成熟稳定,被很多自动化工具所集成,可用于生产部署。
              • cephadm :从 Octopus 和较新的版本版本后使用 cephadm 来部署 ceph 集群,使用容器和 systemd 安装和管理 Ceph 集群。目前不建议用于生产环境。
              • 二进制:手动部署,一步步部署 Ceph 集群,支持较多定制化和了解部署细节,安装难度较大。

                10.基于 ceph-deploy 部署 Ceph 集群

                 

                主机名Public网络Cluster网络角色
                admin20.0.0.100admin(管理节点负责集群整体部署)、client
                node0120.0.0.10120.0.100.101mon、mgr、osd(/dev/sdb、/dev/sdc、/dev/sdd)
                node0220.0.0.10320.0.100.103mon、mgr、osd(/dev/sdb、/dev/sdc、/dev/sdd)
                node0320.0.0.10420.0.100.104mon、osd(/dev/sdb、/dev/sdc、/dev/sdd)
                client20.0.0.105
                初始化操作,所有服务器操作
                systemctl disable --now firewalld
                setenforce 0
                vim /etc/selinux/config
                SELINUX=disabled

                10.1 根据规划设置主机名

                hostnamectl set-hostname admin
                hostnamectl set-hostname node01
                hostnamectl set-hostname node02
                hostnamectl set-hostname node03
                hostnamectl set-hostname client

                10.2 配置 hosts 解析 

                所有服务器操作
                cat >> /etc/hosts  /sys/class/scsi_host/host0/scan
                echo "- - -" > /sys/class/scsi_host/host1/scan
                echo "- - -" > /sys/class/scsi_host/host2/scan
                #添加硬盘后在线刷新node节点
                 
                 
                #主机添加完硬盘后不要分区,直接使用
                 
                lsblk 

                分布式存储ceph部署

                管理节点
                #添加 osd 节点
                ceph-deploy --overwrite-conf osd create node01 --data /dev/sdb
                ceph-deploy --overwrite-conf osd create node02 --data /dev/sdb
                ceph-deploy --overwrite-conf osd create node03 --data /dev/sdb
                 
                ceph-deploy --overwrite-conf osd create node01 --data /dev/sdc
                ceph-deploy --overwrite-conf osd create node02 --data /dev/sdc
                ceph-deploy --overwrite-conf osd create node03 --data /dev/sdc
                 
                ceph-deploy --overwrite-conf osd create node01 --data /dev/sdd
                ceph-deploy --overwrite-conf osd create node02 --data /dev/sdd
                ceph-deploy --overwrite-conf osd create node03 --data /dev/sdd
                 
                #admin服务器查看 ceph 集群状态
                ceph -s

                分布式存储ceph部署

                10.16 部署 mgr 节点

                #ceph-mgr守护进程以Active/Standby模式运行,可确保在Active节点或其ceph-mgr守护进程故障时,其中的一个Standby实例可以在不中断服务的情况下接管其任务。根据官方的架构原则,mgr至少要有两个节点来进行工作。
                #admin服务器
                cd /etc/ceph
                ceph-deploy mgr create node01 node02
                 
                ceph -s #查看
                ceph osd status    #查看 osd 状态,需部署 mgr 后才能执行
                ceph osd df    #查看 osd 容量,需部署 mgr 后才能执行

                分布式存储ceph部署

                #解决 HEALTH_WARN 问题:mons are allowing insecure global_id reclaim问题:
                #admin服务器
                禁用不安全模式:
                ceph config set mon auth_allow_insecure_global_id_reclaim false

                分布式存储ceph部署

                10.17 开启监控模块

                #在 ceph-mgr Active节点执行命令开启
                 
                yum install -y ceph-mgr-dashboard
                ceph mgr module ls | grep dashboard
                 
                开启 dashboard 模块
                ceph mgr module enable dashboard --force
                 
                禁用 dashboard 的 ssl 功能
                ceph config set mgr mgr/dashboard/ssl false
                 
                配置 dashboard 监听的地址和端口
                ceph config set mgr mgr/dashboard/server_addr 0.0.0.0
                ceph config set mgr mgr/dashboard/server_port 8000
                 
                重启 dashboard
                ceph mgr module disable dashboard
                ceph mgr module enable dashboard --force
                 
                确认访问 dashboard 的 url
                ceph mgr services
                 
                设置 dashboard 账户以及密码
                echo "12345678" > dashboard_passwd.txt
                ceph dashboard set-login-credentials admin -i dashboard_passwd.txt
                 

                分布式存储ceph部署

                浏览器访问:http://20.0.0.100:8000 ,账号密码为 admin/12345678

                分布式存储ceph部署

                分布式存储ceph部署

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]