如何生成主机唯一ID



我有几个应用程序可以协同工作,需要进行通信。

这些应用程序可以安装在不同的主机上,这些主机可以位于不同的本地网络中,但所有应用程序都通过全局网络连接在一起。

主机可以是Linux(CenOS、Debian、Ubuntu)或Windows(7/10)。

现在,我需要确定哪个主机正在运行应用程序。

要求是:-在同一主机上运行的每个应用程序都具有相同的"主机ID"-每个"主机ID"在所有主机中都是唯一的

由于主机可以是物理机、虚拟机甚至docker实例,我认为我不能将主机名用作"全局唯一ID"。

由于主机可以在不同的本地网络中,我不认为我可以使用本地IP地址作为"全局唯一ID"。

那么,我可以使用哪些数据?也许是网络适配器的MAC地址?是吗即使在同一docker的多个实例之间,也保证是唯一的?

谢谢。

在现代/最新的Linux发行版上,当系统第一次创建时,Linux会在/etc/machine-id文件中为您生成一个唯一的id。一些分布式服务(如etcd)依赖于此文件来识别集群中的机器。

没有什么可以阻止您在磁盘上创建并持久化类似uuid的东西。您可以在Linux上使用uuidgen命令。

您可以说MAC地址是唯一的。但是,如果您担心安全性,请不要使用MAC地址。MAC地址很容易被伪造。

要为机器生成一个唯一的ID,您可以使用许多项的组合,如MAC地址、IP地址、主机名等,放入一个随机的salt并获取它们的sha256哈希。由于主机可以在许多操作系统上运行,我建议不要使用任何特定于操作系统的参数。

如果不说太多细节,至少可以说在sha256中发现碰撞的可能性是不可能的。

你可以在这里看到不同文本的SHA256。http://www.xorbin.com/tools/sha256-hash-calculator

如今,几乎每一种编程语言都有一个用于创建SHA256哈希的函数/API。

看起来/var/lib/dbus/machine-id包含了您需要的内容。

点击此处阅读更多信息:http://man7.org/linux/man-pages/man5/machine-id.5.html

在linux上,我只需更改/var/lib/dbus/machine-id file 的内容就解决了问题

最新更新