Ceph存储集群使用注意事项
系统内核
具有大量OSD(例如,> 20)的主机可能产生大量线程,尤其是在恢复和重新平衡期间。
许多Linux内核默认为相对较小的最大线程数(例如,32k)。
如果在具有大量OSD的主机上启动OSD时遇到问题,请考虑设置kernel.pid_max更多线程。理论最大值为4,194,303个线程。
例如,您可以将以下内容添加到/etc/sysctl.conf文件中:
kernel.pid_max = 4194303
网络
建议每台主机至少有两个1Gbps网络接口控制器(NIC)。
由于大多数商用硬盘驱动器的吞吐量大约为100MB /秒,因此您的NIC应该能够处理主机上OSD磁盘的流量。
建议至少使用两个NIC来考虑公共(前端)网络和群集(后端)网络。
群集网络(最好不连接到Internet)处理数据复制的额外负载,并帮助阻止阻群集实现的拒绝服务攻击OSD的状态active + clean,因为OSD会在群集中复制数据。
考虑从机架中的10Gbps网络开始。在1Gbps网络上复制1TB数据需要3个小时,而3TB(典型的驱动器配置)需要9个小时。
相比之下,对于10Gbps网络,复制时间分别为20分钟和1小时。
两个硬件配置示例
- 戴尔PE R510
处理器:2x 64位四核Xeon CPU
内存:16 GB
卷存储:8x 2TB驱动器,1 OS,7存储
客户端网络:2x 1GB以太网NIC
OSD网络:2x 1GB以太网NIC
MGMT.网络:2x 1GB以太网NIC
- 戴尔PE R515
处理器:1x hex-core Opteron CPU
内存:16 GB
卷存储:12x 3TB驱动器存储
OS存储:1x 500GB硬盘操作系统。
客户端网络:2x 1GB以太网NIC
OSD网络:2x 1GB以太网NIC
MGMT.网络:2x 1GB以太网NIC
LINUX内核
如果您使用内核客户端映射RBD块设备或挂载CephFS,一般建议是使用http://kernel.org或您的Linux发行版在任何客户端上提供的“稳定”或“长期维护”内核系列主机。
对于RBD,如果您选择跟踪长期内核,我们目前推荐基于4.x的“长期维护”内核系列:
4.9.z
4.4.z
对于CephFS,请参阅CephFS内核版本指南的最佳实践。http://docs.ceph.com/docs/luminous/cephfs/best-practices/
至少使用Ceph的Jewel(v10.2.0)版本。这是第一个包含稳定的CephFS代码和fsck修复工具的版本。确保您使用最新的版本发布以修复错误。
请注意,Ceph版本不包含内核客户端,它是版本化的并单独发布。
较旧的内核客户端版本可能不支持您的CRUSH可调参数配置文件或Ceph集群的其他较新功能,需要配置存储集群并禁用这些功能。
CephFS的实验性功能有:内联数据、快照、多个文件系统、目录碎片、多个活动元数据服务器。
目录碎片在Luminous (12.2.x)之前被认为是实验性的。
在Luminous(12.2.x)版本发布之前,在单个文件系统中运行多个活动元数据服务器被认为是实验性的。
为了获得健康的文件系统的最佳机会,请使用单个活动MDS 并且不要使用快照。这两个都是默认值。
请注意,创建多个MDS守护进程很好,因为它们将仅用作备用数据库。
但是,为了获得最佳稳定性,应避免max_mds向上调整,因为这会导致多个MDS守护程序同时处于活动状态。
FUSE客户端是最容易访问且最容易升级到存储集群使用的Ceph版本,而内核客户端通常会提供更好的性能。
客户端并不总是提供等效功能,例如,fuse客户端支持客户端强制配额,而内核客户端则不支持。
当遇到错误或性能问题时,尝试使用其他客户端通常是有益的,以便找出错误是否是客户端特定的(然后让开发人员知道)。
从Ceph 10.x(Jewel)开始,你应该使用至少一个4.x内核。如果您必须使用较旧的内核,则应使用fuse客户端而不是内核客户端。
如果您使用的是包含CephFS支持的Linux发行版,则此建议不适用,因为在这种情况下,分发服务器将负责将修复程序反向移植到其稳定内核,请与您的供应商联系。
支持平台
- Luminous (12.2.z)
Distro Release Code Name Kernel Notes Testing
CentOS 7 N/A linux-3.10.0 3 B, I, C
Debian 8.0 Jessie linux-3.16.0 1, 2 B, I
Debian 9.0 Stretch linux-4.9 1, 2 B, I
Fedora 22 N/A linux-3.14.0 B, I
RHEL 7 Maipo linux-3.10.0 B, I
Ubuntu 14.04 Trusty Tahr linux-3.13.0 B, I, C
Ubuntu 16.04 Xenial Xerus linux-4.4.0 3 B, I, C
- Jewel (10.2.z)
Distro Release Code Name Kernel Notes Testing
CentOS 7 N/A linux-3.10.0 3 B, I, C
Debian 8.0 Jessie linux-3.16.0 1, 2 B, I
Fedora 22 N/A linux-3.14.0 B, I
RHEL 7 Maipo linux-3.10.0 B, I
Ubuntu 14.04 Trusty Tahr linux-3.13.0 B, I, C
粗略的容量规划
确定群集的两个数字:
- OSD的数量。
- 集群的总容量
如果将群集的总容量除以群集中的OSD数,则可以找到群集中OSD的平均容量。
考虑将该数字乘以您期望在正常操作期间同时失败的OSD数量(相对较小的数量)。
最后将群集的容量乘以全部比率,以达到最大运行容量; 然后,从您希望未达到合理完整比率的OSD中减去数据量。
使用更多数量的OSD故障(例如,OSD机架)重复上述过程,以达到接近完全比率的合理数量。
更换OSD
当磁盘发生故障或者管理员想要使用新的后端重新配置OSD时,例如,从FileStore切换到BlueStore时,需要更换OSD。
与删除OSD不同,在OSD被销毁以进行更换后,需要更换OSD的id和CRUSH映射条目。
首先销毁OSD:
ceph osd destroy {id} --yes-i-really-mean-it
如果磁盘之前用于其他目的,则为新OSD擦除磁盘。新磁盘不需要:
ceph-disk zap /dev/sdX
使用先前销毁的OSD ID准备要更换的磁盘:
ceph-disk prepare --bluestore /dev/sdX --osd-id {id} --osd-uuid `uuidgen`
并激活OSD:
ceph-disk activate /dev/sdX1
启动OSD:
sudo systemctl start ceph-osd@{osd-num}
观察数据迁移:
ceph -w
删除OSD
将OSD从群集中取出:在删除OSD之前,通常是up和in。您需要将其从群集中取出,以便Ceph可以开始重新平衡并将其数据复制到其他OSD。
ceph osd out {osd-num}
观察数据迁移:
ceph -w
Note:
Sometimes, typically in a “small” cluster with few hosts (for instance with a small testing cluster),
the fact to take out the OSD can spawn a CRUSH corner case where some PGs remain stuck in the active+remapped state.
If you are in this case, you should mark the OSD in with:
ceph osd in {osd-num}
to come back to the initial state and then, instead of marking out the OSD, set its weight to 0 with:
ceph osd crush reweight osd.{osd-num} 0
After that, you can observe the data migration which should come to its end.
The difference between marking out the OSD and reweighting it to 0 is that in the first
case the weight of the bucket which contains the OSD is not changed whereas in the second case the
weight of the bucket is updated (and decreased of the OSD weight).
The reweight command could be sometimes favoured in the case of a “small” cluster.
停止OSD:
ssh {osd-host}
sudo systemctl stop ceph-osd@{osd-num}
删除OSD:
ceph osd purge {id} --yes-i-really-mean-it
移除cephfs数据池
命令格式:mds remove_data_pool <pool>
例如,直接删除池提示以下错误,原因是存储池正在被使用中。
Error EBUSY: pool 'testpool' is in use by CephFS
解决方法:
ceph mds remove_data_pool testpool
ceph osd pool delete testpool testpool --yes-i-really-really-mean-it