我正在探索带有 gluster 分布式存储的 KVM_qemu。我的目标是构建一个具有完整 HA 的测试集群。即虚拟机和 gluster 存储的 HA。我计划设置一个 3 节点 gluster 集群并使用带有 libgfapi 的 qemu gluster 驱动程序,而不是旧的 FUSE 方法。但后来我注意到在 vm xml 文件或 qemu image create 命令中我们只能指定一个 gluster 服务器 IP !!所以如果该服务器出现故障,存储将不可用?那么在使用 qemu libgfapi 方法时应该采用什么方法来提供 HA?使用 keeplived 为 gluster 服务器分配虚拟浮动 IP?
请提供建议..谢谢
答案1
<driver name='qemu' type='qcow2' cache='none'/>
<source protocol='gluster' name='kvm/test.img'>
<host name='192.168.60.11' port='24007'/>
<host name='192.168.60.12' port='24007'/>
<host name='192.168.60.13' port='24007'/>
</source>
<target dev='vda' bus='virtio'/>
</disk>
您可以在 kvm 节点安装 gluster,并使 gluster 对等探测 kvm 主机。在此 kvm 主机成为集群成员后,xml 配置
<driver name='qemu' type='qcow2' cache='none'/>
<source protocol='gluster' name='kvm/test.img'>
<host name='127.0.0.1' port='24007'/>
</source>
<target dev='vda' bus='virtio'/>
</disk>
答案2
这并不像乍一看的那样令人担忧。
首先,在客户端挂载期间指定 Gluster 主机 IP(无论是使用 FUSE 还是 libgfapi)时,您仅将其用于对等探测。探测完成后,libfgapi 会处理所有被探测对等端之间的通信,这些对等端在探测时提供的 IP 上进行通信。
这一切都很好,直到您通过显式 IP 探测的主机发生故障。您可以采取一些措施来防止这种情况发生。Keepalived 或 ctdb 可以提供浮动 IP,您只能将其用于客户端到服务器的探测。或者,DNS 循环将使用名称来实现这一点。
该名称或浮动 IP 不会用于实际将数据发送到 Gluster 卷,而仅用于确保即使在性能下降的环境中也能始终进行探测。
使用 libvirt 后,最终结果如下:
<driver name='qemu' type='qcow2' cache='none'/>
<source protocol='gluster' name='kvm/test.img'>
<host name='gluster-probe' port='24007'/>
</source>
<target dev='vda' bus='virtio'/>
</disk>
在这种情况下,我在 libvirt 之外实现了 DNS 循环,这样我就可以确保这个名称始终解析为 gluster 对等池中的主机,前提是至少有一个主机处于启动状态。在它联系到其中一个主机后,它会获取完整列表,通过 IP 连接到该列表中的主机,然后顺利地继续前进。