Ceph 是一个开源的分布式存储系统,它提供了对象存储、块存储和文件系统存储。Ceph 的设计目标是高度可扩展性和高性能,同时提供无单点故障的高可用性。
Ceph 架构
Ceph 的架构主要包括以下组件:
-
Monitor (MON):
- Ceph Monitor 负责维护集群的状态,包括存储节点的成员信息和数据分布图。它们是Ceph集群的中枢,保证了集群的一致性和健康状态。
-
Object Storage Daemon (OSD):
- Ceph OSD 守护进程负责存储数据、处理数据复制、恢复、回填、重新平衡等任务。一个Ceph集群通常有多个OSD,每个OSD守护进程管理一个物理硬盘或一个逻辑卷。
-
Metadata Server (MDS):
- Ceph 元数据服务器用于Ceph文件系统(CephFS),它管理文件系统元数据(例如目录和文件的层次结构),使CephFS能够提供高性能的文件系统存储服务。
-
Ceph Manager (Mgr):
- Ceph Manager模块收集集群的状态和性能指标,提供仪表板和API来监控和管理Ceph集群。
部署Ceph
部署Ceph可以使用多种方法,例如手动部署、使用Ceph-deploy工具或Ceph-Ansible。这里介绍一种基于Ceph-Ansible的部署方法,它适合于自动化和大规模部署。
准备工作
-
环境准备:
- 多台服务器(至少3台)用于部署Ceph集群,确保每台服务器上安装了CentOS/RHEL或Ubuntu。
- 配置好网络和时间同步,确保每台服务器可以相互通信。
- 确保每台服务器上有足够的磁盘空间。
-
安装Ansible和Ceph-Ansible:
sudo yum install -y epel-release sudo yum install -y ansible git clone https://github.com/ceph/ceph-ansible.git cd ceph-ansible git checkout stable-7.0 # 对应Ceph版本
配置Ansible Inventory
创建一个Ansible Inventory文件,定义集群节点。
inventory.ini
[mons]
mon1 ansible_host=192.168.1.101
mon2 ansible_host=192.168.1.102
mon3 ansible_host=192.168.1.103
[osds]
osd1 ansible_host=192.168.1.104
osd2 ansible_host=192.168.1.105
osd3 ansible_host=192.168.1.106
[mgrs]
mgr1 ansible_host=192.168.1.107
mgr2 ansible_host=192.168.1.108
[mgrs:vars]
ceph_mgrs=${mgr1}:${mgr2}
配置Ceph-Ansible变量
在 group_vars
目录中创建变量文件。
group_vars/all.yml
ceph_origin: repository
ceph_repository: community
ceph_stable_release: quincy # Ceph 7.0 对应的版本
monitor_interface: eth0 # 根据实际网络接口名修改
public_network: 192.168.1.0/24
osd_objectstore: bluestore
执行部署
执行以下命令来部署Ceph集群:
ansible-playbook -i inventory.ini site.yml
这个过程会自动执行Ceph集群的初始化和配置,包括安装软件包、配置网络、初始化Monitor、OSD、MDS和Manager等组件。
验证部署
-
查看Ceph集群状态:
ceph -s
-
检查集群健康状态:
ceph health
Ceph 客户端使用
Ceph 提供了多种存储接口,包括RADOSGW对象存储、RBD块存储和CephFS文件系统。
使用RADOSGW对象存储
-
安装s3cmd工具:
sudo yum install -y s3cmd
-
配置s3cmd:
s3cmd --configure
使用RBD块存储
-
创建RBD映像:
rbd create myimage --size 10240
-
映射RBD映像:
rbd map myimage
-
格式化并挂载RBD映像:
mkfs.ext4 /dev/rbd0 mount /dev/rbd0 /mnt
使用CephFS文件系统
-
创建CephFS:
ceph fs volume create myfs
-
挂载CephFS:
mount -t ceph mon1:6789:/ /mnt/cephfs -o name=admin,secret=<admin-secret>
总结
Ceph 是一个强大的分布式存储系统,通过自动化部署工具如Ceph-Ansible,可以方便地部署和管理Ceph集群。Ceph 提供了多种存储接口,满足不同的存储需求。