barriers / 阅读 / 详情

Ceph实践之Crushmap相关

2023-06-07 08:52:42
TAG: cep eph hma
共1条回复
S笔记
* 回复内容中包含的链接未经审核,可能存在风险,暂不予完整展示!
* 回复内容中包含的链接未经审核,可能存在风险,暂不予完整展示!
CRUSH Map 包含 OSD 列表、“桶”类型、把设备汇聚为物理位置的“桶”列表、和指示 CRUSH 如何复制存储池里的数据的规则列表。

搭建好集群后(本文所有操作基于ceph版本luminous),在没有添加osd进集群时,此时通过"ceph osd crush dump"查看crushmap的设备,你会发现此时的devices为空。形如:

那么,什么操作会导致crushmap的devices写入信息呢?答:将osd加入到集群时。我们来实践一下。

本文使用的部署集群osd命令如下:
///////准备格式化LVM设备并将其与OSD关联:
ceph-volume lvm prepare --bluestore --data {device-path}
//////列出与Ceph相关的逻辑卷和设备;可用于查看{osd id} {osd fsid}
ceph-volume lvm list
//////激活发现并安装与OSD ID关联的LVM设备并启动Ceph OSD
ceph-volume lvm activate {osd-id} {osd-fsid}
/////当需要激活的osd较多时,可以一次性激活所有
ceph-volume lvm activate --all

部署集群osd后,观察crushmap devices如下:

Crushmap中的types定义了所有bucket的类型,集群搭建好后,这些类型就可以查看到。通过ceph osd crush dump查看如下:

在定义bucket分级拓扑结构中,root类型的桶为改分级结构的根节点。

Ceph在存储数据的过程中,其CRUSH算法会根据各设备的权重(weight值反映)、大致统一的将数据对象分布到存储设备上。crushmap中的buckets是一系列分级桶实例的集合,其表达的是一种逻辑上的分级拓扑结构 (树型结构)。创建桶分级拓扑接口的目的是CRUSH在存储数据时按故障域隔离叶子节点(osd、host、rock....),数据冗余,达到数据安全。
在ceph的集群中有一个特殊的名为"default"的桶分级拓扑结构,它从集群搭建好就存在。如下:

default桶分级结构包含root、host、osd三种桶类型,其应该如实的反映集群存储设备的关系(集群几个主机、每个主机下有哪些osd).当osd出问题时,可根据该拓扑找到对应的物理硬件。

操作crushmap bucket相关命令详述:
1.添加一个bucket实例:
ceph osd crush add-bucket {bucket-name} {bucket-type}
上述命令执行后,集群crushmap会多一条形如:
{
"id": -9, //唯一id标识
"name": "data", //bucket_name,该bucket_name不能重复
"type_id": 1, //buckt_type id ,对应于crushmap的types中的一项
"type_name": "host",//bucket 实例类型
"weight": 0,//该bucket的权重
"alg": "straw2",
"hash": "rjenkins1",
"items": []// 该bucket的子bucket信息(树形理解)
}

2.移动bucket层级
ceph osd crush move {bucket-name} {args...}
执行上述命令后,可以将{buckt-name}移动到{args}指定的层级下, 作为{args}的孩子节点,其中args形如{bucket_type}={name}。

3.添加osd到一个分级结构
ceph osd crush add/set osd.{osd-id} {weight} {args}
上述命令中的{weight}值表明该osd的存储能力(容量),一般1T的盘,weight设为1,{args}知道该osd位置。

如果不调整default的层级,只是将osd加入集群中,此时是没有分级结构的,如下:

本文实践的集群环境:3个主机、每个主机下2个osd,其拓扑结构如下:

调整过程命令如下:

创建完成后,集群的default拓扑图如下:

完成后如下:

crushmap中的rules是一系列存储池规则的集合。存储池规则(rule)确定一个存储池的数据如何归置:数据的冗余份数、数据隔离级别等。下面简单的查看说明一下:

1.获取集群crushmap
ceph osd getcrushmap -o {file1}
{file1}为自定义的文件名,该文件为二进制文件,不可编辑。要想编辑此文件,需要用工具将其反编译解析,如crushtool工具。

2反编译crushmap
crushtool -d {file1} -o {file2}
反编译二进制文件{file1}得到可编辑文件{file2}

3.编辑crushmap
按自我需求修改可编辑文件{file2}

4.编译crushmap
要想编辑后的文件机器能够识别,必须用工具编译它生成二进制文件。
crushtool -c {file2} -o {file3}

5.注入crushmap
要想新的crushmap在集群中生效,必须将其注入要集群。
ceph osd setcrushmap -i {file3}

参考资料:
1.ceph 官方文档
更多详情,详见官网:
http://docs.ceph.o*.cn/rados/operations/crush-map/

相关推荐

bucket是什么意思,水桶翻译

bucket 翻译 水桶
2023-06-06 23:15:142

水桶的英语?

你的美丽吸引着我,你的欢笑像雨后的甘露那样清甜,我是清醒的,因为我知道,我真的爱你。
2023-06-06 23:15:2914

bucket是什么意思?

水桶
2023-06-06 23:16:404

buckets中文翻译

Buckets的使用和应用1. 什么是BucketsBuckets指的是在计算机科学领域中的一种将数据组织成一定数量的桶或者容器,以方便对这些数据进行处理和管理的技术。Buckets通常由一组哈希函数组成,并且根据这些函数的结果将数据映射到不同的桶中。这种数据组织方式可以极大地提高数据的处理效率,特别是在大规模数据处理的场景下。2. Buckets的应用Buckets通常被应用于以下三个方面:大规模数据处理:在大数据处理中,Buckets可以将数据分段,以更加高效的方式处理数据,减少处理时间和成本;缓存优化:在缓存系统中,Buckets可以将数据分散到多个桶中,避免某一个桶的数据过多导致缓存命中率下降;哈希表实现:在哈希表中,Buckets可以作为一个桶数组,来保存哈希表中所有元素,避免元素数量过多导致哈希冲突严重。3. Buckets的实现方式实现Buckets的方式取决于具体的应用场景。一般而言,有以下两种实现方式:静态实现:将桶数量固定,例如采用一个桶数组来实现Buckets,在数据量不变的情况下,桶数量也不会改变;动态实现:桶数量随数据量而改变,例如采用链表实现Buckets,在桶中保存一组数据,并且当桶中的数据达到一定数量时,动态添加新的桶。4. Buckets的性能和局限性Buckets作为一种数据组织方式,相比于传统的数组和链表等结构,具有较好的性能和效率。同时,Buckets的实现方便,适用性广,能够解决大数据处理和哈希表冲突等问题。但是,Buckets也存在局限性。例如在数据分布不均匀的情况下,桶中数据数量有可能过多或过少,从而影响数据的处理效率。此外,Buckets的实现需要额外的空间和时间开销,可能会占用更多的内存和计算资源。 5. 结论Buckets是一种高效的数据组织方式,被广泛应用于大数据处理、缓存优化和哈希表实现等方面。Buckets具有性能高、实现方便等优点,但同时也存在一些局限性,需要结合具体的应用场景进行选择和实现。
2023-06-06 23:17:031

