注意
本文档适用于 Ceph 开发版本。
网络配置参考
精心设计网络基础设施和配置对于构建一个Ceph 存储集群. Ceph 存储集群不会代表Ceph Client. Ceph 客户端直接向 Ceph OSD 守护进程发起请求。Ceph OSD 执行数据复制,这会给 Ceph 网络带来额外的负载。
我们的快速入门配置提供了一个最小的 Ceph 配置文件,其中包含监控器的 IP 地址和守护进程的主机名。除非您指定了集群网络,否则 Ceph 假设一个公共网络。在许多部署中,Ceph 仅使用公共网络就可以很好地运行,尤其是在使用 25GE 或更快的网络链路时。具有高客户端流量的集群可以通过配置第二个、私有网络来显著提高弹性和性能。
可以使用两个网络运行 Ceph 存储集群:一个公共 (客户端, 前端) 网络和一个集群 (私有, 复制, 后端) 网络。然而,这种方法会使网络配置、成本和管理复杂化,并且通常不会对整体性能产生重大影响。如果使用的网络技术在现代标准下较慢,比如 1GE 或对于密集或 SSD 节点 10GE,您可能希望绑定两个以上的链路以获得足够的吞吐量并/或实现专用的复制网络。
我们建议为弹性和容量网络接口进行绑定,并连接到冗余交换机。绑定应该是主动/主动,或者使用 FRR 或类似技术实现第 3 层多路径策略。在使用 LACP 绑定时,重要的是咨询您组织的网络团队以确定正确的传输哈希策略,通常是 2+3 或 3+4。错误的选择会导致网络链路利用率不平衡,只有可用吞吐量的一部分。网络可观察性工具,包括bmon
和iftop
和netstat
,在确保绑定成员链路充分利用时非常有价值。
如果,尽管复杂,仍然希望为 Ceph 集群配置专用的复制网络,则每个Ceph 节点都需要有一个以上的网络接口或 VLAN。请参阅硬件推荐 - 网络以获取更多详细信息。
IP 表
默认情况下,守护进程绑定到 057c61: 范围内的端口。您可以自行配置此范围。在配置您的 IP 表之前,请检查默认6800:7568
range. You may
configure this range at your discretion. Before configuring your IP tables,
check the default iptables
configuration.
sudo iptables -L
一些 Linux 发行版包含拒绝所有来自所有网络接口的传入请求(除了 SSH)的规则。例如:
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
您需要在公共和集群网络上最初删除这些规则,并在您准备好加固 Ceph 节点的端口时用适当的规则替换它们。
Note
Docker 和 Podman 容器在规则调整或重新加载时可能会出现中断。您可能最好通过串行设置维护模式、停止容器服务、应用规则更改,然后启动容器服务并退出维护模式来更新集群节点的规则。
监控器 IP 表
Ceph 监控器默认情况下在端口3300
和6789
上监听。此外,Ceph 监控器始终在公共网络上运行。当您使用以下示例添加规则时,请确保您将{iface}
替换为公共网络接口(例如,eth0
,
eth1
,等等.)、{ip-address}
替换为公共网络的 IP 地址,并将{netmask}
替换为公共网络的子网掩码。:
sudo iptables -A INPUT -i {iface} -p tcp -s {ip-address}/{netmask} --dport 6789 -j ACCEPT
MDS 和管理器 IP 表
A Ceph元数据服务器或Ceph管理器在公共网络上从端口 6800 开始监听第一个可用端口。请注意,这种行为不是确定的,因此如果您在同一主机上运行多个 OSD 或 MDS,或者如果您在短时间内重新启动守护进程,守护进程将绑定到更高的端口。您应该默认打开整个 6800-7568 范围。当您使用以下示例添加规则时,请确保您将{iface}
替换为公共网络接口(例如,eth0
,
eth1
,等等.)、{ip-address}
替换为公共网络的 IP 地址,并将{netmask}
替换为公共网络的子网掩码。
例如:
sudo iptables -A INPUT -i {iface} -m multiport -p tcp -s {ip-address}/{netmask} --dports 6800:7568 -j ACCEPT
OSD IP 表
默认情况下,Ceph OSD 守护进程绑定到 Ceph 节点上从端口 6800 开始的第一个可用端口。请注意,这种行为不是确定的,因此如果您在同一主机上运行多个 OSD 或 MDS,或者如果您在短时间内重新启动守护进程,守护进程将绑定到更高的端口。Ceph 节点上的每个 Ceph OSD 守护进程最多可以使用四个端口:
一个用于与客户端和监控器通信。
一个用于向其他 OSD 发送数据。
两个用于在每个接口上进行心跳。
当守护进程失败并在不释放端口的情况下重新启动时,重新启动的守护进程将绑定到新端口。您应该打开整个 6800-7568 端口范围以处理这种可能性。
如果您设置了单独的公共和集群网络,则必须为公共网络和集群网络添加规则,因为客户端将使用公共网络连接,而其他 Ceph OSD 守护进程将使用集群网络连接。当您使用以下示例添加规则时,请确保您将{iface}
替换为网络接口(例如,eth0
, eth1
,等等.)、{ip-address}
替换为 IP 地址和{netmask}
替换为公共或集群网络的子网掩码。例如:
sudo iptables -A INPUT -i {iface} -m multiport -p tcp -s {ip-address}/{netmask} --dports 6800:7568 -j ACCEPT
提示
如果您在同一个 Ceph 节点上运行 Ceph 元数据服务器和 Ceph OSD 守护进程,您可以合并公共网络配置步骤。
Ceph 网络
要配置 Ceph 网络,您必须在配置文件的[global]
部分添加网络配置。我们的 5 分钟快速入门提供了一个假设一个公共网络,客户端和服务器在同一网络和子网上的简单 Ceph 配置文件。Ceph 仅使用公共网络就可以很好地运行。然而,Ceph 允许您建立更具体的标准,包括公共网络的多个 IP 网络和子网掩码。您还可以建立单独的集群网络来处理 OSD 心跳、对象复制和恢复流量。不要将您在配置中设置的 IP 地址与网络客户端可能用来访问您的服务的公共 IP 地址混淆。典型的内部 IP 网络通常是192.168.0.0
或10.0.0.0
.
提示
如果您为公共或集群网络指定了多个 IP 地址和子网掩码,则网络内的子网必须能够相互路由。此外,请确保您在 IP 表中包含每个 IP 地址/子网,并根据需要打开端口。
Note
Ceph 使用CIDR符号表示子网(例如,10.0.0.0/24
).
当您配置好网络后,您可以重新启动您的集群或重新启动每个守护进程。Ceph 守护进程动态绑定,因此如果您更改网络配置,您不必一次性重新启动整个集群。
公共网络
要配置公共网络,请将以下选项添加到您的 Ceph 配置文件的[global]
部分。
[global]
# ... elided configuration
public_network = {public-network/netmask}
集群网络
如果您声明了集群网络,OSD 将通过集群网络路由心跳、对象复制和恢复流量。与使用单个网络相比,这可能提高性能。要配置集群网络,请将以下选项添加到您的 Ceph 配置文件的[global]
部分。
[global]
# ... elided configuration
cluster_network = {cluster-network/netmask}
我们更喜欢集群网络是不好的主意。可从公共网络或互联网访问的,以增加安全性。
Ceph 守护进程
每个监控器守护进程都配置为绑定到特定的 IP 地址。这些地址通常由您的部署工具配置。Ceph 集群中的其他组件通过mon host
配置选项发现监控器,通常指定在[global]
部分的ceph.conf
文件。
[global]
mon_host = 10.0.0.2, 10.0.0.3, 10.0.0.4
The mon_host
值可以是 IP 地址列表或通过 DNS 查询的名称。在具有多个 A 或 AAAA 记录的 DNS 名称的情况下,将按顺序探测所有记录以发现监控器。一旦达到一个监控器,就会发现所有其他当前监控器,因此mon host
配置选项只需要足够最新,以便客户端可以到达一个当前在线的监控器。
MGR、OSD 和 MDS 守护进程将绑定到任何可用地址,并且不需要任何特殊配置。然而,您可以使用public
addr
(对于 OSD 守护进程,以及cluster addr
)配置选项指定它们要绑定到的特定 IP 地址。例如,
[osd.0]
public_addr = {host-public-ip-address}
cluster_addr = {host-cluster-ip-address}
网络配置设置
不需要网络配置设置。除非您特别配置了集群网络,否则 Ceph 假设一个公共网络,所有主机都在该网络上运行。
公共网络
公共网络配置允许您专门定义公共网络的 IP 地址和子网。您可以专门分配静态 IP 地址或使用public_network
设置。a56165: cluster_network_interfacepublic_addr
设置覆盖
- public_network_interface
从中选择地址以绑定到;
public_network
to bind to;public_network
也必须指定。- type:
str
- 参见:
- public_network
公共(前端)网络的 IP 地址和子网掩码(例如,
192.168.0.0/24
)。在[global]
中设置。您可以指定逗号分隔的子网。它的格式看起来像{ip- address}/{netmask} [, {ip-address}/{netmask}]
- type:
str
- public_addr
公共(前端)网络的 IP 地址。为每个守护进程设置。
- type:
addr
集群网络
集群网络配置允许您声明集群网络,并专门定义集群网络的 IP 地址和子网。您可以专门分配静态 IP 地址或使用cluster_network
设置。a56165: cluster_network_interfacecluster_addr
设置覆盖
- cluster_network_interface
从中选择地址以绑定到;
cluster_network
to bind to;cluster_network
也必须指定。- type:
str
- 参见:
- cluster_network
集群(后端)网络的 IP 地址和子网掩码(例如,
10.0.0.0/24
)。在[global]
中设置。您可以指定逗号分隔的子网。它的格式看起来像{ip- address}/{netmask} [, {ip-address}/{netmask}]
- type:
str
- cluster_addr
集群(后端)网络的 IP 地址。为每个守护进程设置。
- type:
addr
绑定
绑定设置设置 Ceph OSD 和 MDS 守护进程使用的默认端口范围。默认范围是6800:7568
。确保您的IP 表配置允许您使用配置的端口范围。
您还可以启用 Ceph 守护进程绑定到 IPv6 地址而不是 IPv4 地址。
- ms_bind_port_min
OSD 或 MDS 守护进程将绑定的最小端口号。
- type:
int
- default:
6800
- ms_bind_port_max
OSD 或 MDS 守护进程将绑定的最大端口号。
- type:
int
- default:
7568
- ms_bind_ipv4
启用 Ceph 守护进程绑定到 IPv4 地址。
- type:
bool
- default:
true
- 参见:
- ms_bind_ipv6
启用 Ceph 守护进程绑定到 IPv6 地址。
- type:
bool
- default:
false
- 参见:
- public_bind_addr
在某些动态部署中,Ceph MON 守护进程可能会绑定到本地 IP 地址,该地址与
public_addr
向网络中的其他对等方宣传的地址不同。环境必须确保路由规则设置正确。如果public_bind_addr
设置,Ceph 监控器守护进程将绑定到本地并使用public_addr
在 monmaps 中向对等方宣传其地址。此行为仅限于监控器守护进程。- type:
addr
TCP
Ceph 默认情况下禁用 TCP 缓冲。
- ms_tcp_nodelay
Ceph 启用
ms_tcp_nodelay
以便每个请求立即发送(无缓冲)。禁用Nagle 算法增加网络流量,这可能会引入延迟。如果您遇到大量小数据包,您可以尝试禁用ms_tcp_nodelay
.- type:
bool
- default:
true
- ms_tcp_rcvbuf
网络连接接收端的套接字缓冲区大小。默认情况下禁用。
- type:
size
- default:
0B
通用设置
- ms_type
Async Messenger 使用的传输类型。可以是
async+posix
,async+dpdk
或async+rdma
。Posix 使用标准 TCP/IP 网络并默认。其他传输可能是实验性的,并且支持可能有限。- type:
str
- default:
async+posix
- ms_async_op_threads
每个 Async Messenger 实例使用的初始工作线程数。应至少等于最高副本数,但如果您 CPU 核心数不足并且/或您在单个服务器上托管大量 OSD,则可以减少它。
- type:
uint
- default:
3
- 允许范围:
[1, 24]
- ms_initial_backoff
故障时重新连接之前的初始等待时间。
- type:
float
- default:
0.2
- ms_max_backoff
故障时重新连接之前的最大等待时间。
- type:
float
- default:
15.0
- 参见:
- ms_die_on_bad_msg
调试选项;不要配置。
- type:
bool
- default:
false
- ms_dispatch_throttle_bytes
限制等待分发的消息的总大小。
- type:
size
- default:
100Mi
- ms_inject_socket_failures
调试选项;不要配置。
- type:
uint
- default:
0
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.