注意

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

网络配置参考

仔细的网络基础设施和配置对于构建弹性、高性能的Ceph 存储集群至关重要。Ceph 存储集群不会代表Ceph 客户端执行请求路由或分派。相反,Ceph 客户端直接向 Ceph OSD 守护进程发出请求。Ceph OSD 代表 Ceph 客户端执行数据复制,这会给 Ceph 网络带来额外负载。

我们的快速入门配置提供了一个最小的 Ceph 配置文件,其中包括 Monitor IP 地址和守护进程主机名。除非您指定集群网络,否则 Ceph 假定使用单个“公共”网络。在许多部署中,仅使用公共网络,Ceph 也能正常工作,尤其是在使用 25GE 或更快网络链接的情况下。对于客户端流量较高的集群,通过配置第二个专用网络可以显著提高弹性和性能。

可以使用两个网络运行 Ceph 存储集群:一个“公共”(“客户端”、“前端”)网络和一个“集群”(“专用”、“复制”、“后端”)网络。然而,这种方法使网络配置、成本和管理复杂化,并且通常可能对整体性能没有显著影响。如果使用的网络技术按现代标准来看较慢(例如 1GE,或者对于密集或 SSD 节点为 10GE),您可能希望绑定两个以上的链接以获得足够的吞吐量和/或实现专用的复制网络。

我们建议为了弹性和容量,网络接口应进行绑定并连接到冗余交换机。绑定应为主动/主动(active/active),或使用 FRR 或类似技术实现第 3 层多路径策略。使用 LACP 绑定时,咨询您的组织网络团队以确定正确的传输散列策略非常重要,通常为 2+3 或 3+4。错误的选择可能导致网络链接利用不平衡,吞吐量仅为可用吞吐量的一小部分。网络可观察性工具,包括 bmoniftopnetstat,对于确保绑定成员链接得到充分利用非常宝贵。

如果尽管存在复杂性,仍希望为 Ceph 集群配置专用复制网络,则每个Ceph 节点将需要有多个网络接口或 VLAN。有关更多详细信息,请参阅硬件推荐 - 网络

IP 表

默认情况下,守护进程绑定6800:7568 范围内的端口。您可以自行配置此范围。在配置 IP 表之前,请检查默认的 iptables 配置。

sudo iptables -L

某些 Linux 发行版包含的规则会拒绝来自所有网络接口的所有入站请求,除了 SSH。例如:

REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

您最初需要在公共网络和集群网络上删除这些规则,并在准备好硬化 Ceph 节点上的端口时替换为适当的规则。

注意

调整或重新加载规则时,Docker 和 Podman 容器可能会受到干扰。您可能会发现最好的方法是串行设置维护模式、停止容器服务、应用规则更改,然后启动容器服务并退出维护模式来更新集群节点上的规则。

Monitor IP 表

Ceph Monitors 默认监听端口 33006789。此外,Ceph Monitors 始终在公共网络上运行。当您使用以下示例添加规则时,请确保将 {iface} 替换为公共网络接口(例如 eth0eth1 等),将 {ip-address} 替换为公共网络的 IP 地址,将 {netmask} 替换为公共网络的子网掩码。

sudo iptables -A INPUT -i {iface} -p tcp -s {ip-address}/{netmask} --dport 6789 -j ACCEPT

MDS 和 Manager IP 表

A Ceph Metadata Server or Ceph Manager 监听公共网络上从端口 6800 开始的第一个可用端口。请注意,此行为不具有确定性,因此如果您在同一主机上运行多个 OSD 或 MDS,或者您在短时间内重新启动守护进程,守护进程将绑定到更高的端口。默认情况下,您应该打开整个 6800-7568 范围。当您使用以下示例添加规则时,请确保将 {iface} 替换为公共网络接口(例如 eth0eth1 等),将 {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 守护进程最多可以使用四个端口

  1. 一个用于与客户端和监视器通信。

  2. 一个用于向其他 OSD 发送数据。

  3. 每个接口上两个用于心跳。

当守护进程失败并重新启动而未释放端口时,重新启动的守护进程将绑定到新端口。您应该打开整个 6800-7568 端口范围以应对这种情况。

如果您设置了单独的公共网络和集群网络,则必须为公共网络和集群网络添加规则,因为客户端将使用公共网络连接,而其他 Ceph OSD 守护进程将使用集群网络连接。当您使用以下示例添加规则时,请确保将 {iface} 替换为网络接口(例如 eth0eth1 等),将 {ip-address} 替换为 IP 地址,将 {netmask} 替换为公共或集群网络的子网掩码。例如:

sudo iptables -A INPUT -i {iface}  -m multiport -p tcp -s {ip-address}/{netmask} --dports 6800:7568 -j ACCEPT

提示

如果您在与 Ceph OSD 守护进程相同的 Ceph 节点上运行 Ceph Metadata Servers,则可以合并公共网络配置步骤。

Ceph 网络

要配置 Ceph 网络,您必须在配置文件的 [global] 部分添加网络配置。我们的 5 分钟快速入门提供了一个简单的 Ceph 配置文件,该文件假定一个公共网络,客户端和服务器位于同一网络和子网中。Ceph 仅使用公共网络也能正常工作。然而,Ceph 允许您建立更具体的标准,包括为公共网络设置多个 IP 网络和子网掩码。您还可以建立一个单独的集群网络来处理 OSD 心跳、对象复制和恢复流量。不要将您在配置中设置的 IP 地址与网络客户端可能用于访问您的服务的面向公众的 IP 地址混淆。典型的内部 IP 网络通常是 192.168.0.010.0.0.0

提示

如果您为公共网络或集群网络指定了多个 IP 地址和子网掩码,则网络中的子网必须能够相互路由。此外,请确保在 IP 表中包含每个 IP 地址/子网,并根据需要打开端口。

注意

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}

