注意

本文档适用于 Ceph 开发版本。

Messenger v2

它是什么

消息传递v2协议,或msgr2,是Ceph的链路协议的第二版主要修订。它带来了几个关键特性:

  • A 安全模式改进了认证负载的封装,支持未来集成新的认证模式,如Kerberos

  • Improved encapsulation of authentication payloads, enabling future integration of new authentication modes like Kerberos

  • 改进了早期功能广告和协商,支持未来协议修订

Ceph守护进程现在可以绑定到多个端口,允许传统的Ceph客户端和新的v2支持客户端连接到同一个集群。

默认情况下,监视器现在绑定到新的IANA分配的端口3300(ce4h或0xce4)用于新的v2协议,同时绑定到旧默认端口6789用于传统的v1协议。

地址格式

在Nautilus之前,所有网络地址都像1.2.3.4:567/89012其中有一个IP地址、一个端口和一个

  • v2: v2:1.2.3.4:578/89012识别绑定到

  • v1: v1:1.2.3.4:578/89012识别绑定到v1:地址。

  • TYPE_ANY any:1.2.3.4:578/89012识别可以1.2.3.4:0/123456,其中端口为0表示它们是客户端并且不接受传入连接。从Nautilus开始,TYPE_ANY地址,并且仍然显示没有任何前缀,因为它们可以连接到使用v2或v1协议的守护进程,具体取决于守护进程使用什么协议。

由于守护进程现在绑定到多个端口,因此现在由一组地址而不是单个地址描述。例如,

epoch 1
fsid 50fcf227-be32-4bcb-8b41-34ca8370bd16
last_changed 2019-02-25 11:10:46.700821
created 2019-02-25 11:10:46.700821
min_mon_release 14 (nautilus)
0: [v2:10.0.0.10:3300/0,v1:10.0.0.10:6789/0] mon.foo
1: [v2:10.0.0.11:3300/0,v1:10.0.0.11:6789/0] mon.bar
2: [v2:10.0.0.12:3300/0,v1:10.0.0.12:6789/0] mon.baz

括号列表或地址向量表示同一守护进程可以在多个端口(和协议)上被访问。任何连接到该守护进程的客户端或其他守护进程都将尽可能使用v2协议(列在前面);否则将回退到传统的v1协议。传统客户端将只看到v1地址,并将像以前一样继续连接,使用v1协议。

从Nautilus开始,mon_host配置选项和-m <mon-host>命令行选项支持相同的括号地址向量语法。

绑定配置选项

两个新的配置选项控制是否使用v1和/或v2协议:

  • ms_bind_msgr1[默认:true] 控制守护进程是否绑定

  • ms_bind_msgr2[默认:true] 控制守护进程是否绑定

类似地,两个选项控制是否使用IPv4和IPv6地址:

  • ms_bind_ipv4[默认:true] 控制守护进程是否绑定

  • ms_bind_ipv6[默认:false] 控制守护进程是否绑定

连接模式

v2协议支持两种连接模式:

  • crc模式提供:

    • 在连接建立时(使用cephx,双方互认证,防止中间人或窃听者)提供强大的初始认证,并且

    • 提供crc32c完整性检查,以防止由于不可靠硬件或宇宙射线导致的位翻转

    crc模式提供firefly 发布。Firefly 将延迟至少另一个冲刺,以便我们可以对新代码进行一些操作经验,并进行一些额外的测试,然后再承诺长期支持。提供以下功能:

    • 机密性(网络上的窃听者可以看到所有认证后流量)

    • 防止恶意中间人(他们可以故意修改流量,只要他们小心地调整crc32c值以匹配)

  • 安全模式模式提供:

    • 在连接建立时(使用cephx,双方互认证,防止中间人或窃听者)提供强大的初始认证,并且

    • 对所有认证后流量进行完全加密,包括密码学完整性检查。

    在Nautilus中,安全模式使用AES-GCM流密码,这在现代处理器上通常非常快(例如,比SHA-256密码学散列更快)。

连接模式配置选项

对于大多数连接,有一些选项控制使用哪些模式:

ms_cluster_mode

连接模式(或允许的模式)用于Ceph守护进程之间的集群内通信。如果列出多个模式,则优先使用列出的前几个模式。

type:

str

default:

crc secure

参见:

ms_service_mode, ms_client_mode

ms_service_mode

客户端连接到集群时允许使用的模式列表。

type:

str

default:

crc secure

参见:

ms_cluster_mode, ms_client_mode

ms_client_mode

客户端在与Ceph集群通信时使用(或允许)的连接模式列表,按优先级排序。

type:

str

default:

crc secure

参见:

ms_cluster_mode, ms_service_mode

有一个平行的选项集专门适用于监视器,允许管理员对与监视器的通信设置不同的(通常更安全)要求。

ms_mon_cluster_mode

监视器之间使用的连接模式(或允许的模式)。

