面对时刻增长的数据,企业需要找到一种经济、可靠、高效、可扩容的存储数据的方式 。ceph 无疑是个好选择 。本文是 “Ceph 分布式存储最佳实践” 的第一篇文章,主要包括以下主题:
- Ceph 介绍
- 部署环境介绍
- 部署 Ceph 集群
- 总结
Ceph 是一个开源的、分布式的、可扩展的、软件定义的存储系统,可以提供块、对象和文件存储 。
传统的存储系统通过一张表集中记录元数据 。客户端每次发出读写请求,存储系统首先从这个表中查找元数据,得到结果后,才能执行客户端的操作请求 。如果存储集群很大,这种方式可能引发性能瓶颈,也限制了存储系统的可扩展性 。
Ceph 通过 CRUSH (Controlled Replication Under Scalable Hashing) 算法,在后台动态计算数据读取或写入位置,客户端直接连接 OSD,提高了数据的读写性能 。通过动态计算元数据,Ceph 避免了元数据表的限制,提高了可扩展性 。
Ceph 中包含了很多概念,比如 Monitor、Manager、OSD、PG、MDS 等 。系列文章以部署一个高可用的 Ceph 集群作为开端,理论与实践结合,逐步讨论 Ceph 的概念及使用 。因此搭建一套高可用的 Ceph 集群,是学习 “Ceph 分布式存储最佳实践” 的基础 。
1.2 部署环境介绍
完成本教程需要七个节点:一个节点作为 Ansible 控制节点,六个节点部署 Ceph 集群,它们的详细角色如下 。
1.2.1 节点信息
七个节点分别为 2 核 CPU、2 GB 内存的虚拟机,安装了 Rocky linux release 9.1 操作系统 。
Ansible Inventory hosts:
[ceph] ceph1.server.aiops.red ceph2.server.aiops.red ceph3.server.aiops.red ceph4.server.aiops.red ceph5.server.aiops.red ceph6.server.aiops.red
Ceph 集群主机角色如下:
主机名:ceph1.server.aiops.red, IP:10.211.55.44, 角色:cephadm、mon、mgr 主机名:ceph2.server.aiops.red, IP:10.211.55.45, 角色:mon、mgr 主机名:ceph3.server.aiops.red, IP:10.211.55.46, 角色:mon、mgr 主机名:ceph4.server.aiops.red, IP:10.211.55.48, 角色:osd, 额外磁盘:/dev/sdb、/dev/sdc、/dev/sdd 主机名:ceph5.server.aiops.red, IP:10.211.55.49, 角色:osd, 额外磁盘:/dev/sdb、/dev/sdc、/dev/sdd 主机名:ceph6.server.aiops.red, IP:10.211.55.50, 角色:osd, 额外磁盘:/dev/sdb、/dev/sdc、/dev/sdd
1.2.2 节点要求为使安装顺利进行,节点应满足以下要求 。
1.2.2.1 时钟同步
Ceph 集群各节点时钟应保持一致,这也是分布式系统的基本要求 。要自动化实现时钟同步,可以参考 “Linux 9 自动化部署 NTP 服务” 。
1.2.2.2 主机名解析
Ansible 控制节点、Ceph 各节点间应能通过主机名访问 。要实现主机名称解析,可以在主机的 /etc/hosts 文件中指定节点的 IP、主机名条目,或者参考 “Linux 9 自动化部署 DNS 服务” 一文配置 DNS 服务 。
1.2.2.3 账号权限
Ansible 控制节点能够免密登录 Ceph 节点,并能免密执行 sudo 。可以参考 “Linux 9 自动化部署 NTP 服务” 中的 “部署环境要求” 一节实现 。在满足了以上要求后,开始部署 Ceph 高可用集群 。
1.3 使用 Cephadm 部署 Ceph 集群
在安装 Ceph 集群自身时,使用 cephadm 工具;在对主机进行操作时,可以使用 Ansible 自动化工具 。
1.3.1 更新软件包
Ceph 节点是新装的操作系统,最好统一执行软件包的更新操作 。可以通过 Ansible 完成,以下是自动更新软件包、并在更新完成后重启操作系统的 Ansible Playbook:
upgrade_packages.yaml:
#!/usr/bin/env ansible-Playbook --- - name: upgrade packages play hosts: ceph gather_facts: false become: true tasks: - name: upgrade packages task ansible.builtin.dnf: update_cache: true name: "*" state: latest register: upgradeResult - name: reboot system task reboot: when: upgradeResult.changed ...
执行此 Playbook,完成软件包更新:
$ ansible-playbook upgrade_packages.yaml
此操作在 Ansible 节点上执行 。
1.3.2 安装依赖包
cephadm 部署 Ceph 集群时,依赖 Python/ target=_blank class=infotextkey>Python3、Systemd、Podman、LVM2,这些工具 Rocky Linux 9 默认已经安装了 。也可以通过以下 Playbook,执行安装:
ceph-dependent.yaml:
--- - name: install cephadm dependent packages hosts: ceph become: true gather_facts: false tasks: - name: install packages dnf: name: - Python3 - lvm2 - podman state: present ...
在 Ansible 控制节点上执行:
推荐阅读
- 学linux有前途吗,linux发展前景分析
- win10安装linux有什么方法,win10安装linux子系统教程
- 学linux有前途吗,linux技术前景分析
- Linux的用户为何常年上不去?
- 工作安排部署怎么写,日常工作安排表范本
- 服务器该选择windows系统还是linux系统? 服务器系统
- 美国入侵格林纳达有哪些战略部署 美国入侵格林纳达开创了什么战争新模式
- linux,下如何完全删除用户 怎样删除用户账户
- 初入职场的我认识到linux的重要性
- Linux 9 自动化部署 Kafka 集群