luminous.jpg
先明确一下这么做的必要性。Ceph 的客户端,如 RADOSGW,RBD 等,会直接和 OSD 互联,以上传和下载数据,这部分是直接提供对外下载上传能力的;Ceph 一个基本功能是提供数据的冗余备份,OSD 负责数据的备份,跨主机间的数据备份当然要占用带宽,而且这部分带宽是无益于 Ceph 集群的吞吐量的。只有一个网络,尤其是有新的存储节点加入时,Ceph 集群的性能会因为大量的数据拷贝而变得很糟糕。所以对于性能有一定要求的用户,还是有必要配置内外网分离的。
Ceph 内外分离网络结构
建立内网是为了降低 OSD 节点间数据复制对 Ceph 整体的影响,那么只要在 OSD 节点上加内网就可以了,上图非常清晰的描述了内网和外网覆盖的范围。 做内外网分离,必不可少的前提条件是 OSD 服务器上必须有两张可用的网卡,并且网络互通,确保这点我们就可以开始了。别以为是废话哈,我在配置时,就是因为有台 OSD 服务器网卡丢包严重,分析了好长时间才找到原因的。
如果 Linux 服务器上开启了防火墙,就有必要配置 iptables 规则,让服务器的防火墙放开对 OSD 新开放的 端口限制。
# Monitor 服务器
$ sudo iptables -A INPUT -i {iface} -p tcp -s {ip-address}/{netmask} --dport 6789 -j ACCEPT
# MDS 和 MGR 服务器
$ sudo iptables -A INPUT -i {iface} -m multiport -p tcp -s {ip-address}/{netmask} --dports 6800:7300 -j ACCEPT
# OSD 服务器
$ sudo iptables -A INPUT -i {iface} -m multiport -p tcp -s {ip-address}/{netmask} --dports 6800:7300 -j ACCEPT
先上修改好的例子。
[golbal]
...
public_network = 10.19.250.0/24
cluster_network = 10.19.251.0/24
...
[osd.0]
host = osd5
public_addr = 10.19.250.35
cluster_addr = 10.19.251.35
[osd.1]
host = osd5
public_addr = 10.19.250.35
cluster_addr = 10.19.251.35
...
配置并不复杂,主要就是两段:
hostname -s
来查询。public_addr 填写所在主机的外网地址,cluster_addr 则填写主机的内网地址。配置修改好后,就需要把配置上传到服务器上了,配置 Ceph 环境,通常都是使用 ceph-deploy,现在也可以用这个命令上传配置。
ceph-deploy --overwrite-conf config push [<host-name>...]
最后,配置需要重启 ceph 相关的进程才能生效。
# OSD 服务器上需重启全部 OSD 进程
sudo systemctl restart ceph-osd@*
# Monitor 服务器
sudo systemctl restart ceph-mon@*
# Manager 服务器
sudo systemctl restart ceph-mgr@*
# metadata 服务器
sudo systemctl restart ceph-mds@*