ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Ceph 全手工部署实战:从 Monitor 引导到 OSD、RADOSGW 的 Manual Deployment 完整指南

Ceph 全手工部署实战:从 Monitor 引导到 OSD、RADOSGW 的 Manual Deployment 完整指南 存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载本文是 Ceph 官方文档《Manual Deployment》的中文深度实战解读面向部署工具开发者以及无法使用 cephadm 的环境。文中以mon-node1Monitor 节点、osd-node1/osd-node2OSD 节点与Admin Node组成的集群为例逐步演示如何纯手工完成 Monitor 引导bootstrapping、Manager 配置、OSD 添加短形式与长形式、MDS 与 RADOSGW 安装并给出ceph-authtool、monmaptool、ceph-volume、ceph-osd --mkfs等工具的底层实现佐证。读完本文你将掌握一套不依赖任何编排工具、可逐条验证的 Ceph 存储集群手工部署全流程。适用前提本手册描述的是完全脱离 cephadm 的纯手工部署方式主要面向部署工具的开发者以及 cephadm 无法运行的特殊环境。生产集群推荐使用 cephadm 部署安装方式的整体对比见 doc/install/index.rst。部署拓扑与前置认知所有 Ceph 集群都至少需要一个 Monitor并且 OSD 的数量至少要与对象副本数相等例如osd_pool_default_size 2至少需要两个 OSD。引导初始 Monitor 是部署 Ceph 存储集群的第一步这一步也会为整个集群确立关键参数存储池副本数、每个 OSD 的 placement groupPG数量、心跳间隔、是否需要认证等。这些值大多带有默认值生产环境搭建前有必要了解它们。本文示例拓扑如下Admin Node ──► mon-node1Monitor 节点 Admin Node ──► osd-node1OSD 节点 Admin Node ──► osd-node2OSD 节点其中 Admin Node 用于执行管理命令mon-node1 承载ceph-mon与ceph-mgrosd-node1 / osd-node2 承载ceph-osd。文档原图以 ditaa 描述见 doc/install/manual-deployment.rst本仓库中无对应图片文件故以文字拓扑呈现。Monitor 引导的六项必备要素引导一个 Monitor理论上即引导一个 Ceph 存储集群需要以下要素要素说明唯一标识fsid集群的唯一 ID。fsid 源自 File System ID源于早期 Ceph 存储集群主要服务 Ceph 文件系统的时期如今 Ceph 已原生支持对象、块设备与对象存储网关接口fsid 这个名字多少有点名不副实但它仍是集群的全局唯一标识。集群名称Cluster Name一个不含空格的简单字符串默认是ceph。多集群场景如 多站点配置 中的us-west、us-east下可通过ceph --cluster {cluster-name}指定配置文件来切换当前 CLI 会话对应的集群。Monitor 名称集群内每个 Monitor 实例都有唯一名称实践中通常取主机名建议一台主机只跑一个 Monitor且不要与 OSD 守护进程混跑。可用hostname -s获取短主机名。Monitor Map引导初始 Monitor 需要生成 monitor map其中包含 fsid、集群名称或用默认值以及至少一个主机名及其 IP 地址。Monitor KeyringMonitor 之间通过密钥通信必须生成包含 monitor 密钥的 keyring并在引导时提供。Cephx 配置monmap 默认使用最安全的加密套件如需兼容老客户端可放宽密码套件选择。管理员 Keyring使用cephCLI 工具必须要有client.admin用户因此要生成 admin 用户与 keyring并把client.admin加入 monitor keyring。以上要求并不强制创建 Ceph 配置文件。但作为最佳实践建议创建配置文件并写入fsid、mon_initial_members与mon_host。这些参数也可以在运行时通过 API 读写配置文件只需要包含覆盖默认值的设置把参数沉淀在配置文件中更利于长期维护。第一步引导初始 Monitor19 步完整流程1. 登录初始 Monitor 节点ssh mon-node12. 确认配置目录存在Ceph 默认使用/etc/ceph存放配置文件安装 ceph 软件包时会自动创建该目录ls /etc/ceph3. 创建 Ceph 配置文件默认配置文件名为ceph.conf其中ceph即集群名称。先写入[global]段sudo vim /etc/ceph/ceph.conf4. 生成集群唯一 IDfsiduuidgen5. 将 fsid 写入配置文件fsid {UUID}示例fsid a7f64266-0894-4f1e-a635-d0aeaca0e9936. 写入初始 Monitor 成员mon_initial_members {hostname}[,{hostname}]示例mon_initial_members mon-node17. 写入初始 Monitor 的 IP 地址并保存mon_host {ip-address}[,{ip-address}]示例mon_host 192.168.0.1也可以使用 IPv6 地址但必须设置ms_bind_ipv6 true网络配置细节参见 doc/rados/configuration/network-config-ref.rst。8. 创建集群 keyring 并生成 monitor 密钥sudo ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon.mon.凭证不需要任何 capabilities所有 Monitor 共享这一把密钥。从源码看src/tools/ceph_authtool.cc-C/--create-keyring用于新建覆盖keyring 文件-g/--gen-key为指定实体生成新密钥--gen-print-key则只打印不落盘。9. 生成管理员 keyring 与client.admin用户sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon allow * --cap osd allow * --cap mds allow * --cap mgr allow *--cap SUBSYSTEM CAPABILITY为指定子系统设置能力源码见 src/tools/ceph_authtool.cc。这里client.admin对 mon、osd、mds、mgr 全部放开。10. 生成 bootstrap-osd keyring 与client.bootstrap-osd用户sudo ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon profile bootstrap-osd --cap mgr allow r该用户后续被ceph-volume短形式添加 OSD与长形式ceph osd new使用只具备引导 OSD 的最小权限。11. 把生成的密钥导入 monitor keyringsudo ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring sudo ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring--import-keyring会把给定 keyring 的内容合并进目标 keyring源码见 src/tools/ceph_authtool.cc。12. 修改ceph.mon.keyring属主sudo chown ceph:ceph /tmp/ceph.mon.keyring13. 为集群配置 CephX该步骤也可在集群创建后再做。如需支持老客户端认证允许使用较旧的非安全密码套件AUTH_SETTINGS--auth-allowed-ciphersaes,aes256k若还希望新密钥默认使用旧版非安全的aes密码套件AUTH_SETTINGS$AUTH_SETTINGS --auth-preferred-cipheraes服务端密码套件类型也可配置但一般无需改动除非集群中需要运行旧版本的服务守护进程AUTH_SETTINGS$AUTH_SETTINGS --auth-service-cipheraes客户端无法解密服务端密码套件因此该设置仅影响服务端之间的通信。14. 生成 monitor map使用主机名、IP 地址与 fsid 生成保存为/tmp/monmapmonmaptool --create $AUTH_SETTINGS --add {hostname} {ip-address} --fsid {uuid} /tmp/monmap示例monmaptool --create $AUTH_SETTINGS --add mon-node1 192.168.0.1 --fsid a7f64266-0894-4f1e-a635-d0aeaca0e993 /tmp/monmap从源码src/tools/monmaptool.cc可见--create可用--clobber覆盖已存在文件、--fsid uuid指定集群 ID、--add name ip添加 Monitor 条目等参数与上面命令一一对应。15. 创建 Monitor 数据目录sudo mkdir /var/lib/ceph/mon/{cluster-name}-{hostname}示例sudo -u ceph mkdir /var/lib/ceph/mon/ceph-mon-node1数据目录的详细约定参见 doc/rados/configuration/mon-config-ref.rst 中关于数据路径的说明。16. 用 monmap 与 keyring 初始化 Monitor 守护进程sudo -u ceph ceph-mon [--cluster {cluster-name}] --mkfs -i {hostname} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring示例sudo -u ceph ceph-mon --mkfs -i mon-node1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring17. 最小化 Ceph 配置文件的常见参数[global] fsid {cluster-id} mon_initial_members {hostname}[, {hostname}] mon_host {ip-address}[, {ip-address}] public_network {network}[, {network}] cluster_network {network}[, {network}]例如[global] fsid a7f64266-0894-4f1e-a635-d0aeaca0e993 mon_initial_members mon-node1 mon_host 192.168.0.1 public_network 192.168.0.0/24运维上更推荐通过ceph configAPI 做配置变更而不是直接编辑ceph.conf。public_network与cluster_network的取值与网段规划密切相关可对照网络配置参考文档进行设置。18. 用 systemd 启动 Monitorsudo systemctl start ceph-monmon-node1该命令实际拉起 systemd 单元ceph-mon.service其ExecStart为ceph-mon -f --id %i --setuser ceph --setgroup ceph见 systemd/ceph-mon.service.in%i即mon-node1。单元还启用了Restarton-failure、RestartSec10等自愈策略并设置了LimitNOFILE/LimitNPROC为 1048576。19. 开放防火墙端口使用 firewalld 开放 ceph-mon 服务即时生效 永久生效sudo firewall-cmd --zonepublic --add-serviceceph-mon sudo firewall-cmd --zonepublic --add-serviceceph-mon --permanent验证 Monitor 运行状态sudo ceph -s正常输出大致如下cluster: id: a7f64266-0894-4f1e-a635-d0aeaca0e993 health: HEALTH_OK services: mon: 1 daemons, quorum mon-node1 mgr: mon-node1(active) osd: 0 osds: 0 up, 0 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 bytes usage: 0 kB used, 0 kB / 0 kB avail pgs:此时 Monitor 已加入 quorum但由于还没有任何 OSDPG 会处于 inactive 状态并产生健康告警。添加并启动 OSD 后这些告警会消失见 doc/rados/operations/add-or-rm-osds.rst。若启用了旧版密码套件Monitor 可能产生健康告警可通过 mute 健康检查的方式抑制各告警的详细说明参见健康检查文档doc/rados/operations/。Manager 守护进程配置在运行ceph-mon的每个节点上还应当同时配置一个ceph-mgr守护进程。完整的 mgr 管理员指南见文档的 mgr-administrator-guide 章节doc/mgr/。集群内至少需要有一个 active 的 mgr 才能提供 dashboard、prometheus 等 mgr 模块服务。添加 OSD短形式ceph-volumeMonitor 引导完成后即可添加 OSD。集群要进入active clean状态必须有足够数量的 OSD 满足副本数要求例如osd_pool_default_size 2至少需要两个 OSD。引导后集群虽带有默认 CRUSH map但 CRUSH map 中尚未映射任何 OSD 守护进程到节点。Ceph 提供ceph-volume工具来准备逻辑卷、磁盘或分区。它会自动递增生成 OSD ID并自动把新 OSD 以主机为单位加入 CRUSH mapceph-volume -h可查看全部 CLI 选项。短形式流程如下对每个 OSD 执行把 bootstrap keyring 与配置从 Monitor 节点复制到 OSD 节点copy /var/lib/ceph/bootstrap-osd/ceph.keyring from monitor node (mon-node1) to /var/lib/ceph/bootstrap-osd/ceph.keyring on osd node (osd-node1) copy /etc/ceph/ceph.conf from monitor node (mon-node1) to /etc/ceph/ceph.conf on osd node (osd-node1)登录 OSD 节点并创建 OSDssh {osd node} sudo ceph-volume lvm create --data {data-path}示例scp -3 rootmon-node1:/var/lib/ceph/bootstrap-osd/ceph.keyring rootosd-node1:/var/lib/ceph/bootstrap-osd/ceph.keyring ssh osd-node1 sudo ceph-volume lvm create --data /dev/hdd1ceph-volume lvm create的实现位于 src/ceph-volume/ceph_volume/devices/lvm/create.py它本质上组合了 prepare 与 activate 两个阶段。分阶段方式prepare activate也可以把创建过程拆成 prepare 与 activate 两个阶段ssh {osd node} sudo ceph-volume lvm prepare --data {data-path}示例ssh osd-node1 sudo ceph-volume lvm prepare --data /dev/hdd1prepare 完成后需要通过列出本机 OSD 获取已准备好的 OSD 的ID与FSIDsudo ceph-volume lvm list然后激活该 OSDsudo ceph-volume lvm activate {ID} {FSID}示例sudo ceph-volume lvm activate 0 a7f64266-0894-4f1e-a635-d0aeaca0e993prepare 与 activate 的独立实现分别位于 src/ceph-volume/ceph_volume/devices/lvm/prepare.py 与 src/ceph-volume/ceph_volume/devices/lvm/activate.py。添加 OSD长形式完全手动不使用任何辅助工具时按下述流程手工创建 OSD 并加入集群与 CRUSH map该流程未涉及 dm-crypt lockbox 场景对每个 OSD 执行1. 连接 OSD 主机并切换为 rootssh {node-name} sudo bash2. 生成 OSD 的 UUIDUUID$(uuidgen)3. 生成 OSD 的 CephX 密钥OSD_SECRET$(ceph-authtool --gen-print-key)--gen-print-key只生成并打印密钥而不写入 keyring源码见 src/tools/ceph_authtool.cc。4. 创建 OSDID$(echo {\cephx_secret\: \$OSD_SECRET\} | \ ceph osd new $UUID -i - \ -n client.bootstrap-osd -k /var/lib/ceph/bootstrap-osd/ceph.keyring)前提是本机已存在client.bootstrap-osd密钥也可以在持有该密钥的其他主机上以client.admin身份执行。若需要复用已销毁的 OSD ID可给ceph osd new附加一个 OSD ID 参数。还可在 JSON 中携带crush_device_class属性为非自动检测设备类型ssd/hdd的 OSD 指定初始 class。5. 创建 OSD 默认数据目录mkdir /var/lib/ceph/osd/ceph-$ID6. 准备非系统盘并挂载若 OSD 使用独立数据盘非系统盘需要格式化并挂载到上面创建的目录mkfs.xfs /dev/{DEV} mount /dev/{DEV} /var/lib/ceph/osd/ceph-$ID7. 写入 OSD keyringceph-authtool --create-keyring /var/lib/ceph/osd/ceph-$ID/keyring \ --name osd.$ID --add-key $OSD_SECRET-a/--add-key BASE64用于把编码后的密钥加入 keyring源码见 src/tools/ceph_authtool.cc。8. 初始化 OSD 数据目录ceph-osd -i $ID --mkfs --osd-uuid $UUID--mkfs用于创建新的数据目录--osd-uuid指定 OSD 的 fsid二者通常配合使用参数定义见 src/ceph_osd.cc。9. 修正属主chown -R ceph:ceph /var/lib/ceph/osd/ceph-$ID10. 启用并启动 OSDOSD 加入 Ceph 后虽然已进入配置但尚未运行需要启动后才能接收数据。现代 systemd 发行版systemctl enable ceph-osd$ID systemctl start ceph-osd$ID示例systemctl enable ceph-osd12 systemctl start ceph-osd12systemd 单元ceph-osd.service的ExecStart为ceph-osd -f --id %i --setuser ceph --setgroup ceph并在启动前执行ceph-osd-prestart.sh --id %i预处理见 systemd/ceph-osd.service.in。添加 MDSMDS元数据服务器的手工部署步骤参见 CephFS 文档中关于手动部署的章节doc/cephfs/add-remove-mds.rst本文不再展开。手动安装 RADOSGWRADOSGW 手工安装的完整流程如下更深入的讨论可参见 ceph-users 邮件列表中的相关主题1. 安装 radosgw 软件包在将作为 RGW 节点的机器上安装radosgw软件包。2. 创建 RGW 认证用户在 Monitor 或拥有管理员权限的节点上执行ceph auth get-or-create client.$(hostname -s) mon profile rgw osd profile rgw3. 在 RGW 节点上准备目录与 keyringa. 创建ceph用户属主的目录例如install -d -o ceph -g ceph /var/lib/ceph/radosgw/ceph-$(hostname -s)b. 进入该目录并创建keyring文件touch /var/lib/ceph/radosgw/ceph-$(hostname -s)/keyring用编辑器把前面ceph auth get-or-create输出的密钥写入 keyring 文件$EDITOR /var/lib/ceph/radosgw/ceph-$(hostname -s)/keyringc. 在每个 RGW 节点上重复以上步骤。4. 启动 RADOSGW 服务systemctl start ceph-radosgw$(hostname -s).service对应的 systemd 单元模板见 systemd/ceph-radosgw.service.in。验证与后续运维Monitor 与两个 OSD 都正常运行后可以观察 PG 的 peering 过程ceph -w查看 CRUSH 树ceph osd tree输出大致如下# id weight type name up/down reweight -1 2 root default -2 2 host osd-node1 0 1 osd.0 up 1 -3 1 host osd-node2 1 1 osd.1 up 1可以看到 osd.0 与 osd.1 均处于up状态并归属各自的 host。后续如需增删 Monitor 或 OSD增删 Monitor参见文档中 adding-and-removing-monitors 相关章节增删 OSD参见 doc/rados/operations/add-or-rm-osds.rst。小结手工部署 Ceph 集群的核心链路可以概括为生成 fsid 与密钥 → 组装 monmap →ceph-mon --mkfs初始化 → systemd 启动 →ceph-volume或纯手工添加 OSD → 按需添加 MDS / RADOSGW。其中密钥体系的构建依赖ceph-authtoolsrc/tools/ceph_authtool.ccmonitor map 的构建依赖monmaptoolsrc/tools/monmaptool.ccOSD 的快速部署依赖ceph-volumesrc/ceph-volume/ceph_volume/devices/lvm/而守护进程的托管则统一由 systemd 模板单元完成。理解这条链路不仅是排查手工部署问题的关键也为开发自有部署工具提供了最小可复现的参考模型。赞分享存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载相关推荐Ceph 在 FreeBSD 上的手动部署完整指南ZFS 磁盘布局、Monitor 引导与 OSD 添加实战Ceph 在 FreeBSD 上的手动部署完整指南ZFS 磁盘布局、Monitor 引导与 OSD 添加实战 导读Ceph 的容器化部署工具 cephadm存储分布式文件系统对象存储后端高可用Ceph 集群 OSD 部署工具 ceph-volume 完全指南从 ceph-disk 迁移到 LVM 标签化管理的架构与实战Ceph 集群 OSD 部署工具 ceph volume 完全指南从 ceph disk 迁移到 LVM 标签化管理的架构与实战 ceph volume 是当存储分布式文件系统对象存储后端高可用Ceph ceph-volume 完全指南基于 LVM 的 OSD 部署、激活与迁移实战Ceph ceph volume 完全指南基于 LVM 的 OSD 部署、激活与迁移实战 ceph volume 是 Ceph 集群中负责部署和管理 OSD存储分布式文件系统对象存储后端高可用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表