Ceph Kraken 版已经发布!

本文由Ceph中国社区-徐小胖翻译、小猴子校稿 英文出处:We’ve released the kraken! 欢迎加入CCTG

获取11.2.0 “KRAKEN”

Kraken版本于1月20号正式发布,这是 Kraken 系列的第一个发行版本。该版本已经适合在生产环境中部署使用,并且会被维护到下一个稳定版。下一个版本,Luminous ,会在2017年的春天完成。

Jewel 以来的主要变化

  • RADOS:

    • 新的 BlueStore 后端现在已经有了稳定的磁盘格式,并且通过了我们的故障和压力测试。尽管这个后端仍然标记为实验性的,我们鼓励用户在非生产集群和不重要的数据集中尝试 BlueStore 。
    • RADOS 现在支持 EC 池的 overwrites, 由于磁盘格式和实现仍未最终完成,所以该特性是实验性的,要测试这个新特性,需要使能一个特殊的池的配置。使能该配置项后,将禁止集群升级到未来新的版本。
    • 现在默认使用 AsyncMessenger (ms type = async),取代之前的 SimpleMessenger。最重要的不同点在于我们现在使用一个固定大小的线程池用于网络连接(取代了 SimpleMessenger 中使用的每个 socket 两个线程)。
    • 现在 OSD 故障可以被立刻检测出来,以前是需要等到心跳超时(默认是20秒)之后。这可以防止在故障时间段内阻塞 IO,因为此时主机在线而其实 ceph-osd 进程已不再运行。
    • 新增了 ceph-mgr 程序。 默认与 Mon 搭配使用,尽管目前使用得不多,但是这种架构已经成型。
    • 编码的 OSDMaps 的大小已经减小。
    • 现在 OSD 在 recovery 或者 rebalance 时, 会静默scrub。
  • RGW:

    • RGW 现在支持新的 zone 类型,元数据通过 ElasticSearch 进行索引。
    • RGW 现在支持 S3 分片对象的部分拷贝 API 。
    • 现在可以对已经存在的桶进行重新分片。注意:桶的重新分片目前要求所有的IO(尤其是写)都要静默。
    • RGW 现在支持对象的数据压缩。
    • Civetweb 版本升级到1.8。
    • 现在支持 Swift 静态页面 API (S3 支持之前已经添加)。
    • 新增 S3 的桶生命周期 API。注意:目前只支持对象期满。
    • 对自定义的搜索过滤器的支持已经添加到 LDAP 认证实现中。
    • 对 NFS version 3的支持已经添加到 RGW NFS 网关中。
    • 为 librgw 创建了一个 Python 的绑定。
  • RBD:

    • RBD 现在支持镜像存储于一个EC池中,通过使用新的(实验性的) overwrite 支持。镜像必须使用新的RBD CLI ‘-data-pool <ec pool >’ 配置项在指定的EC池中创建,用于存储后端对象数据。直接向一个EC池中创建镜像将不会成功,因为镜像的后端元数据只支持存放于副本池内。
    • rbd-mirror 程序现在支持从主镜像向从镜像复制动态的镜像特性更新以及镜像元数据的键值对。
    • 镜像快照的个数现在可以限定到某个可配置的最大值。
    • RBD 的 Python API 现在支持异步IO操作了。
  • CephFS:

    • libcephfs 函数定义已经被修改过,用于支持适当的uid/gid控制。 库的版本号已经提升用于显示该接口的修改。
    • Standby replay MDS 程序现在做删除操作时消耗更少的内存。
    • Scrub 现在可以修复回溯,并通过 damage ls 将发现的错误罗列出来。
    • cephfs-data-scan 有一个新的子指令 pg_files ,可以识别出被某个损坏/丢失 PG 所影响的文件。
    • “failing to respond to cache pressure” 误报警已经被修复。

Kraken 11.1.0 升级须知

新的 BlueStore 后端在 11.1.0 版本之后有一个磁盘格式改动。任何使用 11.1.0 创建的 BluseStore 的 OSD 都需要被摧毁并重建。