出于安全考虑,我们更倾向于集群网络不能从公共网络或 Internet 访问。

Ceph 守护进程

Monitor 守护进程各自配置为绑定到特定的 IP 地址。这些地址通常由您的部署工具配置。Ceph 集群中的其他组件通过 mon host 配置选项发现监视器,该选项通常在 ceph.conf 文件的 [global] 部分指定。

[global]
    mon_host = 10.0.0.2, 10.0.0.3, 10.0.0.4

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_addr 设置覆盖 public_network 设置。

public_network_interface

要从中选择一个地址以绑定到 public_network 的接口名称;public_network 也必须指定。

类型:

str

另请参阅:

public_network

public_network

公共(前端)网络的 IP 地址和子网掩码(例如 192.168.0.0/24)。在 [global] 中设置。您可以指定逗号分隔的子网。格式为 {ip- address}/{netmask} [, {ip-address}/{netmask}]

类型:

str

public_addr

公共(前端)网络的 IP 地址。为每个守护进程设置。

类型:

addr

集群网络

集群网络配置允许您声明集群网络,并专门为集群网络定义 IP 地址和子网。您可以专门分配静态 IP 地址,或使用特定 OSD 守护进程的 cluster_addr 设置覆盖 cluster_network 设置。

cluster_network_interface

要从中选择一个地址以绑定到 cluster_network 的接口名称;cluster_network 也必须指定。

类型:

str

另请参阅:

cluster_network

cluster_network

集群(后端)网络的 IP 地址和子网掩码(例如 10.0.0.0/24)。在 [global] 中设置。您可以指定逗号分隔的子网。格式为 {ip- address}/{netmask} [, {ip-address}/{netmask}]

类型:

str

cluster_addr

集群(后端)网络的 IP 地址。为每个守护进程设置。

类型:

addr

绑定

绑定设置设置 Ceph OSD 和 MDS 守护进程使用的默认端口范围。默认范围是 6800:7568。确保您的IP 表配置允许您使用配置的端口范围。

您还可以启用 Ceph 守护进程绑定到 IPv6 地址而不是 IPv4 地址。

ms_bind_port_min

OSD 或 MDS 守护进程将绑定的最小端口号。

类型:

int

默认值:

6800

ms_bind_port_max

OSD 或 MDS 守护进程将绑定的最大端口号。

类型:

int

默认值:

7568

ms_bind_ipv4

启用 Ceph 守护进程绑定到 IPv4 地址。

类型:

bool

默认值:

true

另请参阅:

ms_bind_ipv6

ms_bind_ipv6

启用 Ceph 守护进程绑定到 IPv6 地址。

类型:

bool

默认值:

false

另请参阅:

ms_bind_ipv4

public_bind_addr

在某些动态部署中,Ceph Monitor 守护进程可能会绑定到本地 IP 地址,该地址与向网络中其他对等方通告的 public_addr 不同。环境必须确保路由规则设置正确。如果设置了 public_bind_addr,Ceph Monitor 守护进程将本地绑定到它,并使用 public_addr 在 monmaps 中向对等方通告其地址。此行为仅限于 Monitor 守护进程。

类型:

addr

TCP

Ceph 默认禁用 TCP 缓冲。

ms_tcp_nodelay

Ceph 启用 ms_tcp_nodelay 以便立即发送每个请求(无缓冲)。禁用 Nagle 算法会增加网络流量,这可能会引入延迟。如果您遇到大量小数据包,可以尝试禁用 ms_tcp_nodelay

类型:

bool

默认值:

true

ms_tcp_rcvbuf

网络连接接收端的套接字缓冲区大小。默认禁用。

类型:

大小

默认值:

0B

常规设置

ms_type

Async Messenger 使用的传输类型。可以是 async+posixasync+dpdkasync+rdma。Posix 使用标准 TCP/IP 网络并且是默认设置。其他传输可能处于实验阶段,支持可能有限。

类型:

str

默认值:

async+posix

ms_async_op_threads

每个 Async Messenger 实例使用的初始工作线程数。应至少等于最高副本数,但如果您的 CPU 核心数较低和/或在单个服务器上托管大量 OSD,则可以减少它。

类型:

uint

默认值:

3

允许范围:

[1, 24]

ms_initial_backoff

在发生故障时重新连接之前等待的初始时间。

类型:

float

默认值:

0.2

ms_max_backoff

在发生故障时重新连接之前等待的最长时间。

类型:

float

默认值:

15.0

另请参阅:

ms_initial_backoff

ms_die_on_bad_msg

调试选项;不要配置。

类型:

bool

默认值:

false

ms_dispatch_throttle_bytes

限制等待分派的消息总大小。

类型:

大小

默认值:

100Mi

ms_inject_socket_failures

调试选项;不要配置。

类型:

uint

默认值:

0

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入