2016-05-16 162 views
2

我有几个应用程序一起工作,需要沟通。如何生成主机唯一ID?

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

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

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

的要求是: - 在同一台主机上运行的所有应用程序具有相同的“主机ID” - 每一个“主机ID”是所有主机

中独一无二的,因为主机可以是物理机,虚拟机甚至码头实例,我不认为我可以使用主机名作为“全球唯一ID”。

由于主机可以位于不同的本地网络,因此我认为我不能将本地IP地址用作“全局唯一ID”。

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

谢谢。

+0

码头集装箱ID是uuids。听起来就像你需要一种方法来将uuid分配为VM主机名和硬件节点主机名? –

+0

每个有网络接口的主机必须是唯一的mac地址。包括docker实例。如果对于任何rason,两个docker主机,您可以使用'docker run --lxc-conf =“lxc.network修改mac地址。hwaddr = 92:20:de:b0:6b:61“my_image ifconfig” – abkrim

回答

1

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

要为机器生成一个唯一的ID,可以使用许多项目的组合,例如MAC地址,IP地址,主机名等,随机引入一个盐并对其进行sha256散列。由于主机可以在许多操作系统上运行,因此我建议不要使用任何特定于操作系统的参数。

没有太多细节,在sha256中发现碰撞的可能性是不大可能的。

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

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

+0

我不关心安全性问题(不在项目的这一部分......)我只需要一个主机唯一ID,使用多个SHA256数据(MAC + IP + HostName)是一个好主意,我不能真正使用随机nuber,因为在同一主机上运行的所有应用程序都需要具有相同的“主机ID” – Aurelien

2

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

没有什么能够阻止你在磁盘上创建和保存类似uuid的东西。你可以在Linux上使用uuidgen命令。

+0

这是不正确的,我没有找到任何这样的文件在任何发行版(多个)我已经使用到目前为止 – heemayl

+0

在Fedora 24上它位于/ etc/machine-id。在ubuntu 14.04上它位于/ var/lib/dbus/machine-id。使用heemayl? –