在Solaris下使用分区时,HostID不会按区域变化,但是您还可以(通过函数调用,getZoneID())为您的区域提供唯一的区域。

使用Linux下的KVM,hostid逐个区域更改(增量) - 这非常好,但是它并不完美 - 您可能会与Elses HostID相撞。

它在那里提供了KVM提供的API,使我能够获得ZoneID?

有帮助吗?

解决方案

关于您对重复hostids的担忧:

与Solaris不同,Linux内核不提供“ Gethostid”呼叫。相反,“ gethostid”(由 /usr/bin/hostid 程序) 由Glibc实施, ,试图:

  1. 确定是否固定文件(/etc/hostid 在我的系统上)存在;如果是这样,则使用其中的4字节值;
  2. 失败,尝试根据系统的IP地址创建hostID;
  3. 失败,使用一个hostid 0.

这意味着,如果每个系统都有唯一的IP地址,则它们也将具有唯一的hostID。

如果您的系统没有唯一的IP地址,您仍然可以使用 sethostid GLIBC库呼叫(将其写入glibc的步骤(1)的文件写入文件 gethostid 上面的算法)。

关于获取KVM实例的区域ID:

与Solaris区域(所有实例共享相同的内核)不同,KVM的每个实例都运行其自己的Linux内核副本,所有这些副本均不足以忽略其他实例。据我所知,没有直接等效的Solaris Zoneid,因为每个Linux实例都无法与其他Linux实例进行协作。

如果您需要为每个运行的KVM实例一个唯一的标识符,则某些选项是:

  • 如上所述,仅解决IP地址 / HOSTID;

  • 设置 /启动您的实例时,生成一个 UUID 用于系统使用 uuidgen 并将其保存在文件系统上的安全位置。这样生成的UUID永远不会以很高的概率匹配任何其他UUID。

  • 启动系统的每个实例时,请在内核命令行上传递该实例的手动构造的唯一标识符(使用 -append KVM命令行参数)。这可以稍后从 /proc/cmdline.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top