官方教程:https://ceph.readthedocs.io/en/latest/rados/configuration/msgr2/
Messenger V2协议或 msgr2 是 Ceph 在线协议的第二个主要修订。它具有几个主要功能:
- 使用安全模式,对通过网络传递的所有数据进行加密
- 改进了身份验证有效负载的封装,可以将来集成新的身份验证模式(例如Kerberos)
- 改进了较早的功能公告和协商,可支持将来的协议修订
Ceph守护程序现在可以绑定到多个端口,从而允许旧版Ceph客户端和支持v2的新客户端连接到同一集群。
默认情况下,监视器现在绑定到新的v2协议的新IANA分配端口3300(ce4h或0xce4),同时还绑定到旧的默认端口6789(旧的v1协议)。
在nautilus之前,所有网络地址都呈现为1.2.3.4:567/89012,其中有一个IP地址,一个端口和一个随机数,以唯一地标识网络上的客户端或守护程序。从nautilus开始,我们现在有三种不同的地址类型:
- v2: v2:1.2.3.4:578/89012 标识绑定到使用新 v2 协议的端口的守护程序。
- v1: v1:1.2.3.4:578/89012 标识绑定到使用旧版v1协议的端口的守护程序。以前显示的带有任何前缀的任何地址现在都显示为v1:地址。
- TYPE_ANY 地址标识可以说两种协议版本的客户端。在nautilus之前,客户端将显示为1.2.3.4:0/123456,其中端口0表示它们是客户端,并且不接受传入连接。从Nautilus开始,这些客户端现在在内部由TYPE_ANY地址表示,并且仍显示为不带前缀,因为它们可能会使用v2或v1协议连接到守护程序,具体取决于守护程序所使用的协议。
因为守护程序现在绑定到多个端口,所以现在用地址向量而不是单个地址来描述它们。例如,将 Monitor 映射转储到 Nautilus 群集上现在包括以下行:
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 命令行选项支持相同的带括号的地址矢量语法。
两个新的配置选项控制是否使用 v1 或 v2协议:
- ms_bind_msgr1 :默认为 true,控制守护程序是否绑定到使用 v1 协议的端口。
- ms_bind_msgr2:默认为 true,控制守护程序是否绑定到使用 v2 协议的端口。
同样,两个选项控制是否使用IPv4和IPv6地址:
- ms_bind_ipv4:默认为 true,控制守护程序是否绑定到IPv4地址
- ms_bind_ipv6:默认为 false,控制守护程序是否绑定到IPv6地址
v2协议支持两种连接模式:
-
crc 模式提供:
- 建立连接时进行强力的初始身份验证(使用cephx,通过中间人或窃听者的保护对双方进行相互身份验证)。
- crc32c 完整性检查,以防止由于意外情况而导致的位翻转。
-
crc 模式不提供:
- 保密(网络上的窃听者可以查看经过的所有身份验证后的流量)
- 保护免受中间人的恶意攻击(只要他们谨慎地调整crc32c值以使其匹配,谁就可以故意修改流量)
-
secure 模式提供:
- 建立连接时进行强力的初始身份验证(使用cephx,通过中间人或窃听者的保护对双方进行相互身份验证)
- 对所有身份验证后流量进行完全加密,包括加密完整性检查。
在Nautilus中,安全模式使用AES-GCM流密码,该密码在现代处理器上通常非常快(比SHA-256密码哈希更快)。
对于大多数连接,有一些选项可以控制使用哪种模式:
- ms_cluster_mode 是用于Ceph守护程序之间的集群内通信的连接模式(或允许的模式)。如果列出了多个模式,则首选第一个列出的模式。
- ms_service_mode 是客户端连接到群集时允许使用的模式的列表。
- ms_client_mode 是按优先顺序排列的连接模式的列表,供客户端在与Ceph集群通话时使用(或允许)。
有一组并行的选项专门适用于监视器,允许管理员设置与监视器通信的不同(通常更安全)要求:
- ms_mon_cluster_mode 是 monitors 之间使用的连接模式(或允许的模式)。
- ms_mon_service_mode 是客户端或其他Ceph守护程序连接到 monitors 时允许使用的模式的列表。
- ms_mon_client_mode 是按优先顺序排列的连接模式列表,供客户端或非监视器守护程序在连接到监视器时使用。
默认情况下,从Nautilus 14.2.z开始,ms_bind_msgr2为true。但是,在 monitors 开始使用v2之前,只有有限的服务才能开始发布v2地址。
对于大多数用户,monitors 已绑定到 v1 协议的默认旧版端口6789。在这种情况下,启用v2非常简单:
$ ceph mon enable-msgr2
如果监视器绑定到非标准端口,则需要为v2明确指定其他端口。例如,如果监视器mon.a绑定到1.2.3.4:1111,并且您想要在端口1112上添加v2,则:
$ ceph mon set-addrs a [v2:1.2.3.4:1112,v1:1.2.3.4:1111]
监视器绑定到v2后,每个守护程序将在下一次重新启动时开始发布v2地址。
在Nautilus之前,CLI用户或守护程序通常将通过 /etc/ceph/ceph.conf 中的 mon_host 选项发现 monitors 。
此选项的语法已从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]
但是,使用默认端口(3300和6789)时,可以将其省略:
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
命令(该命令会生成准系统配置文件,其中包含足够的信息以到达 monitors)
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