如何生成主机唯一ID?

时间:2016-05-16 07:00:36

标签: linux networking docker uniqueidentifier

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

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

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

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

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

由于主机可以是物理机,虚拟机甚至是泊坞窗实例,因此我不认为我可以将主机名用作全球唯一ID"。

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

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

感谢。

3 个答案:

答案 0 :(得分:3)

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

没有什么能阻止你在像uuid这样的磁盘上创建和持久化。您可以在Linux上使用uuidgen命令。

答案 1 :(得分:1)

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

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

在没有详细说明的情况下,至少可以说,在sha256中发现碰撞的可能性是不可能的。

您可以在此处看到不同文字的SHA256。 http://www.xorbin.com/tools/sha256-hash-calculator

目前,几乎所有编程语言都有一个用于创建SHA256哈希的函数/ API。

答案 2 :(得分:1)

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

在此处阅读更多内容:http://man7.org/linux/man-pages/man5/machine-id.5.html