type:

str

default:

secure crc

参见:

ms_mon_service_mode, ms_mon_client_mode, ms_service_mode, ms_cluster_mode, ms_client_mode

ms_mon_service_mode

客户端或其他Ceph守护进程连接到监视器时允许使用的模式列表。

type:

str

default:

secure crc

参见:

ms_service_mode, ms_mon_cluster_mode, ms_mon_client_mode, ms_cluster_mode, ms_client_mode

ms_mon_client_mode

客户端或非监视器守护进程连接到监视器时使用的连接模式列表,按优先级排序。

type:

str

default:

secure crc

参见:

ms_mon_service_mode, ms_mon_cluster_mode, ms_service_mode, ms_cluster_mode, ms_client_mode

压缩模式

v2协议支持两种压缩模式:

  • force模式提供:

    • 在多可用区部署中,压缩OSD之间的复制消息可以节省延迟。

    • 在公共云中,跨AZ通信成本高昂。因此,最小化消息大小可以降低向云提供商的网络成本。

    • 在AWS上使用实例存储(可能还有其他公共云)的情况下,具有NVMe的实例相对于设备带宽的网络带宽较低。

  • none模式提供:

    • 消息在不压缩的情况下传输。

压缩模式配置选项

对于所有连接,有一个选项控制安全模式下的压缩使用

ms_compress_secure

结合加密和压缩降低了同伴之间消息的安全性。如果同时启用加密和压缩,压缩设置将被忽略,消息不会被压缩。这种行为可以使用此设置覆盖。

type:

bool

default:

false

参见:

ms_osd_compress_mode

有一个平行的选项集专门适用于OSD,

ms_osd_compress_mode

与OSD通信时在Messenger中使用的压缩策略

type:

str

default:

none

valid choices:
  • none

  • force

参见:

ms_compress_secure

ms_osd_compress_min_size

可以进行链路压缩的最小消息大小

type:

uint

default:

1Ki

参见:

ms_osd_compress_mode

ms_osd_compression_algorithm

与OSD连接时按优先级排序的压缩算法

type:

str

default:

snappy

参见:

ms_osd_compress_mode

从仅v1过渡到v2-plus-v1

默认情况下,ms_bind_msgr2从Nautilus 14.2.z开始,这是真的。

对于大多数用户,监视器绑定到v1协议的默认传统端口6789。在这种情况下,启用v2很简单:

ceph mon enable-msgr2

如果监视器绑定到非标准端口,您需要明确指定v2的附加端口。例如,如果您的监视器mon.a绑定到1.2.3.4:1111,并且您想在端口1112:

ceph mon set-addrs a [v2:1.2.3.4:1112,v1:1.2.3.4:1111]

一旦监视器绑定到v2,每个守护进程在下一次重新启动时都会开始广告一个v2地址。

更新 ceph.conf 和 mon_host

在Nautilus之前,CLI用户或守护进程通常会通过mon_host选项在/etc/ceph/ceph.conf中发现监视器。从Nautilus开始,此选项的语法已扩展以支持新的括号列表格式。例如,旧行:

mon_host = 10.0.0.1:6789,10.0.0.2:6789,10.0.0.3:6789

可以更改为:

mon_host = [v2:10.0.0.1:3300/0,v1:10.0.0.1:6789/0],[v2:10.0.0.2:3300/0,v1:10.0.0.2:6789/0],[v2:10.0.0.3:3300/0,v1:10.0.0.3:6789/0]

然而,当使用默认端口(33006789)时,它们可以省略:

mon_host = 10.0.0.1,10.0.0.2,10.0.0.3

一旦在监视器上启用了v2,ceph.conf可能需要更新为指定无端口(这通常是简单的),或明确指定v2和v1地址。注意,然而,新的括号语法只被Nautilus和以后的版本理解,因此不要在尚未升级ceph软件包的主机上做出此更改。

在更新ceph.conf时,请注意新的ceph config generate-minimal-conf命令(它生成一个只有足够信息来访问监视器的最基本配置文件)和ceph config assimilate-conf(它将配置文件选项移动到监视器的配置数据库中)可能会有所帮助。例如,:

# ceph config assimilate-conf < /etc/ceph/ceph.conf
# ceph config generate-minimal-config > /etc/ceph/ceph.conf.new
# cat /etc/ceph/ceph.conf.new
# minimal ceph.conf for 0e5a806b-0ce5-4bc6-b949-aa6f68f5c2a3
[global]
        fsid = 0e5a806b-0ce5-4bc6-b949-aa6f68f5c2a3
        mon_host = [v2:10.0.0.1:3300/0,v1:10.0.0.1:6789/0]
# mv /etc/ceph/ceph.conf.new /etc/ceph/ceph.conf

协议

有关v2链路协议的详细描述,请参阅msgr2协议(msgr2.0和msgr2.1).

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.