buckut是什么意思?

bucket[英][u02c8bu028cku026at][美][u02c8bu028cku026at]n.水桶; 一桶(的量); 大量; 〈俚〉交通工具; v.用桶装,用桶运; 倾盆而下; 〈美俚〉骗; 猛开车,猛划船; 第三人称单数:buckets过去分词:bucketed复数:buckets现在进行时:bucketing过去式:bucketed
2023-06-06 23:17:102

buctke是什么意思中文翻译?

有没有输入错误?bucket 是小桶的意思
2023-06-06 23:17:172

bucket和barrel都是指桶,二者有什么区别?谢谢!

bucket----an open metal,plastic, or wooden container with a handle for carrying liquids 水桶barrel----a round usu.wooden container with curved sides and a flat top and bottom中间鼓平顶平底的桶
2023-06-06 23:17:373

“木桶效应”如何翻译成英文最好

“木桶效应”或“短板效应”bucketseffectasbucketseffectreveals,thecapacityofabucketdependsontheshortestboard.正如水桶理论所言,一桶水的多少,取决于最短的那块木板。
2023-06-06 23:18:321

桶式排序

桶式排序不再是一种基于比较的排序方法,它是一种非常巧妙的排序方式,但这种排序方式需要待排序列满足如下两个特征: 下面介绍桶式的详细过程,以如下待排序列为例。 5、4、2、4、1 这个待排序列处于0、1、2、3、4、5这个可枚举范围内,而且这个范围也很小,正是桶式排序待派用场之时。 具体步骤如下。 (1)对这个可枚举范围构建一个buckets数组,用于记录“落入”每个桶中的元素的个数,于是可以得到下图所示的buckets数组。 (2)对图中所示的buckets数组的元素进行重新计算,按如下公式进行重新计算。 buckets[i]=buckets[i]+buckets[i-1] ;(其中1<= i < buckets.length) 即得到下图所示的buckets数组。 上面理论还有点抽象。以待排序列中最后一个元素1为例,找到新buckets数组中元素1对应桶的值,该值为1,这表明元素1就应该排在第1位;再以待排序列中倒数第2个元素4为例,找到新buckets数组中元素4对应桶的值,该值为4,这表明元素4就应该排在第4位……依此类推。 桶式排序是一种非常优秀的排序算法,时间效率极高, 它只要经过2轮遍历: 第1轮遍历待排数据,统计每个待排数据“落入”各桶中的个数; 第2轮遍历用于重新计算每个buckets数组元素的值。 2 轮遍历后就可得到每个待排数据在有序序列中的位置,然后将各个数据项一次放入指定位置即可。 桶式排序的空间开销较大,它需要两个数组:第1个buckets数组用于记录“落入”各桶中元素的个数,进而保存各元素在有序序列中的位置;第2个数组用于缓存待排数据。 桶式排序是稳定的。
2023-06-06 23:18:391

岩浆桶的英文

岩浆桶的英文: 1、Magma Bucket:岩浆桶 2、Lava Bucket:岩浆桶 扩展资料   bucket   n.(有提梁的)桶;大桶状物;(起重机的)吊斗;(挖土机的.)铲斗;一桶(的量)   v.拼命划桨;挖掘铲斗;挑流鼻坎   第三人称单数: buckets复数: buckets现在分词: bucketing过去式: bucketed过去分词: bucketed   例句:   Water had spilled out of the bucket onto the floor.   桶里的水洒出来了,洒了一地。   The children took their buckets and spades to the beach.   孩子们带上自己的桶和铲子到海滩去了。   The rain was coming down in buckets.   下着瓢泼大雨。   The roof was leaking and I had to use a bucket to catch the drips.   屋顶漏雨,我不得不用桶来接。
2023-06-06 23:19:221

木桶效应的解释的英文翻译

“木桶效应”或“短板效应”BucketseffectAsBucketseffectreveals,thecapacityofabucketdependsontheshortestboard.正如水桶理论所言,一桶水的多少,取决于最短的那块木板。
2023-06-06 23:19:291

全家桶用英语怎么说

123
2023-06-06 23:19:374

下大雨用英语怎么说

  你知道下大雨用英语怎么说吗?下面跟着我学习一下吧,希望能对大家学习英语有所帮助!    下大雨的英语说法:1. Rain cats and dogs   关于这一习语的起源有这样一种解释:17世纪的英格兰在下大雨的时候,一些城市的街道就会水流成河,而且这些污水中还会漂浮着大量的死猫死狗。   例:Soon it began to rain cats and dogs. Few people were seen on the street.   不久,下起了倾盆大雨。街上看不到几个人了。    下大雨的英语说法:2. Rain buckets   Bucket意指“水桶”,复数形式的buckets可以用来形容大量的液体。Rain buckets则意指雨下得很猛烈。   例:It"s raining buckets.   大雨倾盆。    下大雨的英语说法:3. The heavens opened   传说诺亚建好方舟后,八个人被带到船上。神关上了方舟之门,然后天开了,暴雨哗哗降临。因此我们现在也用the heavens opened来形容下暴雨。   例:We were waiting at the bus stop when the heavens opened.   我们正在等公交,突然下起了暴雨。    下大雨的英语说法:4. Downpour   中文说大雨倾盆,像是从天上“倒下来”的一样, 英文里则用downpour来表达,是不是有些相似呢?   例:After lightning and thunder came a heavy downpour.   雷电过后,大雨倾盆而下。    下大雨的英语说法:5. Cloudburst   Burst有“突发”、“爆发”之意,如果说云突然爆发了,也就是突然的大暴雨。   例:The bus was delayed by a cloudburst.   暴雨导致公交车延误了。
2023-06-06 23:19:551

rgw里面用户、bucket、用户数据之间关系

