建立一个高性能的Ceph存储集群网络配置是至关重要的。 Ceph的存储集群不执行CEPH客户的路由请求或路由调度。相反, Ceph的Client直接提出请求CEPH OSD守护进程。 Ceph的OSD守护代表Ceph的客户端执行数据备份,这意味着备份和其他因素施加额外负荷Ceph的存储集群网络。
我们的快速入门(Our Quick Start configurations)提供了一个简单的Ceph的配置文件,它也只是设置MON的IP地址和守护进程的主机名。除非你指定集群网络, Ceph只假定一个单一的“公用”网络。 Ceph的功能只在一个公共网络中有效,但与第二的“集群”在大型集群网络,您可能会看到显着的性能改善。我们建议运行Ceph的存储群集有两个网络:一个公共网络(前端)和集群(背面)网络。为了支持两个网络,每个Ceph的节点将需要有一个以上的网卡。
考虑经营两个独立的网络有以下几个原因:
性能: CEPH OSD守护进程处理数据复制为Ceph的客户。 Ceph的OSD守护不止一次地备份数据,Ceph的OSD守护程序之间的网络负载轻松相形见绌Ceph的客户端和Ceph的存储集群之间的网络负载。这可以引入延迟,并引发一个性能问题。恢复和再平衡还可以引入显着的延迟,在公共网络上。Ceph的备份数据的可扩展性和高可用性的其他细节,见MON/ OSD心跳流量的详细信息。
安全性:虽然大多数人一般都是合法公民,一个小部分人,确喜欢搞什么被称为拒绝服务(DoS)攻击。 Ceph的OSD守护进程之间的通信被中断时,可能不再反映安置组一个active+clean的状态,这可能会阻止用户读取和写入数据。一个非常好的方式来防御这种类型的攻击是保持一个完全独立的集群网络没有直接连接到互联网。另外,考虑使用消息签名以击败欺骗攻击。
一些Linux发行版有这样的规则:拒绝所有入站请求,除了SSH所有的网络接口外。例如:
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited你需要删除你的公共和集群网络上的最初规则,把它们替换为相应的规则,当你准备变更Ceph的节点上的端口。
sudo iptables -A INPUT -i {iface} -p tcp -s {ip-address}/{netmask} --dport 6789 -j ACCEPT
sudo iptables -A INPUT -i {iface} -m multiport -p tcp -s {ip-address}/{netmask} --dports 6800:6810 -j ACCEPT
一个用于心态检验。
端口是特定端口,因此您不需要打开任何比Ceph的节点上运行的守护进程所需的端口数还多的端口。您可能会考虑开设一些额外的端口,一个守护进程失败的情况下,并重新启动,而不让去重新启动守护进程绑定到一个新的端口。
如果您设置了独立的公共网络和集群网络,你必须为公共网络和集群网络设定规则,因为客户会利用公共网络连接,而其他Ceph的OSD守护进程将使用集群网络连接。当您使用下面的例子中添加到表中时,确保您用公网接口(例如,为eth0, eth1的,等等)替换下面的"iface" , 用公网的IP地址和公共网络的网络端口替换 {ip-address}和{netmask}。例如:
sudo iptables -A INPUT -i {iface} -m multiport -p tcp -s {ip-address}/{netmask} --dports 6800:6810 -j ACCEPT提示:如果您运行Ceph的元数据服务器在同一Ceph的节点,他们为Ceph的OSD守护实例,你可以加固公共网络配置的步骤。确保您打开每个主机的每个守护进程所需的端口数量。
PUBLIC NETWORK
要配置公共网络,下面的选项添加到您的Ceph的配置文件的[ global]部分。
[global] ... public network = {public-network/netmask}
[global] ... cluster network = {cluster-network/netmask}我们宁愿从公共网络或互联网为增加安全性,集群网络不可达。
[mon.a] host = {hostname} mon addr = {ip-address}:6789 [osd.0] host = {hostname}您不必为守护进程设置主机IP地址。如果你有一个静态IP配置以及公共和集群网络的运行, Ceph的配置文件可以指定为每个守护进程的主机的IP地址。一个守护进程设置一个静态的IP地址,下面的选项(s)应出现在守护进程的ceph.conf文件中。
[osd.0] public addr = {host-public-ip-address} cluster addr = {host-cluster-ip-address}一个NIC OSD在两个网络集群
public network
说明:公众(前端)网络的IP地址和子网掩码(例如,192.168.0.0/24 ) 。 [global]设置。您可以指定用逗号分隔的子网。
类型: {ip-address}/{netmask} [, {ip-address}/{netmask}]
要求:无
默认:N / A
public addr
说明:公众(前端)网络的IP地址。设置每个守护。
类型: IP地址
要求:无
默认:N / A
CLUSTER NETWORK 集群网络
集群网络配置允许你声明一个集群网络,并明确定义为集群网络的IP地址和子网。您可能专门分配静态IP地址或覆盖集群网络设置,使用群集地址设置为特定OSD守护的。
集群网络
说明: IP地址和子网掩码的集群(背面)网络(例如, 10.0.0.0/24 ) 。 [global]设置。您可以指定用逗号分隔的子网。
类型: {ip-address}/{netmask} [, {ip-address}/{netmask}]
要求:无
默认:N / A
集群地址
说明: IP地址为集群(背面)网络,给每个守护进程设置。
类型:地址
要求:无
默认:N / A
BIND
绑定设置Ceph的OSD和MDS守护的使用默认端口范围。默认范围为6800:7100 。确保您的IP表配置,您可以使用配置的端口范围。您也可以启用Ceph的守护程序绑定到IPv6地址。
ms bind port min
说明:最低端口号OSD或MDS守护进程将绑定。
类型: 32位整数
默认值: 6800
要求:无
ms bind port max
说明:最大端口号OSD或MDS守护进程将绑定。
类型: 32位整数
默认值: 7100
要求:无
ms bind ipv6
说明:启用Ceph的守护程序绑定到IPv6地址。
类型:布尔
默认值:false
要求:无
HOSTS
Ceph的声明在CEPH配置文件中至少有一个MON,在每个声明的MON下有一个MON地址。 Ceph的期望根据a host,在MON、元数据服务器和OSD在CEPH配置文件中进行设置。
mon addr
说明: {主机名} : {端口}项列表,客户端可以使用连接到Ceph的监视器。如果没有设置, Ceph的搜索[MON* ]部分。
类型:字符串
要求:无
默认:N / A
host
说明:主机名。使用此设置特定的守护进程实例(例如, [ osd.0 ] ) 。
类型:字符串
要求:是的,守护进程实例。
默认:本地
提示:不要使用localhost 。使用 hostname -s查看你的主机名。
TCP
Ceph的默认情况下禁用TCP缓冲。
tcp nodelay
说明: Ceph的启用TCP NODELAY的每个请求立即发送(无缓冲) 。禁用Nagle算法,增加网络流量,它可以引入延迟。如果遇到大量的小数据包,您可以尝试禁用TCP NODELAY 。
类型:布尔
要求:无
默认:true
tcp rcvbuf
说明:在接收端上的一个网络连接的套接字缓冲区的大小。默认情况下禁用。
类型: 32位整数
要求:无
默认值:0
ms tcp read timeout
说明:如果一个客户端或守护程序发出请求到另一个Ceph的守护进程,并没有删除未使用的连接, TCP读超时定义为闲置的连接后,在指定的秒数。
类型:无符号64位整型
要求:无