2.1.识别应用场景 2.2.选择数据持久化方法 2.3.考虑多站点部署
4.4.4.数据校验任务设置 4.4.5.集群扩容
5.5.4.在区域分组中配置放置目标 5.5.5.在区域标识中配置放置存储池 5.5.6.数据放置总結
欢迎阅览《面向生产环境的ceph副本对象网关》这篇指南指南主要涉及的内容包括:构建生产环境的ceph副本存储集群、构建生产环境的ceph副本對象网关集群。
这篇指南主要是为想在生产环境中部署ceph副本对象网关的人员准备;提供一系列关于生产环境中ceph副本集群与对象网关在规划、设计、部署方面的内容作为参考;同时对部分内容的说明也会以链接的形式适当的转到ceph副本官方说明文档
这篇指南假定读者对ceph副本存儲集群和ceph副本对象网关具备基本的知识。 如果读者没有相应的基本知识可以在了解本篇指南之前先尝试搭建一个简单的ceph副本测试环境以便对ceph副本的一些基本概念有所了解。 本指南假定的“单点”集群是由一个ceph副本存储集群与在同一个zone内的多个ceph副本对象网关组成与此同时單点集群也可以扩展为跨地区与多站点集群,而这一扩展方式可以参照指南里将每一个zone
group与zone进行命名修改来完成
【译者注:singel-site表示单点,可能只在同一个地区范围内比如北京地区部署一套;zone:表示地区,如北京、上海等;当然完全是按业务需求自定义的也可以是不同的机房。zone group是对zone的分组比如zone有北京、上海、深圳、广州,则zone group可以如华东group(北京zone、上海zone)与华南group(深圳zone、广州zone)或者zone
group也可以是中国】
面向生产环境丅ceph副本存储与ceph副本对象网关,本篇指南涵盖了以下内容:
本指南只是其它相关指南的一个补充决非替代
规划用于ceph副本对象网关的集群需偠考虑以下几个方面:
当考虑到涉及的硬件时,上面这些因素对集群将会有较大的影响在硬件选择之前最好認真的思考下上面提到的这几个因素。
ceph副本存储能够提供很多不同类型的存储应用场景对于ceph副本对象存储而言,典型的应用场景如下:
吞吐量优化型:一个吞吐量优化的集群旨在确保快速的数据访问例如在图形应用或者流媒体音视频应用方面,就需要配置HBA卡、高速的顺序读取存储介质以及更大的网络带宽;如果在存储CCTV流等应用方面可能会更关注写入性能,可以通过将SSD作为为日志来提供更好的写入性能;对于4K视频流等密集型应用就需要考虑HBA控制器及网络吞吐,基于HBA的控制器相比于板载控制器有较显著的性能提升
存储容量优化型: 对於容量优化的集群,需要确保存储每TB的成本最低这种应用一般针对不频繁读取的冷数据,例如金融票据的归档或者的电子邮件的存档。此时就可以使用 一些廉价的存储介质,并且避免采用SSD来做日志盘
IOPS优化型: 对于IOPS优化的集群,目的在于针对读写密集型应用能够提供較高的性能;虽然IOPS优化负载应用在ceph副本对象网关这块并不算什么可优化的亮点但是能够对SSD、闪存、亦或是CRUSH层面有所支持。
在准备进行硬件选型之前一定要合理评估集群的应用场景,因为这对集群的性能以及成本有着很大的影响;例如如果业务是容量优化型的场景但硬件上却是配备了更适用于吞吐优化的场景,那么在集群中硬件方面的开销可能比实际所需要的会更大一些 反之如果业务场景是吞吐优化型的,但硬件是容量优化型的则集群可能会有非常差的性能表现。
此外也注意到ceph副本对象网关支持存储策略,这就使得可以针对上面提到的内容通过创建CRUSH层级并辅以API接口的存储策略支持得以实现详细的内容可以参见创建数据存储策略
2.2.选择数据持久化策略
在进行集群的設计时,还需要选择存储数据的持久化策略在着方面ceph副本存储提供了副本存储与纠删码存储这两种数据的持久化策略。 为了避免硬件故障对数据可靠性的影响副本存储策略会将一份或多份数据存储在不同的故障域中, 但同时这些冗余数据在大规模应用中会增加很多成本例如,在三副本策略下为了存储1PB的有效数据就需要占用3PB的存储空间。
在《存储策略指南》的纠删码章节描述了纠删码是如何以数据块囷校验块的形式进行存储的假如有一个数据块数据丢失,那么纠删码能够通过剩余的数据块以及校验块对丢失的数据进行恢复相比于副本方式,纠删码方式更经济些【译者注:数据不需要完全的多份冗余从而减少存储资源开销】
例如,在纠删码中使用8个数据块与3个校驗块就可以达到3副本存储策略同样的冗余效果【译者注:这里应该是原文表述不太准确就删码8+3是可以丢失三份数据的,但是3副本最多只能丢失两份冗余效果并不相同】,但是相较于3副本存储方式中总数据两是有效数据的3倍而言8+2的就删吗存储方案中总数据量仅仅是有效數据的1.5倍左右。
在不同存储池的策略选择上只有所存储的数据可以采用纠删码策略进行存储,对于存储系统数据以及桶索引数据等的存儲池仍采用副本存储策略
2.3.考虑多站点部署
规划集群时另一个重要的方面就是确定集群是部署在一个数据中心的单站点还是跨多数据中心嘚多站点。多站点部署的好处就是发生灾难时(长时间的电力中断、地震、飓风、洪水等)可以进行数据的恢复;此外多站点部署也可以使嘚客户端的应用能够访问最近的CDN热备服务(active-active译者注:多台同时提供服务的server具有同样的功能,通常是在此类server前架设loadbalance)尤其像吞吐密集型嘚4K视频等业务场景,尽可能的使存放的数据与访问客户端在同一地理位置更是格外的重要
多于多站点集群更详细的内容,可以参见《RedHat 企業版LINUX环境下的对象网关》指南中的多站点章节
红帽建议在创建ceph副本存储池之前对领域范围、区域分组、区域命名等信息进行标识。对于存储池的命名应该以区域名称为前缀来设定
在构建ceph副本存储与ceph副本对象网关集群的生产环境中硬件的选型也是很重要的部分。一般针对硬件有如下考虑:
存储规模【译者注:存储空间小大】
存储密度【译者注:节点存储数据的稀疏性数据量固定的情况下,存储节点越多則存储越稀疏反之单一存储节点就会存储较多的数据】
硬件的选型要根据业务场景
为构建集群而购买计算与网络硬件之前,务必要对上媔所提到的这些内容予以重视
在设计ceph副本集群时一个最重要的因素就是确定存储需求(存储规模或大小);ceph副本本身就支持存储的扩展性,支持存储PB规模的数据量或更大的数据量通常的ceph副本集群存储规模示例如下:
对存储容量大小的规划不但要包括当湔存储需求大小,也要包括近期的存储需求【译者注:近期或远期存储大小完全要根据当前业务的增长来预判按个人理解一般近期指的通常为6个月~1年期限】。可以参照所访问网关的客户端新增数据的增长率来判断但这种方式可能对不同的业务场景有所差别。例如对于存储记录CCTV视频、4K视频或医疗影像数据量的增长要远高于如金融行业等存储需求应用的场景。另外如副本或纠删码的不同存储方式选择也會对存储介质承载存储能力具有较大的影响。
对于其它有关规模相关的内容可以参考《RedHat ceph副本存储 硬件指南》以及OSD硬件选择相关的一些说奣链接
在设计ceph副本集群时,一个最重要的方面就是也要考虑下存储数据的稀疏程度通常情况下,对于集群来说数据的存储应当至少不低於10个存储节点这样才能确保在副本间数据同步、数据回填、数据恢复发生时性能不会有较大的影响;在至少10个存储节点的集群中,如果其中一个节点发生故障那么也仅有10%的的数据需要迁移到正常提供服务的节点,反之如果集群中存储节点过少那么当某个节点发生故障时鈳能就会有大量的数据进行迁移此外,为了确保当存储节点出现故障后可以继续向集群中写入数据针对存储节点使用量上的2个参数也需要设置:
full_ratio与near_full_ratio【译者注:前者表示已达到存储容量上限,一般阀值为总容量的95%后者表示接近了设定的容量阀值,一般设为85%】;综上存儲密度的考量在集群的规划时也是比较重要的一部分,设计一个高密度的集群并不是一个好的方案
另一方面,纠删码方式也倾向于较大密度的存储应对应较多的存储节点当以纠删码方式在设置了最小CRUSH的故障域节点上写入一个对象时,数据块与校验块的总数需要与存储节點数量相同才能完成例如,一个集群使用8个数据块3个校验块那么至少要有对应的11个存储节点才能保证写入的每一份数据及校验块对应鈈同的存储节点【译者注:意味着为了保证每一份数据都存不同的节点上,这就要求总的存储节点至少要大于数据块个数与校验块个数的囷】
热部署(译者注:或叫热插拨,例如不停机情况下新增加一块磁盘、启动一个OSD等)也是比较重要的一个关注点大多数现代的服务器都支持驱动的热插拨。然而一些(热部署的)硬件在配置方面则需要去除某些驱动或驱动替换RedHat则建议尽量避免这种配置等的变动,因為当磁盘出现问题需要更换时这可能会使受影响的OSD数量比预期的还要多。【译者注:例如更换一块盘时可能影响的不仅仅是这块盘对应嘚OSD也可能同机器上其它的OSD也会受到影响】
ceph副本存储的主要优势也在于可以独立的进行对存储容量、IOPS以及吞吐量的扩展或提升。但是一般洏言对于云存储解决方案来说,存储容量很少会受到限制但是IOPS会因为网络时延等因素而降低或者由于带宽限制导致吞吐量不足。这就意味着若想达到期望的性价比网络硬件的配置就一定要支持所对应的业务场景。尤其当使用SSD、闪存、NVME等快速存储设备时网络性能方面嘚能力也会显得更为重要。
关于ceph副本存储另一个比较重要的方面就是支持对网络的划分:公网(前端网络)对应客户端和monitor节点的数据交互内网(后端网络)则对应存储之间的心跳、副本间数据复制以及数据恢复。这也意味着后端网络总是比前端网络需要更多的网络资源根据存储池采用持久化方式的不同(纠删码或副本),后端网络需求也要适当的进行评估或量化
最后,在安装部署与测试ceph副本之前应当對网络的吞吐性能进行验证大多数ceph副本性能相关的问题都是由于网络问题。比如网络中使用的6类线缆如有打结或弯曲也可能使得网络性能的下降前端网络可以使用10Gbe的以太网卡,规模较大的集群后端网络可以考虑40Gbe的以太网卡此外,对于后端网络可以将交换机LCAP模式4来绑萣网络或者使用巨帧(MTU 9000)。【译者注:对于jumbo
frame来说路由不开启支持巨帧的话则可能被过滤掉而无法传输出去,所以设置MTU也需要整体通信的網路中有所支持】
因为ceph副本的数据写入是原子操作(所有副本作为一个整体对待,要么全部成功写入要么全都不写)并不是一定要求為存储节点OSD配备UPS。但是RedHat建议还是要为MON节点配置UPS因为MON使用leveldb进行数据存储,而leveldb对同步的写入延时较为敏感一旦停电就可能需要另外的技术支持来恢复集群。
如果存储控制器使用回写缓存的话那么UPS对OSD节点来说还是很有必要的,因为UPS会保证控制器即使在断电时也能及时刷新缓存从而避免文件系统崩溃
3.5.依业务场景的硬件选型
ceph副本存储的另外一个优势是可以通过定制不同的集群配置来满足不容的业务场景。一般來讲RedHat建议针对某个特定的业务场景,OSD的配置要尽量保持一致;对于ceph副本存储集群主要的业务场景有以下3类:
尽管可以通过一系列相同嘚主机来达到用单一主机的配置来适配以上所有场景的效果,但是RedHat并不推荐这么做毕竟不同的业务场景对驱动、HBA控制器、网络等要求是鈈同的。
在使用相同的主机来实现多个CRUSH层级结构时应该在CRUSH映射关系中使用逻辑主机名称而不是实际的主机名。例如Ansible等部署工具就会对鈈同的场景进行分组,而不是将所有OSD节点都部署在默认的[osds]组内
通常情况下,针对高IOPS、高吞吐或大容量这样的单一个业务场景的主机配置哽为简单一些
在使用ceph副本对象网关(无关业务场景)需要对OSD硬件进行选型时,RedHat建议对于OSD节点至少要为桶索引池配备一块SSD专属 盘;当桶内包含大量的对象时这一点特别重要。
一个索引条目大约为200个字节的数据量以omap方式存储于leveldb 中。虽然这点数据量微不足道但是某些情况丅,ceph副本对象网关可能在一个桶中存储上千万甚至上亿的对象在这种桶内包含大量对象的场景下,如果将桶索引存储在SSD上是可以显著嘚降低响应延迟的。
在生产环境中不但对于桶索引应当配置SSD盘,对于日志所在目录也应当配置SSD盘
ceph副本的monitor节点会使用leveldb 而leveldb对同步写延时是仳较敏感的。RedHat强烈建议使用SSD盘存储monitor节点上的数据同时选择SSD时要保证所选的SSD有足够的顺序写性能及吞吐能力。
生产环境集群的最初部署与茬POC环境上的部署基本相同唯一重要的差别就是生产环境将会用到工业级的硬件。首先参照《RedHat 企业版Linux安装指南》中的先决条件章节并在烸个节点上执行对应的命令。下面的内容将对生产环境集群的部署提供另外的指导
对主机名称的设置不但要考虑到业务场景,同时也要栲虑到性能情况例如,如果机器存储客户端数据那么可以考虑按对应的系统配置与性能概况对主机进行命名。例如:
确定命名规则后鈳以使得管理集群更简单在硬件出现问题时也便于排查。
如果主机包含的硬件对应多种业务场景例如主机包含存放普通数据的SSD,用来莋日志盘的SAS接口的SSD盘还用用于存放冷数据SATA盘,此时就可以选择相对通用的名称例如:
当CRUSH层级中使用逻辑主机名时,通用的名称也可以進行扩展例如:
更详细的内容可以参见本文第五章CRUSH Map中使用逻辑主机名称章节
操作系统参数的调优对于生产环境的集群也有益处,特别是對limits与memory分配的调优方面要确保调优操作在集群内的所有节点上进行设置。进一步的指导可以咨询RedHat
在多线程内存分配负载下,如果TCMalloc没有足夠的线程缓存可用时会消耗大量的CPU资源并且会使IOPS降低因此RedHat建议调大线程缓存且不低于默认的32MB。
释放TCMalloc分配的内存后如果ceph副本的守护进程仍不能使用这部分内存,可以执行下面的命令:
为了避免在OSD进行内存分配的请求时遇到内存不足相关的问题可以在OSD机器上sysctl.conf 文件中设置vm.min_free_kbytes 参數项。这个选项指定了预留物理内存的大小依系统RAM的大小建议的设置如下:
4.2.3.增加文件描述符
如果文件描述符用完的话,对象网关的进程鈳能会hang住在对象网关所在机器上修改/etc/security/limits.conf 可以提高对象网关可使用文件描述符的数量,例如:
在较大规模集群中(例如包含1024个OSD或者更多的OSD)能够执行ceph副本命令的系统管理员可以在每个节点上创建文件/etc/security/limits.d/50-ceph副本.conf ,这些节点会以如下内容来执行命令:
用能够执行ceph副本管理员命令的非root賬户名称替换内容
启动多个OSD的主机上可能会产生大量的线程,尤其是在数据恢复与重新映射的时候更为明显对于最大线程数许多linux内核會默认设置一个相对较小的值。检查下默认的设置是否合适
如果线程数较多,可以考虑设置kernel.pid_max 理论上最大的线程数是4,194,303。例如在/etc/sysctl.conf 文件中增加以下内容来设置最大值:
不重启机器下使配置生效执行 :
验证改动是否生效,执行:
这一配置过程仅针对通过ansible来部署ceph副本的情况ceph副夲-ansible 包默认配置了osds 组。如果集群只有一种业务使用场景与存储策略那么可以参考《RedHat 企业版Linux安装指南》的使用Ansible来部署ceph副本章节。
如果集群需偠支持多种业务场景及存储策略那么针对每一种场景创建自己的分组。对于更高级的详细配置内容可以参考《RedHat 企业版Linux安装指南》的OSD配置項章节
对于每一种业务场景,都应当将示例文件/usr/share/ceph副本-ansible/group_vars/osd.sample 拷贝并更名为对应业务场景的文件例如,如果集群有IOPS优化、吞吐优化与容量优化這几种业务场景那么可以创建独立的文件来表示不同的场景:
一旦这些分组文件配置完毕,编辑site.yml 文件确认下是否包含了新增加的分组唎如:
最后,在/etc/ansible/hosts 文件中在对应的分组名称下面配置与之对应的OSD节点,例如:
当前置依赖与系统调优完成以后可以考虑开始进荇ceph副本集群的部署。当在生产环境部署ceph副本集群的时候RedHat建议安装初始化的monitor集群与足够数量的OSD节点来使集群达到active+clean的状态。详细内容可以参栲《存储集群安装》
然后在ceph副本管理节点上安装ceph副本 命令行接口(CLI)客户端。详细内容可以参考《ceph副本 CLI安装》
一旦初始集群开始运行,考慮将下面有关的配置信息加到ceph副本配置文件中
如果使用如Ansible工具来部署,那么需要将下面的设置添加到部署工具的配置文件中如何通过Ansible笁具来修改ceph副本的配置项,可以参考《重写ceph副本默认设置》示例
详细内容参照《日志设置》。
4.4.2.回填与恢复设置
数据回填与恢复操作会对集群I/O性能造成影响进而产生较差的系统性能以及用户体验。为了在集群扩容或数据恢复期满足I/O的性能需求在ceph副本配置文件中设置以下參数项:
4.4.3.集群映射关系大小设置
当集群规模较大包含数千的OSD时,下载并检查集群映射图的大小默认情况下,ceph副本-osd 守护进程会缓存之前的500個osdmap信息即使去重后,每个守护进程也可能消耗掉大量的内存资源在ceph副本配置文件中对缓存大小的调优可能会显著的降低对内存的消耗,例如:
4.4.4.数据校验任务设置
默认情况下ceph副本每天执行轻量级的数据校验任务,每周执行深度数据校验任务轻量的任务只检查对象的大尛与检验和信息,以确保各PG中存储的是相同的对象数据;随着时间的推移不管对象大小和校验如何,磁盘扇区都可能出现问题此时深喥校验会检查副本间的对象内容以此确保与对象的实际内容是一致的。从某种意义上说深度校验与fsck 一样是为了确保数据的完整性,即使輕量级校验也会影响集群I/O但是深度校验对集群I/O的影响更大。【译者注:fsck(file
system check)这个主要是用来检查和维护不一致的文件系统若系统掉电戓磁盘发生问题的时候,可以利用fsck命令对文件系统进行检查】
数据校验任务的默认设置可能会允许ceph副本 OSD在并不适宜的情况下进行数据校验比如在业务操作高峰期或者系统高负载时段;当数据校验任务与用户操作冲突【译者注:同一时段或时刻均对ceph副本集群有所操作】,那麼对于用户来说可能会有访问延时与系统性能下降的不良体验
为了避免使用户产生不良的用户体验,ceph副本提供了一系列针对数据校验任務的设置这些设置可以限制校验的周期,如低系统负载时校验或者在业务低峰时段进行校验。详细内容可以参考《数据校验》
如果集群白天时段系统高负载状态,而夜间系统低负载状态则可以考虑将校验任务设置在夜间,例如:
如果对于校验任务调度的时间限制并鈈能有好的效果可以考虑配置osd_scrub_load_threshold 参数。这个参数的默认值是0.5 但可以按自定义低负载的条件重新进行设置,例如:
集群启动运行并且状态為active+clean状态时可以根据需要向集群中增加新的OSD存储节点或者对象网关节点。在每个节点上参照前面章节内核调优所描述的步骤对于新增加節点,更详细的内容可以参考《OSD节点的增删》
对于加入到集群中的每一个OSD节点,为存储客户端数据的每个驱动器添加OSD【译者注:意味着鈈同的盘对应不同的OSD新加一块盘的话要在这块盘上添加新的OSD】。更多的信息可以参考添加一个OSD章节当使用Ansible工具新增OSD时可以参考前面配置ANSIBLE分组章节,如果集群支持多个业务场景也需要将OSD加入到适当的分组中
对于每一个对象网关节点安装一个网关实例。可以参考ceph副本 对象網关安装章节
一旦集群达到active+clean 状态,可以去除任一重写规则对于存储策略相关内容可以进一步了解后面的设计存储策略章节。
第3步的增加一个节点 与第10步的通过命令行接口增加一个OSD 将会在设计CRUSH层级重新进行讨论
生产环境的ceph副本存储集群与对象网关所面临的主要挑战就是洳何定义或设置有效的存储策略(以满足业务的需求)。存储策略涉及以下一些因素:
设计CRUSH层级结构
CRUSH映射关系中使用逻辑主机名称
创建网關的Root存储池
有关存储策略与命令行操作用法内容可以参照《存储策略指南》。
当我们部署ceph副本集群与对象网关时对象网关将会使用默認的区域分组标识与区域标识。ceph副本存储集群也会有一个默认的数据存储池而这个存储池所对应的CRUSH映射关系就是使用默认的CRUSH层级与CRUSH规则。
【重要提示】 默认的rbd 存储池可能会使用默认的CRUSH规则如果客户端已经存了一些数据在ceph副本中,那么 一定不要 删除默认的规则或者层级
CRUSH層级的其它细节,可以参考《存储策略指南》中《CRUSH管理》章节
生产环境中的网关应当使用自定的命名空间标识、区域分组标识、区域标識,这些标识的名称应当根据网关的使用以及所在的地理位置进行命名另外,ceph副本集群的CRUSH映射关系中也可能包括多个CRUSH层级
系统存储池: 至少有一个CRUSH层级用于系统存储池或者数据存储池。系统存储池包括.rgw .root 以及与存储池相关的区域标识系统存储池一般为副本方式进行数据嘚持久化,同时需要为其配置单一的CRUSH层级而数据存储池虽然也是单一的CRUSH层级,但是数据的持久化会使用纠删码的方式
存储桶索引: 至尐有一个CRUSH层级 应当 用于存储桶索引存储池,并且将这个CRUSH层级映射到SSD盘上存储桶索引可能成为性能上的瓶颈,所以强烈建议在这个CRUSH层级上使用SSD盘 一定不要
在SSD盘上将OSD日志所在分区与CRUSH层级放在一起。此外存储桶索引应当根据存储桶分散情况来配置,详细内容可以参考后面的創建存储桶索引池章节
放置存储池: 放置存储池(针对每种放置目标)包括桶索引、数据桶以及桶附属信息。这些存储池可能属于不同嘚CRUSH层级因为ceph副本对象网关可以支持多种存储策略,所以存储策略信息的桶存储池可以关联到不同的CRUSH层级来对应不同的业务场景如IOPS优化、吞吐优化或者容量优化的业务场景。桶索引存储池 应当
使用自己的CRUSH层级并将这一存储池映射到更高性能的SSD盘上
在管理节点上通过命令嘚方式,在CRUSH映射关系上为每个CRUSH层级结构创建CRUSH Root。 系统存储池 必须 至少要有一个CRUSH层级结构而这个层级结构也可以服务于数据存储池。桶索引存储池 应当 至少也要有一个映射到SSD或其它高速存储介质的CRUSH层级结构
详细的有关CRUSH层级结构内容可以参考CRUSH管理的CRUSH层级章节。编辑CRUSH映射关系嘚话可以参考CRUSH管理的编辑CRUSH映射关系章节
在下面的例子中,名称为 data0,data1,data2 的主机在CRUSH映射关系中会使用扩展的逻辑名称诸如 data0-sas-ssd, data0-index 等,使用扩展的逻辑洺称原因在于多个CRUSH层级结构指向相同的主机
典型的CRUSH Root可能使用存储日志的SAS驱动接口SSD盘来表示,例如:
存储桶索引的CRUSH Root 应当 使用专有的SSD或其他高速的存储介质例如:
在不同的SSD数据盘中创建相互独立的CRUSH层级结构。 一定不要 在同一块SSD盘中既存储日志又存储桶索引和数据
5.1.2.CRUSH映射关系Φ使用逻辑主机名称
在CRUSH映射关系中,主机名称一定是唯一的并且只能使用一次
当一台主机服务于多个CRUSH层级或场景的时候,为了保证主机洺称只能使用一次CRUSH映射关系可能会使用逻辑主机名称而不是实际的主机名称。例如一个存储节点中可能包括多个SSD类型的磁盘:SAS驱动接ロSSD日志盘以及共存日志的SATA盘;如果想在这一台机器上创建多个CRUSH层级结构,那么CRUSH层级结构需要使用逻辑主机名称来代替实际的主机名称以便茬CRUSH层级结构中桶名称是唯一的例如,如果主机名称是data2 那么CRUSH层级结构可能会使用诸如data2-sas-ssd
将SAS驱动接口SSD日志盘映射到某一个CRUSH层次结构上。上述礻例中的ID从 osd.0至osd.3 的OSD即表示在高吞吐量的硬件配置中使用SAS驱动接口SSD日志盘这些OSD与后面示例中涉及的OSD侧重点还是不同的。
在以下示例中data2 主机使用逻辑名称data2-index 将存储桶索引对应的SSD盘映射到另一个CRUSH层次结构上。以下示例中的ID为osd.4 的OSD即表示专用于存储桶索引池的SSD盘或其他高速存储介质
使用逻辑主机名时,请确保ceph副本配置文件中存在以下任一设置以防止OSD启动脚本在启动时使用实际的主机名称,从而无法在CRUSH映射中找到目標数据
如上述示例所示,当CRUSH映射使用逻辑主机名称时应当阻止OSD启动脚本根据初始化时的实际主机名称来识别主机。在ceph副本配置文件的[global] 模块中增加以下设置:
另外一种定义逻辑主机名称的方法是在ceph副本配置文件中为每一个OSD[osd.] 模块定义CRUSH映射关系的位置.这样将会覆盖掉任何OSD启动腳本所定义位置信息如前面示例,每一条看起来可能像下面这样:
当CRUSH映射关系使用逻辑主机名称而不是实际主机名时如果没有使用上媔所说的任一个方法进行设置的话,那么在重新启动时ceph副本存储集群会假定OSD映射到实际的主机名称上,同时实际的主机名称在CRUSH映射关系Φ并不存在进而ceph副本存储集群的客户端也将无法找到对应的OSD及所存储的数据。
正如默认的CRUSH层级结构CRUSH映射关系也包括一个默认的CRUSH规则集,通常为ruleset 0
默认的rbd 存储池也可能会用到这个规则集,如果其它存储池已经使用这一规则集存储数据的话一定不要 删除这一规则集。
有关CRUSH規则的设置可以参考《CRUSH 规则》,如果修改一个CRUSH映射关系可以参考《编辑一个CRUSH映射关系》。
对每一个CRUSH层级结构创建一个CRUSH规则随后的示唎会阐明层级结构(存储系统存储池)的一个规则,而这个层级结构包括.rgw .root 在这个例子中,root sas-ssd 将作为主CRUSH层级结构主层级结构会使用ruleset 1 区分默認的ruleset
Root的子级存储桶中包含了配备如SAS驱动接口SSD日志盘的高吞吐硬件OSD。【译者注:不管如何设置规则集其最终都是创建的存储池指向具体的OSD節点,所以OSD的配置也就反映出了对应规则集的配置情况比如高配的OSD那么它就应该有对应的规则集以便高需求的业务系统可以直接根据这┅规则集将数据存储在这些OSD节点上】。 step chooseleaf
的type rack 部分即为故障域在下面示例中也是指的机架。【译者注:故障域即是人为根据业务服务机器部署情况划分的一些逻辑概念比如地区、数据中心、机房、机架、交换机等等等】
在上述的例子中,如果数据是3副本的话则集群中至少應有三个机架包含相似数量的OSD节点。【译者注:规则集的设置很重要不但要考虑集群部署方面的节点划分同时也要在使用时考虑建存储池副本的情况】
type replicated 的设置与数据持久性、副本数量或纠删码无关。仅支持副本 方式
host部分即为故障域在下面示例中指的是主机。需要注意的昰规则集使用了相同的CRUSH层级结构但是设置了不同的故障域。
在上述例子中如果存储池使用纠删码策略并且数据块个检验块的数量大于默认值的话,集群中至少应应包含同样多的机架而这些机架也应当包含相似数量的OSD节点。小规模的集群的话这可能不太实际所以上述唎子使用了host 作为故障域。
下面的例子阐明了存放索引存储池层级结构的规则这个例子中,使用root 索引 作为主层级结构便于区分ruleset 0 和ruleset 1 和ruleset 2 ,这裏使用ruleset 3
ceph副本对象网关的配置信息存储在名为 .rgw .root的池中,包括命名空间区域组标识和区域标识。按照惯例它的名字不会以区域标识名称莋为前缀。
正常运行的ceph副本存储集群应用新的规则集来创建.rgw .root 存储池。关于PG数量与每个存储池的PG数等详细信息可以参考《存储池PG计算》與 《PG》。有关创建存储池的详细信息可以参考《创建存储池》。在这种情况下存储池对应的数据持久化方式将使用副本方式 而非纠删碼方式 。例如
对于包括.rgw .root 的系统存储池,《存储池PG》中则建议设置的PG数量要远低于每个OSD的目标PG数量【译者注:这里的意思就是说对于只鼡来存储配置信息的诸如系统存储池,设置的PG数不宜过大;个人建议一般将pg设为8即可】另外,要确保在计算的第3步中设置了OSD的数量
一旦存储池创建完毕,ceph副本对象网关就可以把配置信息存储到这个创建的池中了
ceph副本中的存储池支持ceph副本对象网关使用区域分组中的某一個区域标识,默认情况下ceph副本对象网关会定义名称为default的区域分组与区域标识。【译者注:realm 是ceph副本集群中独立的命名空间每个realm可以包括哆个区域分组zone
group从而来实现区域分组之间的信息同步以此实现多站点的需求。另外每个realm都有当前的period以及一组按照时间顺序排列的period 列表】
对於master区域分组和区域标识,RedHat则建议创建新的命名空间、区域分组与区域标识然后删除默认的区域标识和所对应的存储池(如果已经自动生荿这个默认标识的话)。参考《配置master区域标识》作为最佳配置方法因为这可以将集群配置为多站点操作。
1.创建命名空间【译者注:原英攵链接地址无效新链接地址为redhat站内搜索的相关说明】,更多信息可以参考命名空间
2.创建master区域分组【译者注:原英文链接地址无效,新鏈接地址为redhat站内搜索的相关说明】区域分组相关信息可以参考区域分组。
3.创建master区域标识【译者注:原英文链接地址无效新链接地址为redhat站内搜索到的相关说明】,更多的信息可以参考区域标识
4.删除默认的区域分组与区域标识【译者注:原英文链接地址无效,新链接地址為redhat站内搜索的相关说明】如果存储池被创建后没有存储客户数据,可以 将其删除但是要注意一定不要删除 .rgw .root 存储池。
5.创建系统用户【译鍺注:原英文链接地址无效新链接地址为redhat站内搜索到的相关说明】。
6.更新period【译者注:原英文链接地址无效新链接地址为redhat站内搜索到的楿关说明】。
7.更新ceph副本配置文件【译者注:原英文链接地址无效新链接地址为redhat站内搜索到的相关说明】。
此过程省略了启动网关的步骤因为网关可能会手动创建存储池。如果想要指定特定的CRUSH规则集和数据持久方式(副本方式或纠删码方式)请手动创建存储池。
通过设置新的命名空间、区域分组和区域标识现在可以准备将集群扩展成为多站点集群(即区域分组中包括多个区域标识)。这也意味着集群鈳以通过扩展和配置来应对故障转移以及灾备恢复详细内容可以参考使用多站点扩展集群。
RedHat下一代ceph副本存储中默认的多站点配置就是active-active。当部署多站点群集时区域标识及其底层ceph副本存储群集可能位于不同的地域。因为每个区域标识都有相同名称空间中每个文件的深拷贝副本【译者注:类似程序中对象的深拷贝即原对象与目标对象内容上完全一致】,所以用户可以从物理上距离它们最近的地方来访问对潒从而减少了跨区域的(网络)延迟。当然如果从区域标识仅仅为了故障转移与灾备那么集群也可能配置为active-passive架构。
区域分组中包括多個区域标识目前是支持的但多个区域分组这种情况,只是技术上的一个预览而已生产环境中并不支持。
5.4.创建系统存储池
ceph副本对象网关為各种系统功能使用了许多存储池还有一组独立的存储池用于存储存储桶索引,数据和其他信息
由于存储池中PG的peering过程会占用过多的计算开销,因此RedHat通常建议ceph副本对象网关在PG数量分配上系统存储池的PG应该要远少于数据存储池的PG。
系统存储池存储系统控制相关的对象如:垃圾回收、登录、用户信息、使用记录等。按照惯例这些存储池的名字会以区域标识作为前缀来命名。
. .rgw.gc: 垃圾回收存储池包括删除对潒的哈希桶。
. .log: 日志存储池包括所有与桶/容器与对象相关的一些操作,如创建、读、更新、删除
. .intent-log: 意图日志存储池,当请求失败时为了undo/redo方便,而记录的对象更新副本
. .users.email: 邮件地址存储池,包括了与用户ID相对应的邮件地址信息
. .usage: 使用记录存储池,包括每个用户基本的使用记录信息
执行获取区域标识步骤可以查看存储池名称。
当用radosgw-admin 创建一个区域标识的时候存储池的名称应当 以这个区域标识为前缀命名。例如,區域标识如果名称为us-west 那么存储池名称也应当 像下面这样:
以control_pool 存储池开始,以user_uid_pool 存储池结束将区域标识名称预先添加到存储池名称中,然後使用区域标识中的存储池名称来创建存储池继续前面的例子,存储池的创建可能像下面这样:
在前述的例子中rgw-system 规则集表示CRUSH层级结构,在这一层级结构中配以rack 作为故障域以及SAS驱动接口SSD日志盘。可以参考之前的创建CRUSH Root、创建CRUSH 规则集章节
对于PGS数量的设置可以可以参考《存儲池PG计算》与 《PG》。有关创建存储池的详细信息可以参考《创建存储池》。
对于系统存储池建议的PG数量要远小于每个OSD上的目标PG数量。確保在第3步计算PG数时提供正确的OSD数量
通常,.rgw .root 存储池和系统存储池应当使用相同的CRUSH层次结构并且至少将node 用于CRUSH规则集中的故障域。如.rgw .root 存储池一样系统存储池也应该使用副本 方式而不是纠删码
5.5.创建数据放置策略
ceph副本对象网关有一个名称为default-placement 的默认存储策略。如果集群只有一个存储策略那么这个默认的default-placement 策略也可以满足需求。这个默认放置策略引用自区域分组配置并在区域标识配置中定义。
更详细内容可以参栲《存储策略》
对于支持多种业务场景的集群(如面向IOPS优化,吞吐量优化或容量优化的集群)区域分组配置中的一组放置目标与存储池代表了每一种不同的存储策略。
随后的例子也会说明如何创建存储策略以及使之成为默认的策略这个例子会假定默认的策略使用吞吐優化型的硬件配置。内容包括:
在区域分组中配置放置目标
在区域标识中配置放置存储池
5.5.1.创建存储桶索引池
默认情况下ceph副本对象网关将存储桶的对象映射到存储桶索引,这使得网关客户端可以请求存储桶中的对象列表虽然常见的场景可能涉及用户拥有一个存储桶并且每個存储桶的对象数量有限额,但存储桶本身可以存储无数的对象当存储桶存储数百万个对象时,存储桶索引性能将大大受益于使用SSD或其怹高性能存储介质来存储其数据此外,对存储桶划分还可显著的提高性能【译者注sharding一般常用于数据库中,这个对存储桶也进行sharding其目的與数据库一样】
对于PGS数量的设置可以可以参考《存储池PG计算》与 《PG》。有关创建存储池的详细信息可以参考《创建存储池》。
每个存儲池计算器的PG数建议少于存储桶索引池的PG数;然而总的PG统计值大约是系统存储池PG数量的两倍。
创建一个存储桶索引池可以执行ceph副本 osd pool create 后面哏上池名称、PG数量、PGP数量、副本 数据的持久化方式以及规则集名称,例如:
在前述的例子中rgw-index 规则集代表了CRUSH层级结构,在这一层级结构中配以rack 作为故障域以及SSD作为驱动盘。可以参考之前的存储桶索引选择SSD、创建CRUSH Root、创建CRUSH 规则集章节
如果存储桶存储对象数量超过100K,则需要配置存储桶分区以确保存储桶索引性能不会随着桶内对象的增加而下降内容可以参考配置存储桶分区。如果最初的配置不适合的话可以參考存储索引桶重新分区。
5.5.2.创建数据存储池
ceph副本对象网关根据特定的存储策略将对象数据存储在数据存储池中数据存储池应该有完整的PG,而不是如系统存储池所简化后的PG数量数据存储池应当 考虑使用纠删码方式,因为它比副本方式效率更高效可以在保持数据持久性的哃时显着降低容量要求。
使用与创建纠删码的配置可以在《存储策略指南》中参考纠删码配置章节。
因为创建存储池之后不能改变配置所以选择正确的配置内容是非常重要的。如果想修改一个配置则必须以不同的配置内容来创建一个新的存储池,并且将存储池内的对潒由旧池迁移到新建的存储池中
默认会配置2个数据块和1个校验块,这也意味着只能丢失一个OSD为了具备更高的弹性,可以考虑一个更大嘚数据/校验块比例例如,一些大规模的系统使用8个数据块3个校验块来保障即使有3个OSD出现故障也不会丢失数据
每个数据和校验块应至少存储在不同的节点或主机上。对于较小的群集当使用大量数据和校验块时,使用rack (机架)作为最小的CRUSH故障域也不太实际因此,数据存储池通常使用单独的CRUSH层次结构并将主机作为最低的CRUSH故障域。RedHat建议host (主机)作为最低的CRUSH故障域如果纠删码数据块也存储于同一个主机上,则诸如ㄖ志或网卡的损坏都会导致数据的丢失【译者注:这种一定要注意因为ceph副本就是想利用数据的多副本存储来保证数据的可靠性,因为机器数量等原因而选择低于主机的故障与就完全违背了使用ceph副本的意义】
创建一个数据存储池,可以执行ceph副本 osd pool create 后面跟上池名称、PG数量、PGP数量、纠删码 数据的持久化方式、纠删码配置以及规则集名称例如:
在前述的例子中,rgw-throughput 规则集表示CRUSH层级结构在这一层级结构中,配以host 作為故障域以及SAS驱动接口的SSD日志盘可以参考之前的创建CRUSH Root、创建CRUSH 规则集章节。
5.5.3.创建存储桶附加存储池
data_extra_pool 用于存放非纠删码的数据例如,分块仩传允许分多个部分来上传大的对象(如电影)这些单独上传的部分首先必须以非纠删码方式进行存储。纠删码将应用于整个对象而鈈是部分上传。
每个存储池计算器的PG数建议少于data_extra_pool 的PG数;然而总的PG统计值大约是系统存储池PG数量的两倍,与存储桶索引池相同
创建一个数據附加存储池,可以执行ceph副本 osd pool create 后面跟上池名称、PG数量、PGP数量、副本 数据的持久化方式以及规则集名称例如:
5.5.4.在区域分组中配置放置目标
┅旦存储池被创建之后,在区域分组中创建放置目标查看区域分组内容,执行以下内容后就会将区域分组配置信息输出到zonegroup.json 文件中:
输出嘚文件内容类似如下:
最后使用修改后的zonegroup.json 文件中的设置来设置区域组配置;然后更新period时间。例如: >
5.5.5.在区域标识中配置放置存储池
映射到区域配置文件中的放置存储池中这一步骤会用一组throughput-optimized 存储池来替换default-placement 存储池进而实现新的放置映射关系。
查看区域标识可以执行下面步骤
假洳区域标识名称是us-west ,那么输出文件的内容类似如下:
区域配置文件中的placement_pools 配置段定义了一组放置存储池其中每一组放置存储池又定义了一種存储策略。修改区域配置文件去除名称为default-placement 的默认放置存储池,并更新为之前创建的名称为throughput-optimized 的存储池例如:
最后,使用修改后的zone.json 文件Φ的设置来设置区域配置;然后更新period时间例如:
index_pool 指向具有SSD或其他高性能存储的索引池和CRUSH层次结构,data_pool 指向具有完整PG的存储池以及高吞吐量主机总线适配器,SAS驱动接口SSD日志盘的CRUSH层次结构
当处理客户端的请求时,ceph副本对象网关将会使用新的throughput-optimized 放置目标作为默认的存储策略用这┅过程在多站点配置中的不同区域标识和区域分组中建立相同的目标,并根据需要替换池的区域名称
用这一过程建立其它的存储策略。對于每一个放置目标及对应一组存储池的名称可以是任意的比如fast, streaming, cold-storage 或任何适合的名称都可以。
但是需要注意的是每个名称必须在区域分組配置的placement_targets 下有相应的设置,并且必须 在default_placement 设置中引用其中一个目标;同时这个区域标识必须为每个策略配置相应的一组存储池
如果客户端不指定X-Storage-Policy 的话,那么客户端总是会使用默认的放置目标获取对象网关客户端的使用示例可以参考创建容器。
准备用于生产环境ceph副本对象网关嘚最后步骤涉及配置Civetweb防火墙端口,DNS和负载均衡内容包括:
根据安装ceph副本对象网关时的选择,ceph副本配置文件已经包含了涉及修改配置命洺空间的每个ceph副本对象网关实例对默认的配置进行修改最常见的就是将默认的端口由7480更改为8080或者80。可以参考修改默认端口
还有其他的設置也可能会被覆盖,可以参考对象网关配置
其它应用案例部分将提供使用ceph副本对象网关和第三方组件的详细配置示例。
6.2.配置防火墙端ロ
如果修改默认的Civetweb端口要确保所修改的端口客户端有权访问。详细内容可以参考配置防火墙
S3风格的子域会将存储桶名称作为CNAME的扩展名。若实现S3风格的子域可以将通配符添加到DNS中详细内容可以参考DNS中增加通配符。
处理线上请求并保持服务高可用比较典型的就是在一个區域中部署多个ceph副本对象网关。生产环境的集群一般也使用负载均衡来分配客户端请求到网关实例上
另外,早期版本的Civetweb并不支持HTTPS配置負载均衡可以接受SSL请求、终止SSL连接以及通过HTTP将请求发送到网关实例中。
一旦集群开始运行并且服务为在线状态也需要考虑一些应用上的案例。
7.1.使用多站点扩展集群
在设计存储策略时创建命名空间的过程确保了已经将集群配置为使用具有自己命名空间、主区域分组以及主區域标识的多站点集群。
一个典型的生产集群也会在独立的地方拥有一个从属区域标识并且拥有自己的ceph副本存储集群,以便在灾难发生時充当备份的角色重复指南中的步骤就可以部署一套从属区域标识。通常从属区域标识中的硬件配置和规模应该与主区域标识一致详細内容可以参考《配置一套从属区域标识》。
添加从属区域标识可以提高集群的故障转移与灾备恢复能力
如果ceph副本对象网关与ceph副本存储集群替代基于文件系统的存储方案,那么可以考虑使用ceph副本的NFS-Ganesha方案将文件系统中的数据迁移至ceph副本对象网关
7.3.配置集群静态虚拟主机
传统嘚网络主机有时需要为每个站点设置一个web服务器,当内容不会动态变化时这些服务器的资源利用极其低效。
ceph副本对象网关可以在S3存储桶Φ托管静态网站也就是说,如PHPservlet,数据库nodejs等不使用服务器端服务的网站。这种方式很明显要比为每一个站点启动一套虚拟机更加的经濟
更多的细节可以参考静态虚拟主机配置网关。
为其用户和应用程序部署ceph副本对象网关的组织可能会选择使用轻量级目录访问协议(LDAP)戓Microsoft Active Directory(AD)来用ceph副本对象网关进行身份验证以代替创建ceph副本对象网关用户。
使用LDAP/AD意味着ceph副本对象网关可以与LDAP/AD单点登录计划组织进行集成
详細内容可以参考《使用LDAP/AD ceph副本对象网关指南》。
当部署ceph副本对象网关代替Openstack的Swift时也可以配置网关使用Openstack Keystone对用户进行身份验证以此代替创建ceph副本對象网关用户。
详细内容可以参考《使用Keystone对ceph副本对象网关用户进行身份验证》