本篇文章介绍了ceph rgw组件里面,用户、bucket和用户数据对象之间的关系,以及它们和底层rados对象之间的关系,我们希望达到以下目的: 理解了上面这些关系之后,然后做一个小实验:通过s3cmd把上传文件到radosgw,然后直接通过拼接底层的rados对象来得到用户数据。 首先要准备一个radosgw环境,这里为了演示方便,使用了最简的配置。 查看rados里面的存储池 可以看到启动radosgw服务时,radosgw服务自动会创建相关的存储池 下面为了达到我们列出的目标,我们需要创建一个rgw用户,然后使用该用户创建一个bucket。 再次查看rados里面的存储池 可以看到创建用户之后,自动创建了default.rgw.users.uid这个池。 使用s3cmd客户端创建一个bucket 再次查看rados里面的存储池 可以看到创建用户之后,自动创建了default.rgw.buckets.index这个池 我们上面创建了一个radosgw用户rgwuser01,这个用户相关数据保存在哪里呢? 通过上面命令可以看到,在default.rgw.users.uid池里面有两个rados对象,rgwuser01对象和我们用户的id名称一致,这个对象就是用来保存用户信息的rados对象。每个radosgw用户在这个池里面都对应一个rados对象,对象名就是用户id名称。 可以看到,bk01这个bucket在 default.rgw.data.root 池里面有个rados对象 .bucket.meta.bk01:475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1 与之对应,这个rados对象就是对应bk01 bucket的,这个rados对象里面存放了一些关于bk01 bucket元数据信息: 通过查询bk01这个bucket的元数据信息,可以知道bk01这个bucket的id为 475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1 。 另外,bucket的acl信息保存在元数据对象的xattr里面: 我们都知道一个用户可以有属于自己的多个bucket,那用户和bucket的对应关系是怎么建立的呢? 在上面通过 rados -p default.rgw.users.uid ls 命令查询的结果里面除了用户对象以外,还有一个rgwuser01.buckets对象,这个对应的命令格式就是{uid}.buckets,用户和bucket的对应关系就保存在这个对象的omap里面,key值就是bucket的名称,让我们来验证下: 查看rgwuser01.buckets这个对象有哪些key 可以看到有bk01这个key,bk01就是我们创建的bucket名称,这点没问题了。再来获取下bk01这个key对应的value值 可以看到bk01这个key所对应的value值就是bk01这个bucket的信息。这样我们知道了uid,然后通过{uid}.buckets这个rados对象就可以查询到该用户下有哪些bucket了。 使用s3cmd客户端上传一个对象 查看rados里面的存储池信息 可以看到上传对象之后,自动创建了default.rgw.buckets.data这个池,看下这个池里面的对象 那么bucket是如何知道自己包含了哪些对象呢?其实是每个bucket在default.rgw.buckets.index这个池里面有一个rados对象,我们叫这个rados对象为索引对象 可以看到一个 .dir.475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1 对象,这个对象的名称和我们上面看到的bucket id相比,在前面多了.dir.这个字符,这个对象就是每个bucket在rados里面的索引对象,命名格式就是.dir.{bucket-id}。这个对象的omap里面就保存了这个bucket下所包含的所有对象信息,我们验证下 可以看到输出里面和我们上传的对象名一致,我们再上传一个对象看看是不是这样 然后再次查看,发现确实是这样的 这样我们就知道了bucket是怎么知道自己包含了哪些用户数据对象的。要说明一点的是,bucket的索引对象个数可以去更改,默认只有一个。 这个实验大概过程就是,用户通过radosgw的客户端(s3cmd),上传一个文件,然后我们在rados层面获取该文件对应的rados对象,然后通过这些rados对象直接拼接成用户上传的文件。 首先准备一个文件,这里特意准备了一个稍大的文件是为了让s3cmd分段上传(默认15M一段),小文件虽然不用分段,但是原理也一样 计算该文件的md5值,用于验证后面我们拼接出来的文件的正确性 然后使用s3cmd上传到radosgw中(radosgw最终会将数据存到rados中) 可以看到s3cmd将文件分成了6段来上传,每段的大小是15M,最后一段是8M,因为文件最后只剩8M了嘛。 根据前面我们的讲述,我们知道radosgw将用户数据保存在了default.rgw.buckets.data池中,我们来看下刚才上传的文件在rados中的分布情况 radosgw默认将用户数据按照4M大小(有参数可以控制切分大小)来切好,然后放到rados里面的,所以我们上传的文件最终就是切分成了上面的这些对象。 接下来我们就是要把这些对象get出来,然后拼接成我们的用户数据(就是我们使用s3cmd put上去的文件)。 首先我们把上面的对象整理成下面的顺序,然后放入一个文本文件中: 为啥要整理成这种顺序,仔细观察下就会发现,所有和用户数据对象messages相关的rados对象,都有规律的。 这里简单粗暴说下:首先所有对象都是以bk01这个bucket的id开头,然后我们知道分成了6段,看下包含__multipart_messages字符的对象有6个,然后每个结尾都有数字标识,从1-6。 再看每段里面又包含__shadow_messages字符的对象,也是每个结尾都有数字标识,从1-3。最后是一个475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1_messages-20180722这样的对象,这个对象里面就是保存了整个用户数据对象的元数据和分段的信息。 然后从rados中获取这些对象,并拼接 最后我们看下我们拼接文件的md5值,看是否和开始我们使用s3cmd上传的文件的md5一样 可以看到,md5值是一样的。这样我们就完成了,直接通过底层的rados对象来重组出用户的数据,实际上我们正常情况下不需要这么去做,这里只是为了更好的理解用户数据在底层rados上是怎么组织和存放的。 好了,到这里就弄清楚了开始在目标里面列出的几个问题,动手试试吧。
2023-06-06 23:20:081

桶装水用英语怎么说

Barreled Water桶装水
2023-06-06 23:20:183

get在篮球是什么意思

篮球在刚发明的时候,它的篮筐是有底的,跟水桶差不多,所以进球以后需要有人去把球从框里掏出来,因此get buckets就是能进球(球进了筐里要拿出来)的意思。你说的get可能是get buckets的简略版。因为在球场上如果用简短而又有力的词,可以加强士气,鼓舞人心,有时候还能起到给对手施加压力的作用,同时get又有得到的意思,所以在球场上可能也有“进球得分”的意味。所以get在篮球圈里的意思就是“得分”。
2023-06-06 23:20:251

hash buckets hash buckets是什么意思

hash buckets hash buckets哈希散列桶例句:1.There are two popular methods for choosing the number of buckets in a hashtable.有两种常见的方法来选择在散列表中的桶的数量。2.The number of buckets is typically much smaller than the domain of inputvalues for the hash function.bucket的数量通常比hash函数的输入值的范围小得多。3.In theory the hash table is a rather simple construct, just collection of arrays orlinked lists divided into a finite number of buckets.理论上,哈希表是一个非常简单的构造,就是数组或链表的集合被划分到有限数量的存储体中。4.limit is the number of hash buckets, not the total allocation sizelimit是哈希桶的数量,不是所分配的整个空间的大小5.Using a prime number of buckets, and choosing a bucket by using the modulusof the hash function"s result will usually give a good result.使用素数个桶,并且通过对散列函数的结果取模来选择桶通常有不错的结果。
2023-06-06 23:20:321

