一、Ceph的架构Ceph Cluster:
Heart of Ceph distributed object store 是Ceph分布式对象存储的核心
Referred to as reliable autonomic distributed object store (RADOS)
Consists of device nodes and monitor nodes 由OSD节点和Monitor节点组成
Device nodes OSD节点
Servers with multiple disks X86服务器配置了较多的磁盘
Each disk is Ceph object storage device (OSD) 每个磁盘是一个OSD
Daemons:进程
Join Ceph OSDs to cluster
Serve requests for data residing on OSDs
Communicate OSD status
Monitor nodes
Servers ideally distinct from OSD servers
Run intelligent daemons called Ceph MON daemons
Daemons monitor system state
二、Ceph的算法与设计
CRUSH数据放置算法
基础设施感知、快速响应故障
计算出数据位置
客户端与存储数据的服务器通信
客户端执行并行I / O以大大提高吞吐量
高度可扩展
支持大量活动/活动元数据服务器
提供高吞吐量和带宽
非常可靠和可用
完整的POSIX语义和一致性保证
有FUSE客户端,集成到Linux内核中
三、Ceph的角色
Monitors
主要作用:维护集群状态,为分布式决策提供共识
管理关键RADOS集群状态和配置信息
维护CRUSH Map的主副本
Ceph守护进程/客户端使用监视器检查以确保它们具有最新的映射副本
Monitor不向客户端提供存储的对象
必须有奇数
最低:三
Monitors的Quorum作用
在具有偶数Monitors的群集中,群集可能会发生脑裂
要使Ceph集群可操作/可访问,至少有一半以上的Monitors必须正在运行
在关键环境中,请考虑5个Monitors
Monitors映射是Ceph集群为操作维护的一个映射
Ceph Journal
为了提高性能/可靠性,Ceph OSD在写入文件系统时使用日志
每个OSD都有专门使用的日志
将每个操作的描述写入日志
写入最少数量的副本日志时,写入RADOS群集
提交对文件系统的操作
进程可以对对象进行原子更新
Journals提高了可靠性
如果OSD或节点出现故障,则重新启动时日志会replay
保留“in-flight”事务,确保磁盘数据的一致性
replay序列在上次同步操作完成后开始,因为先前的日志记录被修剪掉了
Journals使用设备节点上的原始卷
更好的性能,更高的一致性
小I / O请求为主机文件系统提供了合并写入的时间
每隔几秒,OSD停止写入,同步日志与执行的文件系统提交
从日志修剪完成的操作以回收日志磁盘卷上的空间
默认值:Ceph日志写入与OSD数据相同的磁盘
更好的性能:配置日志以写入自己的高性能硬盘(SSD)
OSD包括:
One hard disk
One Linux file system
One Ceph OSD daemon
文件系统
每个OSD将磁盘和底层文件系统连接到Ceph集群
文件系统必须是xfs或ext4
后续会支持ZFS
必须支持并启用XATTR
用于存储和检索有关以下内容的信息:
内部对象状态
快照元数据
Ceph网关访问控制列表(ACL)
文件系统选择推荐:从稳定性考虑,建议使用xfs
OSD设计和目标
使计算能力尽可能接近数据
启用计算能力以执行最大程度的处理
当前:OSD处理基于角色作为主要或次要的功能
未来:Ceph利用OSD和数据之间的联系来扩展OSD计算能力
四、Ceph的Storage Pool
存储池:用于存储对象数据的逻辑分区
允许数据:
在逻辑上分类
存储在对象存储系统中时应用规则
对于存储对象,池定义/指定:
所有权和访问权限
对象副本数
PG的数量
CRUSH规则设置使用
Storage Pool的特性
Pool内的PG动态映射到OSD
首次部署集群而不创建池时,Ceph使用默认池来存储数据
为池指定的一个属性:存储在池中的对象的默认副本数
池与CRUSH基于位置的buckets 不同,因为池中没有单个物理位置
Storage Pool的属性:
Ceph集群默认的三个Storage Pool
data
metadata
rbd
如果想创建额外的Storage Pool,需要指定:
Name
Number of PGs that can belong to pool
五、对Ceph访问方式
对Ceph的访问
所有访问方法都建立在librados之上
提供对Ceph集群(RADOS)的本机访问
适用于C,C ++,Python,PHP,Java™,Erlang
推荐:开发时,直接在应用程序中使用librados
librados为Ceph环境提供了访问,可靠性和性能的最佳结果
其他易于使用和实施的访问方法:
RADOS块设备(RBD)
RADOS网关(RADOSGW)
CephFS
CephFS:
并行文件系统
提供可大规模扩展的单层次共享磁盘
元数据服务器(MDS)负责文件系统中文件的元数据信息
示例:访问,修改,创建日期
在Ceph集群中存储数据
六、通过Ansible的部署Docker格式的Ceph
本实验,我们使用ansible部署Ceph3(Ceph3是docker image)。使用的镜像是由红帽官网提供:registry.access.redhat.com。
在实验环境中,有一个部署服务器。我们首先在部署服务器上安装docker-distribution,然后,从红帽官网拉取Ceph的docker imager。然后将Ceph集群节点上的镜像仓库指定到部署服务器上。
首先安装docker-distribution
配置docker-distribution的端口的域名:
生成证书:
启动docker-distribution进程:
在部署服务器上安装docker:
接下来,配置脚本,红帽官网拉取Ceph docker image,并推送到本地仓库:
部署服务器上安装ceph-ansible包
配置Ceph节点的inventory文件:
书写playbook,对节点进行预配置:
对三个节点进行预配置
接下来,创建对三个节点的admin用户ssh信任:
接下来,配置ansible.cfg(该配置文件中定义了ansible的主机的默认配置部分,如默认是否需要输入密码、是否开启sudo认证、action_plugins插件的位置、hosts主机组的位置、是否开启log功能、默认端口、key文件位置等等。)
配置all.yml文件,里面定义了ceph集群的相关参数:
osds.yml定了了OSD的参数配置:
mons.yml定义了和监控相关的参数
根据模板,创建site-docker.yml主playbook(下面贴出了具体内容供参考)
[root@workstation-e6c4 ~]# cat /usr/share/ceph-ansible/site-docker.yml
# Defines deployment design and assigns role to server groups
- hosts:
- mons
- agents
- osds
- mdss
- rgws
- nfss
- restapis
- rbdmirrors
- clients
- iscsigws
- mgrs
gather_facts: false
tasks:
become: True
vars:
delegate_facts_host: True
pre_tasks:
- name: gather facts
setup:
when:
- not delegate_facts_host | bool
- name: gather and delegate facts
setup:
delegate_to: "{{ item }}"
delegate_facts: True
with_items: "{{ groups['all'] }}"
run_once: true
when:
- delegate_facts_host | bool
- hosts: mons
become: True
gather_facts: false
roles:
- ceph-defaults
- ceph-docker-common
- ceph-config
- ceph-mon
serial: 1 # MUST be '1' WHEN DEPLOYING MONITORS ON DOCKER CONTAINERS
- hosts: mgrs
become: True
gather_facts: false
roles:
- ceph-defaults
- ceph-docker-common
- { role: ceph-config, when: "ceph_release_num.{{ ceph_release }} >= ceph_release_num.luminous" }
- { role: ceph-mgr, when: "ceph_release_num.{{ ceph_release }} >= ceph_release_num.luminous" }
- hosts: osds
become: True
gather_facts: false
roles:
- ceph-defaults
- ceph-docker-common
- ceph-config
- ceph-osd
- hosts: mdss
become: True
gather_facts: false
roles:
- ceph-defaults
- ceph-docker-common
- ceph-config
- ceph-mds
- hosts: rgws
become: True
gather_facts: false
roles:
- ceph-defaults
- ceph-docker-common
- ceph-config
- ceph-rgw
- hosts: nfss
become: True
gather_facts: false
roles:
- ceph-defaults
- ceph-docker-common
- { role: ceph-config, when: "ceph_release_num.{{ ceph_release }} >= ceph_release_num.luminous" }
- { role: ceph-nfs, when: "ceph_release_num.{{ ceph_release }} >= ceph_release_num.luminous" }
- hosts: rbdmirrors
become: True
gather_facts: false
roles:
- ceph-defaults
- ceph-docker-common
- ceph-config
- ceph-rbd-mirror
- hosts: restapis
become: True
gather_facts: false
roles:
- ceph-defaults
- ceph-docker-common
- ceph-config
- ceph-restapi
- hosts: clients
become: True
gather_facts: false
roles:
- ceph-defaults
- ceph-docker-common
- ceph-config
- ceph-client
执行Playbook,安装Ceph:
在部署节点上安装 ceph-common 软件:
将管理秘钥复制到部署服务器:
查看Ceph集群的状态:
查看Ceph集群的健康状态:
查看OSD:
接下来,到ceph-node2上检查docker(可以看到mgr、osd、mon角色都是以docker方式在运行)
查看Ceph进程(docker的系统守护进程):
部署成功。
通过Ansible以Docker形式部署Ceph3
原创mb5fdcad5445be3 ©著作权
©著作权归作者所有:来自51CTO博客作者mb5fdcad5445be3的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章