Jewel 升级须知

  • 所有集群必须先升级到 Jewel 10.2.z 版本,然后再升级到 Kraken 11.2.z 版本 (或者,最终, Luminous 12.2.z 版本)。
  • 在升级 Jewel 集群到 Kraken 之前,必须设置 sortbitwise 标记位。如果该标记位未被设置,最近的 Jewel(10.2.4+) 系列会抛出集群健康警告,尽管标记位可能已经被设置。如果不设置,Kraken 的OSD将会拒绝启动并且在日志中打印出错误消息。
  • 升级 OSD, Monitor, MDS 的顺序随意。 RGW 应当最后升级。
  • 升级时, 新的 ceph-mgr 进程实例将会在任一个 Monitor 创建时自动创建。 当从 Jewel 升级到 Kraken 以及 Jewel 升级到 Luminous 时也会自动创建, 但是 Luminous 之后的版本升级可能不会创建。 当然,如果你不希望 ceph-mgr 和 ceph-mon 捆绑创建,你可以创建新的 ceph-mgr 进程实例并且摧毁自动生成的。

BLUESTORE

BlueStore 是一种新的存储后端,用于管理存储 OSD 上的数据,OSD 直接建立在硬盘或者 SSD 上。 不像现有的 FileStore 实现方法使用 XFS 文件系统将对象存储为文件, BlueStore 直接管理了底层的块设备。 BlueStore 根据 Ceph OSD 的负载,实现了自己的类文件系统的磁盘数据结构。主要特性包括:

  • 默认开启:所有写数据的校验和,以及所有读操作的校验和验证。
  • 内联压缩支持,可以根据池属性或者客户端配置,对特定池或者特定对象上开启该功能。
  • 高效的日志。 不像 FileStore 那样讲所有数据写入到日志盘, BlueStore 只使用日志记录元数据和(默写情形下) 小的写操作, 降低了对日志盘的大小和吞吐量要求。 而和 FileStore 一样, 日志盘可以和数据盘共用一个磁盘, 或者将所有的日志盘部署在一个小的高性能的设备上(比如 SSD 或者 NVMe 设备)。 BlueStore 的日志盘默认只需要 512MB。

BlueStore 的磁盘格式将会不断优化改进。但是,我们会提供旧的 OSD 数据迁移到新格式的OSD的升级方案支持。 为了使能 BlueStore, 将以下配置添加至 ceph.conf:

enableexperimental unrecoverabledatacorrupting features = bluestore

创建一个 BlueStore 的 OSD, 需将 -bluestore 选项传给 ceph-disk 或者 ceph-deploy 方可。

升级注意事项

  • OSD 现在不会在 recovery 进行时启动新的 scrub 。 要回到之前的方式(不让 recovery 影响到 scrub ), 你可以设置如下的配置: osd scrub during recovery = true

  • 用于创建 monmap 的 Mon 主机/地址列表现在可以包含在DNS SRV 记录中。 用于查询 DNS 的服务名现在定义在 “mon_dns_srv_name” 配置项中,默认值为 “ceph-mon”。
  • ’osd class load list’ 配置项列出了OSD可以加载的对象类名(’*’ 代表所有类)。默认情况下,为了向后兼容,该配置包含所有已存在的树状类。
  • ’osd class default list’ 配置项列出了对象的类名(或者使用’*’来代表所有类),客户端可以通过该配置管理’*’, ‘x’, ‘class-read’, ‘class-write’ 权限。默认情况下,为了向后兼容性,该配置包含了所有已存在的类名。调用不包含在’osd class default list’ 内的类需要在权限中命名该类(比如 ‘allow class foo’)。
  • ‘rgw rest getusage op compat’ 这个配置允许你导出(或不导出)在 S3 GetUsage API 中的用户状态的描述。这个配置默认是 false。如果设置为 true, GetUsage 的返回值如下:

      “stats”: {
                  “TotalBytes”: 516,
                  “TotalBytesRounded”: 1024,
                  “TotalEntries”: 1
               }

    如果设置为 false, GetUsage 的返回值如下:

      {
           516,
           1024,
           1
      }
  • ‘osd out …’ 和 ‘osd in …’ 指令现在保留 OSD 权重。 也就是说,在将一个 OSD 标记为 out 然后再标记为 in 之后, OSD的权重会和之前的(而原来是被重设为1.0)一样。 之前,mon 只会在 mon 自动将 OSD 标记为 out 然后 in 时保留权重, 而不会在管理者执行类似指令后保留权重。
  • ‘ ceph osd perf ‘ 指令会显示 ‘commit_latency(ms)’和 ‘apply_latency(ms)’。之前,这两栏的名字是 ‘fs_commit_latency(ms)’ 和 ‘fs_apply_latency(ms)’。 我们移去了前缀 ‘fs_’, 因为他们不是 FileStore 特有的。
  • Mon 不再默认允许池可以被删除。在删除池之前,必须将配置 ’mon_allow_pool_delete’ 设置为 true (默认为 false )。这是一个防止池被意外删除的额外的保障。
  • 如果你通过 ‘mon keyvaluedb = rocksdb’ 手动指定 mon 使用 rocksdb 作为后端,你需要手动添加一个文件以保留这个配置:

echo rocksdb > /var/lib/ceph/mon/ceph-‘hostname’/kv_backend

现在,新的 Mon 会默认使用 rocksdb ,但是如果那个文件不存在,已有的 Mon 会使用 leveldb 。’mon keyvaluedb’ 配置现在只在 Mon 创建的时候影响其后端DB的选择。

  • ‘ osd crush initial weight’ 配置允许你为新增的 OSD 指定其 CRUSH 权重。 之前的默认值0意味着我们应当使用一个 OSD 容量大小来给 OSD 赋之权重。 现在的0意味着 OSD 的权重是0,而负值(新的默认值)意味着我们应该自动使用 OSD 的容量大小赋之权重。如果你的配置文件给这个配置项指定为0,你需要将其改为一个负值(比如-1)来保留当前的行为。
  • ‘ osd crush location’ 配置不再被支持。请更新你的 ceph.conf ,使用 ‘crush location ‘ 替换之。
  • 静态库不再包含于 debian 开发包(lib*-dev*)中,因为它不再被每个 debian 包需要。 而共享(.so)库还和之前一样。
  • libtool 伪库(.la 文件)不再包含于 debian 开发包(lib*-dev)中,因为它不再被需要 https://wiki.debian.org/ReleaseGoals/LAFileRemoval and https://www.debian.org/doc/manuals/maint-guide/advanced.en.html
  • Jerasure 和 shec 插件现在可以在运行时侦测到 SIMD 命令,并且不再需要根据不同处理器显式配置。以下的插件被废弃: : jerasure_generic, jerasure_sse3, jerasure_sse4, jerasure_neon, shec_generic, shec_sse3, shec_sse4, 还有 shec_neon。 如果你直接使用任一个插件的话,你会看到 MON的日志文件里面有报警信息。请更换到 jerasure 或者 shec。
  • Librados 的 omap 的 get_keys 和 get_vals 操作新增了要返回的起始 key 和 key 的个数限制两个参数。现在 OSD 强制要求其返回的 keys 个数和总字节数的配置限定,也就是说一个 librados 的用户可能获取比他们需求更少的 keys。为了防止粗心的用户使用一个操作从集群请求不合理的数量的数据,这是很有必要的。 新的限制配置项为 : ’osd_max_omap_entries_per_request‘ 默认是 131072 和 ‘osd_max_omap_bytes_per_request’ 默认是 4MB 。
  • 恢复的优先级的计算已经升级。在集群升级时,不是很直观得看到恢复优先级变化。在这种情况下的恢复,旧版的 OSD 和新版的 OSD 的优先级范围会不同。 一旦升级后, 集群会使用统一的值。

Leave a Comment

电子邮件地址不会被公开。