桶的英语是什么

bucket是这样的
2023-06-06 23:20:515

下大雨英语

下大雨英语:1. Rain cats and dogs.关于这一习语的起源有这样一种解释: 17 世纪的英格兰在下大雨的时候,一些城市的街道就会水流成河,而且这些污水中还会飘浮着大量的死猫死狗。例: Soon it began to rain cats and dogs. Few people were seen on the street.不久,下起了 倾盆大雨。街上看不到几个人了。2. Rain buckets.Bucket意指“水桶”,复数形式的buckets可以用来形容大量的液体。Rain buckets则意指雨下得很猛烈。例: It"s raining buckets.大雨倾盆。3. The heavens opened.传说诺亚建好方舟后,八个人被带到船上。神关上了方舟之门,然后天开了,暴雨哗哗临降。因此我们现在也用the heavens opened来形容下暴雨。例: We were waiting at the bus stop when the heavens opened.我们正在等公交,突然下起了暴雨。4. Downpour.中文说大雨倾盆,像是从天上“倒下来”的一一样,英文里则用downpour来表达,是不是有些相似呢?例: After lightning and thunder came a heavy downpour.雷电过后,大雨倾盆而下。5. Cloudburst .Burst有“突发”、“爆发”之意,如果说云突然爆发了,也就是突然的大暴雨。例: The bus was delayed by a cloudburst.暴雨导致公交车延误了。
2023-06-06 23:21:071

纯净水桶的英语翻译是什么

the bucket for pure water
2023-06-06 23:21:323

英语within a bucket怎么翻译?

within a bucket翻译过来就是:在桶里面/在桶内部
2023-06-06 23:21:485

bucket 与blade的区别?

bucket 一般是斗状的,如同挖掘机的铲斗一样的东西。blade是叶状,浆状,片状的,一般有锋利的刃口。
2023-06-06 23:22:022

We turn the buckets upside down. (英语 - upside 和 down 是 adv.还是prep.??)

