2016-05-16 496 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? –