新闻

NEWS

VC君讲技术04 | 7大功能分享

发布时间:2020-06-09 发布者:瑞驰信息技术

老铁们,大家好,

瑞驰VC君带着干货又来啦!

这一期,我们来分享一些实用功能!

每一期get一点技术要领,

欢迎在评论区留言交流!


《VC君讲技术》

技术分享第4期

作者:带鱼、乐枫



1、rgwstorage class功能


placement target直接关联bucket的,比如:s3cmd mb s3://bk01 --bucket-location=":wuhan" ,这样后续往这个bucket里面写入数据时(当前用户有这个target的权限),数据实际是存储在wuhan这个target映射的pools里面了,注意不能修改buckettarget

storage class是和用户对象直接关联的。也就是说可以基于storage class实现同一个bucket里面的不同对象分别存在不同的pool里面,比如:s3cmd --storage-class=COLD put a.txt s3://bk01,这样a.txt的数据就存在了COLD对应的pool里面。

相同点就是它们两个都可以实现用户数据分层存储,只是storage class控制的粒度更细,可以控制同一个bucket里面的对应可以分别存在不同的pool里面,而target只能控制到bucket粒度的。比如建立两个placement target,每个target分别有自己的pool,给用户授权可以同时使用这两个placement target,然后在请求header里面增加bucket-location来指定数据放到哪个placement target里面,比如:s3cmd mb s3://bk01 --bucket-location=":wuhan"

 


2、rgw:支持用户策略


rgw用户数据实体目前包含的权限有两种:1)用户操作访问权限,包括readwritedelete,比如用户有write权限时,才可以创建bucket2)授权用户权限,由一组<caps-type,perm>组成,比如用户的cpas=users,read时,表示该用户具有查询其他rgw用户信息的权限。

社区提交了一个prhttps://github.com/ceph/ceph/pull/31547,这个pr支持设置用户策略的功能(类似rgw已经有的bucket策略功能),可以针对某个用户设置对bucket、对象的访问权限。比如:

# set user policy

radosgw-admin user-policy put --uid yly3 --policy-name xxxx --policy-doc=\{\"Version\":\"2012-10-17\",\"Statement\":\[\{\"Sid\":\"VisualEditor0\",\"Effect\":\"Allow\",\"Action\":\"s3:PutObject\",\"Resource\":\"arn:aws:s3:::yly2\/*\"\}\]\}

 

# list user policy

radosgw-admin user-policy list --uid yly3

{

    "PolicyNames": [

        "xxxx"

    ]

}

 

# get user policy

radosgw-admin user-policy get --uid yly3 --policy-name xxxx

{

    "UserName": "yly3",

    "PolicyName": "xxxx",

    "PolicyDocument": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"VisualEditor0\",\"Effect\":\"Allow\",\"Action\":\"s3:PutObject\",\"Resource\":\"arn:aws:s3:::yly2/*\"}]}"

}

 

# delete user policy

radosgw-admin user-policy delete --uid yly3 --policy-name xxxx

radosgw-admin user-policy list --uid yly3

{

    "PolicyNames": []

}


3、rgw:指定自己的用户身份验证服务器功能


rgw中,我们可以将rgw用户身份验证,委托给外部的服务器,比如KeystoneLDAP等。 但不能使用我们自己的身份认证服务器。 这个prhttps://github.com/ceph/ceph/pull/34093)支持任何人都可以拥有自己的身份验证服务器,虽然还没有被社区正式merge,但这个想法还是不错的,有的企业也有这种需求


4、rgwdisable整个head对象的预读


GET请求是部分读时,禁用整个head对象的预取。 rgw 的当前行为是获得整个head对象,尽管客户端只要求一个小的字节偏移量,比如: 如果客户请求字节0-1rgw会获取0-4194304。prhttps://github.com/ceph/ceph/pull/33807)带来的两个显而易见的好处:

1、降低磁盘负载。

2、提升网络带宽利用率。

该功能还会进一步优化,比如:如果请求的range第一个chunk重叠,仍然应该预那个交集,以避免为客户端发送单独的读取请求


5、rgw:支持通过bucket id查看bucket stats


最近社区在rgw这块没有大的动作,主要是在完善和优化一些细节方面的,比如这个prhttps://github.com/ceph/ceph/pull/30024):当一个bucket对应的rados对象的omap过大时,日志里面会出现告警信息:

cluster [WRN] Large omap object found. Object:

272:77fe05db:::.dir.7659bed4-dcd2-4616-95b3-4f7d971c6dd8.2907365.1:head

Key count: 2401160 Size (bytes): 459802197

此时可以通过该特性直接查看对应bucket的详细信息:radosgw-admin bucket stats --bucket-id=xxx,省略了先通过bucket id去找到bucket name的步骤。


6、cephfs:增加wsyncnowsync 挂载选项


kcephfslinux内核 v5.7版本中加入这两个挂载选项,具体含义如下:

wsync同步执行cephfs命名空间操作比如mkdir 该选项确保命名空间操作只有在收到来自 MDS reply消息之后才会完成,wsync是默认选项。

nowsync允许客户端异步执行cephfs命名空间的操作。当启用此选项时,如果客户端有足够的caps可以完成名称空间操作,则可以在MDS应答之前完成。

总的上来说开启nowsync是为了对文件系统性能有一定提升。

 

7、rados:修改pool size时,计算pool min size优化


大家都知道poolsizemin size的值是会影响集群可用性的,比如当前某个pg的存活数小于min size的话,该pg是无法使用的。

当前情况是,我们重新设置poolsize时,min size不会自动更新,比如当前sizemin size分别是21,我们修改size35,此时一般我们是希望min size会变成23这样,该prhttps://github.com/ceph/ceph/pull/34586/files)优化了min size的计算,只要修改(增加或减少)poolsize,就会重新计算出pool合理的min size