网络配置对于构建高性能Ceph存储群集至关重要。 Ceph存储群集不代表Ceph客户端执行请求路由或调度。相反,Ceph客户端直接向Ceph OSD守护程序发出请求。 Ceph OSD守护程序代表Ceph客户端执行数据复制,这意味着复制和其他因素会在Ceph存储群集网络上施加额外的负载。
集群默认提供了一个简单的Ceph配置文件,该文件仅设置监视器IP地址和守护程序主机名。除非您指定群集网络,否则Ceph将假定为单个“公共”网络。 Ceph只能在公共网络上正常运行,但是大型集群中的第二个“集群”网络可能会显着改善性能。
可以使用两个网络来运行Ceph存储群集:一个公共(前端)网络和一个群集(后端)网络。但是,这种方法使网络配置(包括硬件和软件)复杂化,并且通常不会对整体性能产生重大影响。因此,我们通常建议双NIC在同一网络上配置两个IP或绑定。
如果尽管复杂,但仍然希望使用两个网络,则每个Ceph节点将需要具有多个NIC。
默认情况下,守护程序绑定到6800:7300范围内的端口。 可以自行决定配置此范围。Linux发行版包含拒绝所有入站请求(除来自所有网络接口的SSH之外)的规则。
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
需要在公共网络和群集网络上都删除这些规则,并在准备加强Ceph节点上的端口时将它们替换为适当的规则。
ceph mon默认监听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
Ceph Metadata Server或Ceph Manager从端口6800开始侦听公共网络上的第一个可用端口。请注意,此行为不是确定性的,因此,如果您在同一主机上运行多个OSD或MDS,或者重新启动 守护程序在很短的时间内,它们将绑定到更高的端口。 默认情况下,您应该打开整个6800-7300系列。 使用以下示例添加规则时,请确保将{iface}替换为公用网络接口(例如eth0,eth1等),将{ip-address}替换为公用网络的IP地址,并将{netmask} 与公共网络的子网掩码。
sudo iptables -A INPUT -i {iface} -m multiport -p tcp -s {ip-address}/{netmask} --dports 6800:7300 -j ACCEPT
默认情况下,Ceph OSD守护进程绑定到Ceph节点上从端口6800开始的第一个可用端口。请注意,此行为不是确定性的,因此,如果您在同一主机上运行多个OSD或MDS,或者重新启动 守护程序在很短的时间内,这些守护程序将绑定到更高的端口。 一个Ceph节点上的每个Ceph OSD守护程序最多可以使用四个端口:
一种用于与客户和监视器对话。
一种用于将数据发送到其他OSD。
两个用于每个接口上的心跳。
当守护程序发生故障并在不松开端口的情况下重新启动时,重新启动的守护程序将绑定到新端口。 您应该打开整个6800-7300端口范围以应对这种可能性。
如果您设置了单独的公用网络和群集网络,则必须同时为公用网络和群集网络添加规则,因为客户端将使用公用网络进行连接,而其他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:7300 -j ACCEPT
要配置Ceph网络,必须将网络配置添加到配置文件的[global]部分。 我们5分钟的快速入门提供了一个简单的Ceph配置文件,该文件假设一个公共网络,客户端和服务器位于同一网络和子网上。 Ceph只能在公共网络上正常运行。 但是,Ceph允许您建立更具体的条件,包括公共网络的多个IP网络和子网掩码。 您还可以建立一个单独的群集网络来处理OSD心跳,对象复制和恢复流量。 不要将您在配置中设置的IP地址与网络客户端可以用来访问您的服务的面向公众的IP地址混淆。 典型的内部IP网络通常为192.168.0.0或10.0.0.0。
配置publice network 可以在[global]部分添加配置
[global]
# ... elided configuration
public network = {public-network/netmask}
果声明群集网络,则OSD将在群集网络上路由心跳,对象复制和恢复流量。 与使用单个网络相比,这可以提高性能。 要配置群集网络,请将以下选项添加到Ceph配置文件的[global]部分。
[global]
# ... elided configuration
cluster network = {cluster-network/netmask}
每个监视守护程序都配置为绑定到特定的IP地址。 这些地址通常由您的部署工具配置。 Ceph系统中的其他组件通过通常在ceph.conf文件的[global]部分中指定的mon host配置选项发现监视器
[global]
mon host = 10.0.0.2, 10.0.0.3, 10.0.0.4
mon主机值可以是IP地址列表,也可以是通过DNS查找的名称。 对于具有多个A或AAAA记录的DNS名称,将对所有记录进行探测以发现监视器。 一旦达到一台监视器,便会发现所有其他当前监视器,因此mon主机配置选项仅需要足够最新,以便客户端可以访问一台当前在线的监视器。
MGR,OSD和MDS守护程序将绑定到任何可用地址,并且不需要任何特殊配置。 但是,可以为它们指定一个特定的IP地址,以便与公共地址(和/或OSD守护程序为群集地址)配置选项绑定。 例如,
[osd.0]
public addr = {host-public-ip-address}
cluster addr = {host-cluster-ip-address}
以下配置都不是必须的
public network:
公用(前端)网络的IP地址和子网掩码(例如192.168.0.0/24)。 在[global]中设置。 您可以指定逗号分隔的子网。
Type:
{ip-address}/{netmask} [, {ip-address}/{netmask}]
public addr:
公共(前端)网络的IP地址。 为每个守护程序设置。
群集网络配置允许您声明群集网络,并专门为群集网络定义IP地址和子网。 您可以使用特定OSD守护程序的群集地址设置来专门分配静态IP地址或覆盖群集网络设置。
cluster network:
群集(后端)网络的IP地址和子网掩码(例如10.0.0.0/24)。 在[global]中设置。 您可以指定逗号分隔的子网。
Type:
{ip-address}/{netmask} [, {ip-address}/{netmask}]
cluster addr:
集群(后端)网络的IP地址。 为每个守护程序设置。
绑定设置可设置Ceph OSD和MDS守护进程使用的默认端口范围。 默认范围是6800:7300。 确保IP表配置允许您使用配置的端口范围。
ms bind port min:
osd和mds绑定的最小端口
default:6800
ms bind port max:
osd和mds绑定的最大端口
default:7300
ms bind ipv6:
使Ceph守护程序能够绑定到IPv6地址。 当前,该Messenger使用IPv4或IPv6,但不能同时使用两者。
Type:boolean
default:false
public bind addr:
在某些动态部署中,Ceph MON守护程序可能会本地绑定到一个IP地址,该IP地址与广告给网络中其他对等方的公共地址不同。 环境必须确保正确设置了路由规则。 如果设置了public bind addr,则Ceph MON守护进程将在本地绑定到它,并在monmap中使用public addr将其地址通告给对等方。 此行为仅限于MON守护程序。
ms tcp nodelay:
Ceph启用ms tcp nodelay,以便立即发送每个请求(不缓冲)。 停用Nagle的算法会增加网络流量,这可能会导致延迟。 如果遇到大量的小数据包,则可以尝试禁用ms tcp nodelay。
Type:Boolean
Default:true
ms tcp rcvbuf:
网络连接的接收端上的套接字缓冲区的大小。 默认禁用。
Type:int 32
default:0
ms tcp read timeout:
如果客户端或守护程序向另一个Ceph守护程序发出请求且未删除未使用的连接,则ms tcp读取超时会将连接定义为在指定的秒数后为空闲
Type:Unsigned 64-bit Integer
default:900 (15 minutes.)