We turn the buckets upside down. (英语 - upside 和 down 是 adv.
2023-06-06 23:22:122

英语rename bucket怎么翻译?

“rename bucket”的英语翻译为“重命名水桶”。
2023-06-06 23:22:2012

有关“三围”的英语翻译

用谷歌金山词霸自己就可以用查到了
2023-06-06 23:22:575

手机cde-buckets文件是什么?

这个文件的话是到我的文件管理里面查找,然后点击打开就可以看见你的文件具体是什么内容。
2023-06-06 23:23:144

如何快速从list中查找一条数据

比如,你可以从中间的某个位置开始找,未必要从头开始找啊。第二个思路,你可以把list 放进hashtable,hashtable查找的效率要比从头找要高。还有,我个人感觉那个list的get(index),就是从头找的吧hashtable的查找代码public virtual bool ContainsKey(object key) { uint num; uint num2; Hashtable.bucket bucket; if (key == null) { throw new ArgumentNullException("key", Environment.GetResourceString("ArgumentNull_Key")); } Hashtable.bucket[] buckets = this.buckets; uint num3 = this.InitHash(key, buckets.Length, out num, out num2); int num4 = 0; int index = (int) (num % buckets.Length); do { bucket = buckets[index]; if (bucket.key == null) { return false; } if (((bucket.hash_coll & 0x7fffffff) == num3) && this.KeyEquals(bucket.key, key)) { return true; } index = (int) ((index + num2) % ((ulong) buckets.Length)); } while ((bucket.hash_coll < 0) && (++num4 < buckets.Length)); return false; }
2023-06-06 23:23:201

buckut是什么意思

bucket[英][u02c8bu028cku026at][美][u02c8bu028cku026at]n.水桶; 一桶(的量); 大量; 〈俚〉交通工具; v.用桶装,用桶运; 倾盆而下; 〈美俚〉骗; 猛开车,猛划船; 第三人称单数:buckets过去分词:bucketed复数:buckets现在进行时:bucketing过去式:bucketed
2023-06-06 23:24:331

三围用英语怎么说

问题一:三围的英语怎么说 三围就叫measurements: 包含bust,waist, hip 问题二:你的三围是多少?英语怎么说? what "s your vital statistics? 问题三:三围 用英文怎么说? B.W.H:三围.breast, waist, hip. 问题四:你的三围多少 用英语怎么讲 How much you measurements 问题五:三围的英语知道怎么说吗 vital statistics 三围 例句: Mary"s vital statistic罚 are 38-24-38 (inches). 玛丽的三围是38-24-38(英寸)。 问题六:有关“三围”的英语翻译 三围:Measurements 胸围:Bust 腰围:Waist 臀围:Hip 水桶腰:Back buckets 三围一个码:One yards measurements 天使般的脸孔,魔鬼般的身材:Angelic face, the devil figure 问题七:三围尺寸英文字母代表的意思 B:是胸围 W:是腰围 H:是臀围
2023-06-06 23:25:001

衣服上印的BUCKET的意思?

price bucket价格水桶bucket 英[ˈbʌkɪt]美[ˈbʌkɪt]n. 水桶; 一桶(的量); 大量; 〈俚〉交通工具;v. 用桶装,用桶运; 倾盆而下; 〈美俚〉骗; 猛开车,猛划船;[网络] 桶; 水桶包; 存储桶;[例句]We drew water in a bucket from the well outside the door.我们用一个吊桶从门外的井中打水。[其他] 第三人称单数:buckets 复数:buckets 现在分词:bucketing 过去式:bucketed 过去分词:bucketed 形近词: backet becket bucker
2023-06-06 23:25:191

bocket的翻译是:什么意思

单词拼写有误,应是:bucket bucket英 ["bu028cku026at] 美 ["bu028cku026at] n. 桶,水桶;铲斗;一桶的量v. 倾盆而下;颠簸着行进例句:She threw a bucket of water over them.她把一桶水倒在他们身上。[其他] 第三人称单数:buckets 复数:buckets 现在分词:bucketing过去式:bucketed 过去分词:bucketed
2023-06-06 23:25:261

塑胶水桶用英语怎么说

塑胶水桶Plastic bucket
2023-06-06 23:25:402

怎样用c语言表示几个数任意两个不相等

运用桶排序即可,但有局限性只能应用于整数。自己去百度具体代码,看懂算法在自己写代码。桶排序(Bucketsort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是比较排序,他不受到O(nlogn)下限的影响。1.N个数字(整形)2.求出最大的数字的位数m3.由于数字都是0到9组成,做10个桶,0到9,将N个数字依次放入桶里面3.1从个位数开始,从各位数字开始,将地i(i<m)为数字相同的数字,依次放入对应的桶中3.2从地0个桶开始,将所有桶中的数字取出,作为一个新的数字3.2重复上面两步,直至m为数字4.最后排序的为从小到大的数组排序。因为是数据排序,所以设置的桶的键值为0~9共十个桶。每次从数据的最后一个数位开始扫描,如果这个数位的值与桶的键值相等,就把这个数据放入桶内。桶可以看作是一个有序的链表,后进入的元素排在先进入的数据的后面,直到所有的数据都完成扫描,算作一次扫描。以后依次取倒数第二个扫描,按照桶的键值开始扫描,同样把数位的值与桶的键值相等的数据放入桶内。直到所有数据的最高数位也完成扫描。最后一次扫描完成,桶的键值从低到高,把这些链表串起来输出的结果就是原来数据的从小到大排序。---------------------------------------------------------------------------------------------------代码(来自《数据结构算法Visual.C.6.0程序集》)voidmain(){cout<<"bucketsort.cpp运行结果: ";intarray[SIZE];cout<<"原数组: ";srand(time(0));for(inti=0;i<SIZE;++i){array[i]=rand()0;cout<<setw(3)<<array[i];}cout<<" ";cout<<"排序过程演示: ";bucketSort(array);cout<<"排序后数组: ";for(intj=0;j<SIZE;++j)cout<<setw(3)<<array[j];cout<<endl;cin.get();}//桶排序算法voidbucketSort(inta[]){inttotalDigits,bucket[10][SIZE]={0};totalDigits=numberOfDigits(a,SIZE);for(inti=1;i<=totalDigits;++i){distributeElements(a,bucket,i);collectElements(a,bucket);//将桶数组初始化为0if(i!=totalDigits)zeroBucket(bucket);for(intj=0;j<SIZE;++j)cout<<setw(3)<<a[j];cout<<endl;}}//确定单下标数组的最大数的位数intnumberOfDigits(intb[],intarraySize){intlargest=b[0],digits=0;for(inti=1;i<arraySize;++i)if(b[i]>largest)largest=b[i];while(largest!=0){++digits;largest/=10;}returndigits;}//将单下标数组的每个值放到桶数组的行中voiddistributeElements(inta[],intbuckets[][SIZE],intdigit){intdivisor=10,bucketNumber,elementNumber;for(inti=1;i<digit;++i)divisor*=10;for(intk=0;k<SIZE;++k){bucketNumber=(a[k]%divisor-a[k]%(divisor/10))/(divisor/10);//求取地m为数字elementNumber=++buckets[bucketNumber][0];//buckets[bucketNumber][0]表示桶中的数字个数buckets[bucketNumber][elementNumber]=a[k];//放入对应的桶中}}//将桶数组的值复制回原数组voidcollectElements(inta[],intbuckets[][SIZE]){intsubscript=0;for(inti=0;i<10;++i)for(intj=1;j<=buckets[i][0];++j)a[subscript++]=buckets[i][j];}//将桶数组初始化为0voidzeroBucket(intbuckets[][SIZE]){for(inti=0;i<10;++i)for(intj=0;j<SIZE;++j)buckets[i][j]=0;}
2023-06-06 23:25:501

It rains cats and dogs.为什么要译成大雨倾盆

在古老的伦敦,一场倾盆大雨后常常是汪洋一汽,淹死许多迷路的狗和猫,因此,雨停,水退后,满街死狗死猫,似乎天上落下了众多的狗和猫似的。当时人们使用的排水系统非常简陋,排水能力极其有限。一旦下起暴雨,地下排水沟里的污水便四处横流。随着污水流出来的不仅有垃圾,各种污秽物,有时甚至还有死猫死狗之类的小动物死尸随污水蔓延出来。如此狗和猫便与瓢泼大雨扯上了关系,人们也据此杜撰了 rain cats and dogs 这一短语。由此可以看出,rain cats and dogs 并不是指天上真的掉下猫和狗(要真是如此,还不让那些喜欢猫和狗的西方人笑歪了鼻子乐歪了嘴?),而是由于大雨引起地下排水不畅,结果阴沟里的死猫死狗便随污水漂浮到地面。所以外国人把倾盆大雨叫做rain cats and dogs.希望我能帮助你解疑释惑.
2023-06-06 23:25:592

半桶水 准确翻译是?

Barrel quickly not / barrel has no, you go for barrels.
2023-06-06 23:26:194

木桶用英语怎么说?

高端木桶用英语怎么说 高端木桶 High-end cask 木桶vat; the wood; kit; bowie; cannikin “木桶效应”如何翻译成英文最好 这就是个泊来词,原文是Cannikin Law。现在也有人直接用Buckets effect 。不妨试着接触下Enter,英语翻译再也不用愁啦。 木桶的英语读法 如图 木桶的英文 bucket 油漆桶用英文怎么说? paint bucket或者paint barrel 木桶效应的解释的英文翻译 “木桶效应”或“短板效应” Buckets effect As Buckets effect reveals, the capacity of a bucket depends on the shortest board. 正如水桶理论所言,一桶水的多少,取决于最短的那块木板。 “木桶效应”如何翻译成英文最好 你好! 木桶效应 Buckets effect 木酒桶用英语怎么说 Wood wine 例句 以下例句来源于网络,仅供参考 1. 橡木/木的:在葡萄酒陈年的过程中,由于酒与橡木桶接触而产生的带有橡木的香味和口感。 Oak/ Oaky: The *** ell and taste of oak in a wine derived from contacting with barrels. 木桶原理和短板效应的英文怎么说 木桶原理 基本翻译 the cask theory cask principle 短板效应 基本翻译 cask effect 大宇的官方网站是多少 softstar/
2023-06-06 23:26:251

Ceph RGW:数据的存储及寻址

RGW是一个对象处理网关。数据实际存储在ceph集群中。利用librados的接口,与ceph集群通信。RGW主要存储三类数据:元数据(metadata)、索引数据(bucket index)、数据(data)。这三类数据一般存储在不同的pool中,元数据也分多种元数据,存在不同的ceph pool中。 1、 Metadata 元数据信息包括:user,bucket,以及bucket.instance。其中: user: 主要是对象存储的用户信息 bucket:主要维护bucket name与bucket instance id之间的映射信息 bucket.instance:维护了bucket instance信息 查看user的元数据如下: radosgw-admin metadata list user: radosgw-admin metadata get user:testid: radosgw-admin metadata list bucket: radosgw-admin metadata get bucket:first: radosgw-admin metadata list bucket.instance: radosgw-admin metadata get bucket.instance:first:{bucket_id} 2、Bucket Index bucket index主要维护的是一个bucket中object的索引信息。一个bucket对应一个或多个rados object(开启bucket shards下)。维护的是一个key-val的map结构,map存放在object的omap(rocksdb)中,key对应的rgw object,val是关于rgw object的一些元数据信息,检索bucket的存放的object时,需要这些信息。omap也包含一个Header,其存放的是bucket account info,如此bucket中Object的个数,总的size等。 3、Data rgw object内容,存放在一个或多个rados object中。rados object分为header和tail部分,header最多可以容纳512KB的数据,如果一个rgw object的大小小于512KB,那么只有header。否则剩余的数据会按照集群rados object的大小条带化分割成多个rados object。 在Pool: {zone}.rgw.meta利用namespace隔离多个存储空间: 对于Pool: {zone}.rgw.log也包含多个namespace: 当检索对象存储中的一个object时,会包含三个要素:user,bucket,object。user主要是RGW用于获取user id验证ACL;bucket及obejct用于确定object在pool中的位置。 User user数据存储在 {zone}.rgw.meta:users.uid 中,如下: 包含两部分: ups3: user本身信息; ups3.buckets: 用户所属的bucket。 ups3: 用户的基本信息,及ACL/Bucekt Quota/User Quota等;对应struct RGWUserInfo, 定义于rgw_common.h。 ups3.buckets:用户所属的Buckets,key-value结构,存放于omap结构中;对应struct cls_user_bucket_entry,定义于rgw_common.h,数据操作如下: 通过{uid}.buckets查到用户具有哪些buckets,并且这些bucket以下基本数据。 Bucket Bucket信息存在在 {zone}.rgw.meta:root 中,如下: first: 记录了bucket与bucket_instance_id的对应关系,其对应于数据结构:struct RGWBucketEntryPoint .bucket.meta.first:1c60b268-0a5d-4718-ad02-e4b5bce824bf.44166.4: bucket instance;寻址方式:.bucket.meta.{tenant}:{bucket.name}:{bucket_id};对应结构体:struct RGWBucketInfo。 其中Bucket ACL及IAM Policy存放在bucket instance object的attr中。如下: 获取Bucket ACL及IAM Policy数据如下: Object Bucket Index: Bucket中包含的Object信息,都存放在一个或多个Object的 omap 中。此omap为一个key-value结构,key为object的名称,value对应 struct rgw_bucket_dir_entry : cls_rgw_types.h 。 Bucket Index Object: 如下: 在此bucket下,有一个object: ntp.conf: 检索value: omap header记录了以下统计信息: 对象存储object的数据存放在pool: {zone}.rgw.buckets.data 中。object的构成及寻址分为以下两类: 一个RGW Object可以由一个或多个rados object构成。其中第一个 object 是此RGW 的 head 对象,主要包含一些元数据信息,如 manifest, ACLs, content type, ETag, and user-defined metadata 。这些metadata存放在此head 对象的xattr中。其中 manifest 描述了此rgw object在分布情况。同时,此head对象,最多可额外容纳 4MB 数据,如果RGW Object大小下于 4MB ,那么此 RGW Object就不会分片,只有此 head 对象。 如下检索: 目前bucket下有一个 ntp.conf , <4MB 。检索其 manifest : 如上: max_head_size: 表示head对象最大size; head_size: 表示当前head 对象size; prefix: 用于在rados中分片object的寻址。 RGW OBject ACL: 上传一个 >4MB 的 RGW Object,检索其 manifest 信息: Manifest信息: 根据 manifest 检索对象: 对于一个大的RGW Object,会被切割成多个独立的RGW Object上传,称为multipart。multipar的优势是断点续传。s3接口默认切割大小为15MB。 在此,上传一个60MB大小的Object。 分成了四个部分上传,查看rados对象: 包含了三类对象, head,multipart,shadow 。 multipart 下的 manifest : 所有的object的检索是根据上述manifest信息构建object index: 在上以上的信息中,此RGW Object大小为48128000字节,分为4段,三段15MB,最后一段为920KB。同时每段存储在rados集群中的条带化大小为4MB。因此15MB大小的分段,也分为4个rados object,一个multipart首部,及3个shadow分片。920KB大小的分段只有一个multipart首部。 .rgw.root : 包含的都是zone,zonegroup,realm等信息
2023-06-06 23:26:321

英文中的疼痛

1.ache读音:英 [eu026ak]美 [ek]2.sore 读音:英[su0254:(r)] 美[su0254r,sor]3.pain读音:英[peu026an] 美[pen]这些名词均含有“疼、疼痛”之意。ache:指人体某一器官较持久的疼痛,常常是隐痛。pain:可与ache换用,但pain既可指一般疼痛,也可指剧痛,疼痛范围可以是局部或全身,时间可长可短。也可引申指精神上的痛苦。sore:指身体某部位的痛处,有是也指精神上的痛苦。造句1.Maryhasabadcoldandsorethroat.玛丽患了重感冒而且咽喉痛。2.Losingtheelectionwasasoredisappointment.竞选失败令人痛心失望。3.Theyareinsoreneedofwaternow.他们现在极需水喝。4.Therewasalittleacheinherfancyofallhedescribed.她想象着他所描绘的一切,心里不禁有些刺痛。5.You"llmakeyourbackacheifyoucarrythoseheavybuckets.如果你背那些沉重的桶,你的背会痛的。6.Allhislimbsachedandheshiveredwithcold.他四肢隐隐作痛,冷得发抖。7.Myleg"saching.(=Mylegaches.)我腿疼。8.She"spainedbyherson"sconduct.她对儿子的行为感到痛心。9.Hisfeetseemtobeinsensitivetopain.他的脚好像没有疼痛感。10.Sheaskedaftertheachesandpainsofalltheoldpeople.她询问了所有老人的各种病痛。
2023-06-06 23:26:381

分类垃圾桶价格用英语怎么说

分类垃圾桶价格的英文翻译 Price of classified garbage bucket bucket 英[u02c8bu028cku026at] 美[u02c8bu028cku026at] n. 水桶; 一桶(的量); 大量; 〈俚〉交通工具; v. 用桶装,用桶运; 倾盆而下; 〈美俚〉骗; 猛开车,猛划船; [例句]We drew water in a bucket from the well outside the door我们用一个吊桶从门外的井中打水。[其他] 第三人称单数:buckets 复数:buckets 现在分词:bucketing过去式:bucketed 过去分词:bucketed
2023-06-06 23:26:471

Redisson批量操作类RBuckets和管道利器RBatch

在SpringBoot项目中,通过RBuckets接口实现批量操作对个Bucket对象,示例如下: 方法介绍: 多个连续命令可以通过RBatch对象在一次网络会话请求里合并发送,这样省去了产生多个请求消耗的时间和资源。这在Redis中叫做管道。 RBatch管道功能就是REDIS的批量发送,实际上是客户端的功能,与服务端无关。相当于把多个请求的命令放在一个数据包通过TCP发送到服务端,然后客户端再一次性读取所有的命令回应。管道技术最显著的优势是提高了 redis 服务的性能。 执行batchDemo()后,控制台打印结果如下: 测试用例主要介绍了Hash,当然RBatch还支持List、Set、对象桶、队列、发布订阅等。 顺便介绍一下Redis中Map的使用场景 在集群模式下,所有的命令会按各个槽所在的节点,筛选分配到各个节点并同时发送。每个节点返回的结果将会汇总到最终的结果列表里。上述demo中用到的工具类如下: 参考: https://www.cnblogs.com/east7/p/16271043.html
2023-06-06 23:27:081

two buckets

完整句子: Every morning,the gardener would fill up the two buckets.Then he would carry them along the path,one on each side,to the flowerbeds. 每天早晨,花匠都会把两只桶装满水,然后,一边一个的挑着它们,沿着小路去花田.
2023-06-06 23:27:141

水桶的英语是什么

bucket, barrel
2023-06-06 23:27:231

全家桶用英语怎么说

Buckets of
2023-06-06 23:27:314

c++桶排序正负数排序求教

#include<vector>#include<iostream> using namespace std; void bucketSort(vector<int>& vec){ int length=vec.size(); vector<int> buckets(length,0);//准备一堆桶,容器的下标即待排序数组的键值或键值经过转化后的值 //此时每个桶中都是没有放蛋的,所以都是0 for(int i=0;i<length;++i) { buckets[vec[i]]++;//把每个蛋放入到对应的桶中 } int index=0; for(int i=0;i<length;++i) {//把蛋取出,空桶则直接跳过 for(int j=0;j<buckets[i];j++) { vec[index++]=i; } }}//上例是直接将键值作为桶下标的程序,没有经过转化 int main(){ int a[10]={0,2,5,6,3,2,5,9,5,2}; vector<int> vec(a,a+10); bucketSort(vec); for(int i=0;i<vec.size();++i) { cout<<vec[i]<<" "; } return 0;}原文链接:https://blog.csdn.net/Walker19900515/article/details/47947853
2023-06-06 23:28:031

leetcode刷题遇到的问题,用uthash的时候,head指针为什么指的东西会变呢?

不对劲额姐姐
2023-06-06 23:28:183

用英语列出十种不同形状

哈,是web的作业吧,我才做完上过课抄下来给你,是列8个形状,三个日常用品squre:books,tables eraserscircle:heads coins clockstriange:umbrellas,pyramids,rocketsechelon:handbags dam,sound boxrectange:stamps chocolates,windowsdiamond:handkerchieves,paper,screenparallelogram:doors,blankets,basketpentacle:starfish stars pendant
2023-06-06 23:28:272

golang map源码浅析

golang 中 map的实现结构为: 哈希表 + 链表。 其中链表,作用是当发生hash冲突时,拉链法生成的结点。 可以看到, []bmap 是一个hash table, 每一个 bmap是我们常说的“桶”。 经过hash 函数计算出来相同的hash值, 放到相同的桶中。 一个 bmap中可以存放 8个 元素, 如果多出8个,则生成新的结点,尾接到队尾。 以上是只是静态文件 src/runtime/map.go 中的定义。 实际上编译期间会给它加料 ,动态地创建一个新的结构: 上图就是 bmap的内存模型, HOB Hash 指的就是 top hash。 注意到 key 和 value 是各自放在一起的,并不是 key/value/key/value/... 这样的形式。源码里说明这样的好处是在某些情况下可以省略掉 padding 字段,节省内存空间。 每个 bmap设计成 最多只能放 8 个 key-value 对 ,如果有第 9 个 key-value 落入当前的 bmap,那就需要再构建一个 bmap,通过 overflow 指针连接起来。 map创建方法: 我们实际上是通过调用的 makemap ,来创建map的。实际工作只是初始化了hmap中的各种字段,如:设置B的大小, 设置hash 种子 hash 0. 注意 : makemap 返回是*hmap 指针, 即 map 是引用对象, 对map的操作会影响到结构体内部 。 使用方式 对应的是下面两种方法 map的key的类型,实现了自己的hash 方式。每种类型实现hash函数方式不一样。 key 经过哈希计算后得到hash值,共 64 个 bit 位。 其中后B 个bit位置, 用来定位当前元素落在哪一个桶里, 高8个bit 为当前 hash 值的top hash。 实际上定位key的过程是一个双重循环的过程, 外层循环遍历 所有的overflow, 内层循环遍历 当前bmap 中的 8个元素 。 举例说明: 如果当前 B 的值为 5, 那么buckets 的长度 为 2^5 = 32。假设有个key 经过hash函数计算后,得到的hash结果为: 外层遍历bucket 中的链表 内层循环遍历 bmap中的8个 cell 建议先不看此部分内容,看完后续 修改 map中元素 -> 扩容 操作后 再回头看此部分内容。 扩容前的数据: 等量扩容后的数据: 等量扩容后,查找方式和原本相同, 不多做赘述。 两倍扩容后的数据 两倍扩容后,oldbuckets 的元素,可能被分配成了两部分。查找顺序如下: 此处只分析 mapaccess1 ,。 mapaccess2 相比 mapaccess1 多添加了是否找到的bool值, 有兴趣可自行看一下。 使用方式: 步骤如下: 扩容条件 : 扩容的标识 : h.oldbuckets != nil 假设当前定位到了新的buckets的3号桶中,首先会判断oldbuckets中的对应的桶有没有被搬迁过。 如果搬迁过了,不需要看原来的桶了,直接遍历新的buckets的3号桶。 扩容前: 等量扩容结果 双倍扩容会将old buckets上的元素分配到x, y两个部key & 1 << B == 0 分配到x部分,key & 1 << B == 1 分配到y部分 注意: 当前只对双倍扩容描述, 等量扩容只是重新填充了一下元素, 相对位置没有改变。 假设当前map 的B == 5,原本元素经过hash函数计算的 hash 值为: 因为双倍扩容之后 B = B + 1,此时B == 6。key & 1 << B == 1, 即 当前元素rehash到高位,新buckets中 y 部分. 否则 key & 1 << B == 0 则rehash到低位,即x 部分。 使用方式: 可以看到,每一遍历生成迭代器的时候,会随机选取一个bucket 以及 一个cell开始。 从前往后遍历,再次遍历到起始位置时,遍历完成。 https://www.qcrao.com/2019/05/22/dive-into-go-map/ https://draveness.me/golang/docs/part2-foundation/ch03-datastructure/golang-hashmap/ https://www.bilibili.com/video/BV1Q4411W7MR?spm_id_from=333.337.search-card.all.click
2023-06-06 23:28:341

急求木桶理论英文原文!!

网上还真没找到, 我来翻一下吧:The capacity of a bucket is determined by its shortest plank. Therefore, the overall capacity of the whole bucket will be impacted if there is one short plank.一个水桶能装多少水由组成它的最短的木板决定。所以如果有一块明显的短板,整个木桶容积都会受到影响。
2023-06-06 23:28:422

桶排序java怎么处理重复的元素

桶排序的核心思想是,将[0,1)分为n个大小相同的子区间, * 上一个区间里的元素都比下一个区间里的元素小,然后对 * 所有区间里的元素排序,最后顺序输出所有区间里的元素, * 达到对所有元素排序的目的。 * @author yuncong * */ public class BucketSort { public void sort(Double[] a) { int n = a.length; /** * 创建链表(桶)集合并初始化,集合中的链表用于存放相应的元素 */ int bucketNum = 10; // 桶数 LinkedList<LinkedList<Double>> buckets = new LinkedList<LinkedList<Double>>(); for(int i = 0; i < bucketNum; i++){ LinkedList<Double> bucket = new LinkedList<Double>(); buckets.add(bucket);
2023-06-06 23:29:071

关于ceph rgw storage_class 的使用研究(amazon S3 智能分层 )

为什么要研究这个? 因为rgw 没找到横向扩容的比较好的办法。有些人是在rgw 上层再加一个接入层,在上面加数据记录。比如一个“虚拟大bucket”,对应了下面多个集群的多个 bucket 。 无论哪一种办法,都要增加额外的元数据管理系统。 看到amazon 的这个 storage class 被ceph rgw (Nautilus)支持后 我打算研究一下利用这个新功能做到几件事 1 横向 在bucket 下扩pool 2 通过 bucket 下同时支持多个 pool,提高读写吞吐。 3 利用 生命周期。前置ssd pool 。达到时间后把对象迁移到后面的廉价 COLD pool 比如 大容量sata 。 ceph 官网文档 地址 https://docs.ceph.com/docs/master/radosgw/placement/ 这个功能 amazon s3 在 2018年推出 发布于: Nov 26, 2018 S3 智能分层是一种新的 Amazon S3 存储类,专为希望在数据访问模式发生变化时自动优化存储成本而不会影响性能或运营开销的客户而设计。S3 智能分层是第一个云对象存储类,通过在访问模式发生变化时在两个访问层(频繁访问层和不频繁访问层)之间移动数据来实现自动节省成本,非常适用于访问模式未知或不断变化的数据。 ceph 官方在rgw Nautilus 版本中引入 首先说说 palcement 和 storage class 的区别 placement 是指 bucket 的放置属性 ,storage class 是bucket 内每个对象的放置属性。 placement 下面默认有个标准层 STANDARD 他对应的pool 默认default.rgw.buckets.data (这个pool 可修改为你想存放的 pool,) "STANDARD": { "data_pool": “default.rgw.buckets.data” 每个 placemetn 都有个 STANDARD 你可以 添加自定义分层 比如 COLD 不只限于一个。可以多个。 上图是我测试的placement 加的2个class。 可以分别对应不同的pool 。 pool 可以根据你的需要新建在不同的设备上 比如 ssd sas sata 根据我们以前的测试结果 bucket ==> placement storage class ==>pool 创建bucket 通过指定 placement 制定了 放置池组 PUT 对象时候 可以制定 storage_class 指定具体的pool 下面说说具体做法 ,我就在默认 的 default-placement操作测试 根据官网命令 To add a new storage class named COLD to the default-placement target, start by adding it to the zonegroup 先在 zonegroup 加入 tag 1) $ radosgw-admin zonegroup placement add --rgw-zonegroup default --placement-id default-placement --storage-class COLD 2)zone 中加入 具体 pool 官网例子加上了压缩。这个可以根据需要配置是否加上 radosgw-admin zone placement add --rgw-zone default --placement-id default-placement --storage-class COLD --data-pool default.rgw.cold.data --compression lz4 结果如下 placement_pools": [ { "key": "default-placement”, "val": { "index_pool": “default.rgw.buckets.index”, "storage_classes": { 我们用 s3cmd 测试上传 对我的 测试placement 做put 文件测试 (这里我用自定义 的placemet 做测试 指定 -storage-class=TEMPCOLD s3cmd put cirros-0.3.5-x86_64-disk.img s3://bucket2/clodtest1 --storage-class=TEMPCOLD upload: "cirros-0.3.5-x86_64-disk.img" -> " s3://bucket2/clodtest1" [1 of 1] s3cmd info s3://bucket2/clodtest1 s3://bucket2/clodtest1 (object): File size: 13267968 Last mod: Sun, 29 Mar 2020 07:03:34 GMT MIME type: application/octet-stream Storage: TEMPCOLD MD5 sum: f8ab98ff5e73ebab884d80c9dc9c7290 如果不加参数 s3cmd put cirros-0.3.5-x86_64-disk.img s3://bucket2/clodtest3 upload: "cirros-0.3.5-x86_64-disk.img" -> " s3://bucket2/clodtest3" [1 of 1] 13267968 of 13267968 100% in 0s 27.25 MB/s done 数据会落在 STANDARD s3://bucket2/clodtest3 (object): File size: 13267968 Last mod: Sun, 29 Mar 2020 07:06:24 GMT MIME type: application/octet-stream Storage: STANDARD 经过测试 读数据不需要知道对象属于哪一个 Storage 。 ===== 官方说明 所有放置目标都有一个STANDARD存储类,默认情况下该存储类适用于新对象。用户可以使用覆盖此默认设置 default_storage_class。 要在非默认存储类中创建对象,请在请求的HTTP标头中提供该存储类名称。S3协议使用 X-Amz-Storage-Class标头,而Swift协议使用 X-Object-Storage-Class标头。 结论: 1 如果需要 提高性能。可以同时在一个placement 下加入多个 Storage 对应多个 pool。 客户端写数据的时候可以均衡指定 storage-class 具体可以参考s3 api . 或者可以在nginx 接入层做 灵活的指定 X-Amz-Storage-Class (对多个 storage-class 做自定义轮询或者打开关闭) 2 如果需要在pool 将近满了。可以新增一个 storage-class。 客户端读写 指定到新的 storage-class。 3 如果需要用ssd 加速。可以 用ssd pool 作为STANDARD 用 廉价 sata 作为 COLD 进行迁移。 具体要研究 Lifecycle 的设置 我这里就没时间做测试了。 目前我测试的 ceph 是 14.2.5. 不是最新。 感觉这个功能还有写莫名其妙的情况。 建议各位有需要的可以做大规模的测试。
2023-06-06 23:29:141