load-balancing - ceph RBD有负载均衡的能力吗?
问题描述
我对ceph了解不多。据我所知,RBD是ceph的分布式块存储设备,同样的数据应该存储在组成ceph集群的几台计算机上。那么,这个分布式块设备(ceph RBD)有负载均衡的能力吗?换句话说,如果多个客户端(在我的情况下是 QEMU)使用这个 RBD 块存储并且它们同时读取相同的数据,ceph RBD 会平衡流量并同时从不同的计算机发送到客户端集群还是只有一台计算机将其数据发送到多个客户端?如果我有一个由6台计算机组成的ceph集群和一个由3台计算机组成的ceph集群,这些RBD的性能有什么区别吗?
解决方案
这不是负载平衡,而是 ceph 的分布式特性允许并行服务许多客户端。如果我们关注大小为 3 的复制池,则有 3 个不同的磁盘(在不同的主机上)存储完全相同的对象。但总有一个主 OSD 将写入请求转发到其他副本。这使得写请求慢一点,但读请求只由主 OSD 处理,所以它比写快得多。由于客户端直接与 OSD 进行“对话”(它们从 MON 获取地址),因此可以同时为许多客户端提供服务。特别是因为 OSD 不会将 RBD 存储为单个对象,而是拆分为按“放置组”分组的许多对象。但是,如果您真的谈论被多个客户端读取的完全相同的对象,您必须知道有watchers
在锁定它们的 RBD 上,因此只有一个客户端可以更改数据。如果您可以更详细地描述您的场景,我们可以提供更多信息。
如果我有一个由 6 台计算机组成的 ceph 集群和一个由 3 台计算机组成的 ceph 集群。这些RBD的性能有什么不同吗?
这取决于实际配置(合理数量的 PG、crush 规则、网络等),但总的来说答案是肯定的,您拥有的 ceph 节点越多,您可以并行服务的客户端就越多。与其他存储系统相比,Ceph 可能没有最好的性能(当然,取决于实际设置),但它的扩展性非常好,以至于随着客户端数量的增加,性能保持不变。
推荐阅读
- algorithm - 通过验证生成唯一的非相似代码
- jquery - 选中行时应选择数据表,应禁用其他相同的 group_id 产品
- c# - \bin\x86\Debug\AppX\Assets\ 的访问问题
- spring-boot - windows系统的springboot服务无法连接到云服务器中用docker-compose启动的kafka
- python - 如何绘制 Python 3 维水平集?
- xml - 如何使用 PowerShell 将 REST API 答案转换为正确的 XML?
- python - 即使使用 justMyCode = false,断点也不会在 VSC 中命中
- python-2.7 - Python 可执行文件挂起 plt.show()
- kubernetes - configmap配置java_opts参数后,k8s总是报错参数;
- postgresql - PostgreSQL 12.3:错误:查询结果内存不足