ceph介绍与部署文章目录ceph介绍与部署云存储用户角色Ceph 介绍技术优势Ceph 架构介绍Ceph访问方式Ceph存储后端组件CRUSH映射集群映射(Cluster Map)分布式存储部署Cephadm 简介Cephadm 管理接口Ceph CLI 接口Ceph Dashboard 接口Ceph 集群安装过程准备虚拟机模板准备集群节点Ceph 集群初始化Dashboard 登录信息客户端访问方法添加节点部署 mon 和 mgr部署 OSD验证云存储用户角色存储管理员安装、配置和维护 Ceph 存储集群。提供弹性和恢复例如复本、备份和灾难恢复方法。存储操作员协助存储集群的日常操作。负责日常存储管理任务例如更换故障存储设备。云操作员管理组织中的云资源例如 OpenStack 或 OpenShift 基础设施。存储管理员与云操作员密切合作维护 Ceph 集群。自动化工程师负责为常见的重复任务创建剧本。应用程序开发人员DevOps 开发人员可以是原始代码开发人员、维护人员或其他负责应用程序正确部署和行为的云用户。存储管理员与应用程序开发人员协调以确保存储资源可用、设置配额并保护应用程序存储。服务管理员管理最终用户服务不同于操作系统服务。服务管理员具有与项目经理类似的角色但针对的是现有的生产服务产品。部署工程师DevOps 工程师在更大的环境中专职人员与存储管理员和应用程序开发人员一起执行、管理和调整应用程序部署。应用架构师应用程序架构师可以在 Ceph 基础架构布局与资源可用性、扩展和延迟之间建立关联。这种架构专业知识可帮助存储管理员有效地设计复杂的应用程序部署。为了支持云用户及其应用程序存储管理员必须了解资源可用性、扩展和延迟的这些相同方面。基础架构架构师存储管理员必须掌握存储集群的架构布局才能管理资源位置、容量和延迟。 Ceph 集群部署和维护的基础架构架构师是存储管理员的主要信息来源。 基础架构架构师可能是云服务提供商员工或供应商解决方案架构师或顾问。数据中心操作员是较低 Ceph 存储基础设施层的角色负责数据供应。数据中心操作员通常受雇于公共云服务提供商或私有数据中心云中组织的内部 IT 团队。Ceph 介绍开源、分布式、软件定义存储 。极高的可用性、 扩展性和易用性 用于存储海量数据。可部署在通用服务器上 这些服务器的CPU可以是x86架构 也可以是ARM架构。 Ceph 支持在同一集群内既有x86主机又有ARM 主机。技术优势采用 RADOS 系统将所有数据作为对象 存储在存储池中。去中心化 客户端可根据CRUSH算法自行计算出对象存储位置 然后进行数据读写。集群可自动进行扩展、 数据再平衡、 数据恢复等。Ceph 架构介绍Ceph旨在提供卓越的性能、可靠性和可扩展性。采用模块化分布式架构包含下列元素对象存储后端称为RADOS可靠的自主分布式对象存储RADOS是一种自我修复、自我管理、基于软件的对象存储。RADOSReliableAutonomicDistributedObject Store即可靠的、自主的、分布式的对象存储是Ceph存储系统的核心。Ceph的所有优秀特性都是由RADOS提供的包括分布式对象存储、高可用性、高可靠性、没有单点故障、自我修复以及自我管理等。Ceph中的一切数据都以对象的形式存储RADOS负责存储这些对象而不考虑它们的数据类型。与RADOS交互的多种访问方式。Ceph访问方式Ceph原生API(librados)librados库是原生C语言库可以让应用直接与RADOS协作来访问Ceph集群存储的对象。为了最大限度地提高性能请编写用户的应用程序以直接使用 librados 。Ceph块设备(RBD、librbd)也称为 RADOS块设备(RBD)镜像Ceph集群中虚拟磁盘的存储Linux内核中的挂载支持QEMU、KVM和 OpenStack Cinder 的启动支持。Ceph对象网关(RADOSGW、librgw)使用librados构建的对象存储接口。它使用这个库来与Ceph集群通信并且直接写入到OSD进程。它通过RESTfulAPI为应用提供了网关并且支持两种接口Amazon S3和 OpenStack Swift。Ceph文件系统(CephFS、libcephfs)并行文件系统提供可扩展的、单层级结构共享磁盘。Ceph元数据服务器(MDS)管理与CephFS中存储的文件相关联的元数据包括文件访问、更改和修改时间戳。Ceph存储后端组件监控器(MON)维护集群状态映射。它们可帮助其他守护进程互相协调。配置奇数个监视器。**对象存储设备(OSD)**存储数据并处理数据复制、恢复和重新平衡。使用可扩展哈希下的受控复制 (CRUSH) 算法来高效地计算有关对象位置的信息而不是依赖于中央查找表。**管理器(MGR)**通过基于浏览器的仪表板和RESTAPI跟踪运行时指标并公开集群信息。**元数据服务器(MDS)**存储CephFS使用的元数据而非对象存储或块存储以便客户端能够高效运行 POSIX命令。CRUSH映射CRUSH 将每个对象分配给一个放置组 (PG)也就是单个哈希存储桶 PG 将对象映射给多个OSD。集群映射(Cluster Map)监视器映射(Monitor Map) 包含集群的 fs id 每个监视器(monitor)的位置、名称、地址和端口 和地图时间戳。fsid是一个唯一的、自动生成的标识符 (UUID)用于标识 Ceph 集群。Ceph Monitor 守护进程维护集群映射。 使用ceph mon dump命令查看监视器图。OSD映射(OSD Map) 包含集群的 fs id、池列表、复本大小、归置组编号、OSD 列表及其状态以及映射时间戳。 使用ceph osd dump命令查看 OSD 映射。放置组映射(Placement Group Map)包含 PG 版本 使用百分比 每个归置组的详细信息例如 PG ID、Up Set、Acting Set、PG 的状态、每个池的数据使用统计信息 和地图时间戳。 使用ceph pg dump命令查看 PG Map 统计信息。CRUSH映射(CRUSH Map) 包含存储设备列表、故障域层次结构例如设备、主机、机架、行、房间以及在存储数据时遍历层次结构的规则。 使用ceph osd crush dump命令查看 cursh Map 统计信息。元数据服务器映射(MDS map)包含用于存储元数据的池、元数据服务器列表、元数据服务器状态和映射时间戳。 使用ceph fs dump命令查看 MDS 映射。分布式存储部署官方推荐部署方式Cephadm基于容器部署支持 Octopus 及以后版本部署完成后可通过命令行和图形界面进行ceph集群的管理。Rook基于 kubernetes 部署支持 Nautilus 及以后版本部署完成后可通过命令行和图形界面进行ceph集群的管理同时可通过 kubernetes 对组件所在 pod 进行管理。Cephadm 简介Cephadm 是一个ceph全生命周期管理工具 通过“引导 bootstrapping ” 可创建一个包含一个MON和一个MGR的单节点集群 后续可通过自带的编排接口进行集群的扩容、 主机添加、 服务部署。Cephadm 使用容器部署 Ceph大大降低了部署 Ceph 集群的复杂性和包依赖性。cephadm 软件包安装在集群第一个节点中该节点充当引导节点。Cephadm 是部署新集群时启动的第一个守护程序同时也是管理器守护程序 (MGR) 中的一个模块。Cephadm 管理接口Ceph 使用容器化部署首先创建一个最小的集群只有一个主机引导节点和两个守护进程监视器和管理器守护进程。Ceph 提供两个管理接口Ceph CLI和Dashboard GUI用于配置 Ceph 守护进程和服务以及扩展或收缩集群。cephadm 工具与 Ceph Manager 编排模块交互Ceph Manager Orchestrator 再与其他组件交互Ceph CLI 接口#cephadm shell 命令启动一个容器化版本的 shell容器中安装了所有必需的 Ceph 包。[rootceph1 ~]# cephadm shellInferring fsid 2faf683a-7cbf-11f0-b5ba-000c29e0ad0e Using recent ceph image quay.io/ceph/cephsha256:f15b41add2c01a65229b0db515d2dd57925636ea39678ccc682a49e2e9713d98[ceph: rootceph1 /]#[rootceph1 ~]# cephadm shell -- ceph statusInferring fsid 2faf683a-7cbf-11f0-b5ba-000c29e0ad0e Using recent ceph image quay.io/ceph/cephsha256:f15b41add2c01a65229b0db515d2dd57925636ea39678ccc682a49e2e9713d98 cluster: id: 2faf683a-7cbf-11f0-b5ba-000c29e0ad0e health: HEALTH_OK services: mon:3daemons, quorum ceph1.laogao.cloud,ceph2,ceph3(age 12m)mgr: ceph2.oetbal(active, since 11m), standbys: ceph1.laogao.cloud.zoqmbt, ceph3.npaxvt osd:9osds:9up(since 12m),9in(since 3w)data: pools:1pools,1pgs objects:0objects,0B usage:2.6GiB used,177GiB /180GiB avail pgs:1activeclean# 为了操作方便可以直接在物理主机执行ceph命令需要安装ceph-common软件包。[rootceph1 ~]# dnf install -y ceph-common[rootceph1 ~]# ceph statusCeph Dashboard 接口基于 Web 的应用程序用于监视和管理集群。与 Ceph CLI 一样Dashboard GUI Web 是 ceph-mgr 守护进程的一个模块。默认情况下Ceph 在创建集群时将Dashboard GUI 部署在引导节点并使用 TCP 端口 8443。还实现了集群管理和监控功能。Ceph 集群安装过程部署方法cephadm操作系统Centos Stream 8最小化安装硬件配置2 cpu、4G memory、1个系统盘3个20G数据盘使用7台虚拟机客户端client主集群ceph1、ceph2、ceph3备集群ceph4、ceph5、ceph6准备虚拟机模板# 1 配置主机名解析[rootlocalhost ~]# cat /etc/hosts EOF###### ceph ######192.168.108.10 client.demo.cloud client192.168.108.11 ceph1.demo.cloud ceph1192.168.108.12 ceph2.demo.cloud ceph2192.168.108.13 ceph3.demo.cloud ceph3192.168.108.14 ceph4.demo.cloud ceph4192.168.108.15 ceph5.demo.cloud ceph5192.168.108.16 ceph6.demo.cloud ceph6 EOF# 2 关闭 SELinux[rootlocalhost ~]# sed -ri s/^SELINUX.*/SELINUXdisabled/g /etc/selinux/config# 3 关闭防火墙[rootlocalhost ~]# systemctl disable firewalld --now# 4 配置yum仓库[rootlocalhost ~]# cat EOF /etc/yum.repos.d/ceph.repo[Ceph]nameCephbaseurlhttps://mirrors.aliyun.com/centos-vault/8-stream/storage/x86_64/ceph-pacificenabled1gpgcheck0EOF# 5 安装基础软件包[rootlocalhost ~]# dnf install -y bash-completion vim lrzsz unzip rsync sshpass tar# 6 配置时间同步[rootlocalhost ~]# dnf install -y chrony[rootlocalhost ~]# systemctl enable chronyd --now# 7 安装 cephadm[rootlocalhost ~]# dnf install -y cephadm[rootlocalhost ~]# cephadm --helpusage: cephadm[-h][--image IMAGE][--docker][--data-dir DATA_DIR][--log-dir LOG_DIR][--logrotate-dir LOGROTATE_DIR][--sysctl-dir SYSCTL_DIR][--unit-dir UNIT_DIR][--verbose][--timeout TIMEOUT][--retry RETRY][--env ENV][--no-container-init]{version,pull,inspect-image,ls,list-networks,adopt,rm-daemon,rm-cluster,run,shell,enter,ceph-volume,zap-osds,unit,logs,bootstrap,deploy,check-host,prepare-host,add-repo,rm-repo,install,registry-login,gather-facts,exporter,host-maintenance,disk-rescan}... Bootstrap Ceph daemons with systemd and containers. positional arguments:{version,pull,inspect-image,ls,list-networks,adopt,rm-daemon,rm-cluster,run,shell,enter,ceph-volume,zap-osds,unit,logs,bootstrap,deploy,check-host,prepare-host,add-repo,rm-repo,install,registry-login,gather-facts,exporter,host-maintenance,disk-rescan}sub-command version get ceph version from container pull pull the default container image inspect-image inspectlocalcontainer imagelslist daemon instances on thishost......# 安装 cephadm 的时候会自动安装官方推荐的容器引擎 podman[rootlocalhost ~]# rpm -q podmanpodman-4.9.4-0.1.module_el89713d3df00d.x86_64# 8 提前下载镜像[rootlocalhost ~]# podman pull quay.io/ceph/ceph:v16[rootlocalhost ~]# podman pull quay.io/ceph/ceph-grafana:8.3.5[rootlocalhost ~]# podman pull quay.io/prometheus/node-exporter:v1.3.1[rootlocalhost ~]# podman pull quay.io/prometheus/alertmanager:v0.23.0[rootlocalhost ~]# podman pull quay.io/prometheus/prometheus:v2.33.4# 准备配置主机脚本[rootlocalhost ~]# cat /usr/local/bin/sethost EOF#/bin/bashhostnamectl set-hostname ceph$1.demo.cloud nmcli connection modify ens160 ipv4.method manual ipv4.addresses192.168.108.1$1/24 ipv4.gateway192.168.108.2 ipv4.dns192.168.108.2 init0EOF[rootlocalhost ~]# chmod x /usr/local/bin/sethost#关机打快照准备集群节点#克隆#ceph1到ceph6按以下修改[rootlocalhost ~]# sethost 1 #ceph1用1ceph2到ceph6分别为2-6#client做以下修改[rootlocalhost ~]# hostnamectl set-hostname client.demo.cloud[rootlocalhost ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.108.10/24 ipv4x.gateway 192.168.108.2 ipv4.dns 192.168.108.2Ceph 集群初始化[rootceph1 ~]# cephadm bootstrap --mon-ip 192.168.108.11 --allow-fqdn-hostname --initial-dashboard-user admin --initial-dashboard-password demo123 --dashboard-password-noupdate选项说明–mon-ip 192.168.108.11指定 monitor ip。–allow-fqdn-hostname指定允许使用长名称。当主机名是长名称时初始化时必须使用该参数。–initial-dashboard-user admin指定 Web UI 登录的管理员账户。–initial-dashboard-password demo123指定 Web UI 登录的管理员账户对应密码。–dashboard-password-noupdate指定不要更新 Web UI 登录密码。Dashboard 登录信息Ceph Dashboard is now available at: URL: https://ceph1.demo.cloud:8443/ User: admin Password: demo123客户端访问方法Enabling client.admin keyring and conf on hosts withadminlabel Enabling autotuneforosd_memory_target You can access the Ceph CLI as followingincaseof multi-cluster or non-default config:sudo/usr/sbin/cephadm shell--fsid2faf683a-7cbf-11f0-b5ba-000c29e0ad0e-c/etc/ceph/ceph.conf-k/etc/ceph/ceph.client.admin.keyring Or,ifyou are only running a single cluster on this host:sudo/usr/sbin/cephadm shell添加节点Ceph采用共享秘钥进行身份验证 使用命令“ceph cephadm get-pub-key” 获取到主机接入集群时所需的ssh 公钥。获取到公钥后 使用该公钥实现对节点的免密ssh管理。使用命令“ceph orch host add” 添加主机。# 为了配置方便我们在ceph1上安装ceph客户端工具 ceph-common[rootceph1 ~]# dnf install -y ceph-common# 获取集群公钥[rootceph1 ~]# ceph cephadm get-pub-key ~/ceph.pub# 推送公钥到其他节点[rootceph1 ~]# ssh-copy-id -f -i ~/ceph.pub rootceph2.demo.cloud[rootceph1 ~]# ssh-copy-id -f -i ~/ceph.pub rootceph3.demo.cloud# 添加节点[rootceph1 ~]# ceph orch host add ceph2.demo.cloudAddedhostceph2.demo.cloudwith addr192.168.108.12[rootceph1 ~]# ceph orch host add ceph3.demo.cloudAddedhostceph3.demo.cloudwith addr192.168.108.13[rootceph1 ~]# ceph orch host lsHOST ADDR LABELS STATUS ceph1.demo.cloud192.168.108.11 _admin ceph2.demo.cloud192.168.108.12 ceph3.demo.cloud192.168.108.133hostsincluster# 等待自动部署服务到其他节点部署完成后效果如下[rootceph1 ~]# ceph orch lsNAME PORTS RUNNING REFRESHED AGE PLACEMENT alertmanager ?:9093,90941/1 8m ago 9m count:1 crash3/3 8m ago 9m * grafana ?:30001/1 8m ago 9m count:1 mgr2/2 8m ago 9m count:2 mon3/5 8m ago 9m count:5 node-exporter ?:91003/3 8m ago 9m * prometheus ?:90951/1 8m ago 9m count:1# crash 3/3个# mgr 2/2个# mon 3/5个# node-exporter 3/3个部署 mon 和 mgr# 禁用 mon 和 mgr 服务的自动扩展功能[rootceph1 ~]# ceph orch apply mon --unmanagedtrue[rootceph1 ~]# ceph orch apply mgr --unmanagedtrue[rootceph1 ~]# ceph orch lsNAME PORTS RUNNING REFRESHED AGE PLACEMENT alertmanager ?:9093,90941/1 56s ago 12m count:1 crash3/3 57s ago 12m * grafana ?:30001/1 56s ago 12m count:1 mgr2/2 57s ago 3sunmanagedmon3/5 57s ago 8sunmanagednode-exporter ?:91003/3 57s ago 12m * prometheus ?:90951/1 56s ago 12m count:1# mon 和 mgr 的 PLACEMENT 状态为 unmanaged# 配置主机标签ceph2 和 ceph3 添加标签“ _admin”[rootceph1 ~]# ceph orch host label add ceph2.demo.cloud _adminAdded label _admin tohostceph2.demo.cloud[rootceph1 ~]# ceph orch host label add ceph3.demo.cloud _adminAdded label _admin tohostceph3.demo.cloud[rootceph1 ~]# ceph orch host lsHOST ADDR LABELS STATUS ceph1.demo.cloud192.168.108.11 _admin ceph2.demo.cloud192.168.108.12 _admin ceph3.demo.cloud192.168.108.13 _admin3hostsincluster# 将 mon 和 mgr 组件部署到具有_admin标签的节点上[rootceph1 ~]# ceph orch apply mon --placementlabel:_adminScheduled mon update...[rootceph1 ~]# ceph orch apply mgr --placementlabel:_adminScheduled mgr update...#观察现象[rootceph1 ~]# ceph orch ls | egrep mon|mgrmgr3/3 2m ago 14s label:_admin mon3/3 2m ago 28s label:_admin[rootceph1 ~]# ceph orch ps | egrep mon|mgr部署 OSD# 将所有主机上闲置的硬盘添加为 OSD[rootceph1 ~]# ceph orch apply osd --all-available-devicesScheduled osd.all-available-devices update...验证#查看集群中部署的服务[rootceph1 ~]# ceph orch lsNAME PORTS RUNNING REFRESHED AGE PLACEMENT alertmanager ?:9093,90941/1 3s ago 15m count:1 crash3/3 4s ago 15m * grafana ?:30001/1 3s ago 15m count:1 mgr3/3 4s ago 2m label:_admin mon3/3 4s ago 2m label:_admin node-exporter ?:91003/3 4s ago 15m * osd.all-available-devices94s ago 25s * prometheus ?:90951/1 3s ago 15m count:1#查看集群状态[rootceph1 ~]# ceph -scluster: id: 2faf683a-7cbf-11f0-b5ba-000c29e0ad0e health: HEALTH_OK services: mon:3daemons, quorum ceph1.demo.cloud,ceph2,ceph3(age 6m)mgr: ceph1.demo.cloud.zoqmbt(active, since 15m), standbys: ceph2.oetbal, ceph3.npaxvt osd:9osds:9up(since 30s),9in(since 45s)data: pools:1pools,1pgs objects:0objects,0B usage:2.6GiB used,177GiB /180GiB avail pgs:1activeclean#查看集群 osd 结构[rootceph1 ~]# ceph osd treeID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF-10.17537root default-30.05846hostceph10hdd0.01949osd.0 up1.000001.000003hdd0.01949osd.3 up1.000001.000006hdd0.01949osd.6 up1.000001.00000-50.05846hostceph22hdd0.01949osd.2 up1.000001.000004hdd0.01949osd.4 up1.000001.000007hdd0.01949osd.7 up1.000001.00000-70.05846hostceph31hdd0.01949osd.1 up1.000001.000005hdd0.01949osd.5 up1.000001.000008hdd0.01949osd.8 up1.000001.00000#查看集群组件ceph orchps5846 host ceph22 hdd 0.01949 osd.2 up 1.00000 1.000004 hdd 0.01949 osd.4 up 1.00000 1.000007 hdd 0.01949 osd.7 up 1.00000 1.00000-7 0.05846 host ceph31 hdd 0.01949 osd.1 up 1.00000 1.000005 hdd 0.01949 osd.5 up 1.00000 1.000008 hdd 0.01949 osd.8 up 1.00000 1.00000#查看集群组件ceph orch ps