Распределенная система в Amazon EC2 - PullRequest
1 голос
/ 24 ноября 2010

Я планирую построить распределенную систему поверх Amazon EC2.

Как получить сетевой IP-адрес каждой машины (например, 192.xxx.xx)?

Таким образом, когда новый узел входит в систему, другие узлы предоставляют ему список IP-адресов для связи.

Спасибо!

Ответы [ 2 ]

1 голос
/ 28 ноября 2010

Используйте структуру, такую ​​как chef или puppet , чтобы организовать ваши узлы.Это позволит вам загружать экземпляры при их запуске.

Способ, который работает с Amazon EC2, заключается в том, что он позволяет передавать пользовательских данных каждому экземпляру -- обычно это какой-то скрипт для запуска команд, например, для начальной загрузки.

Если выполнение этого самостоятельно является слишком большим препятствием, я бы порекомендовал такой сервис:

HTH

0 голосов
/ 24 ноября 2010

Если «узел входит в систему», я предполагаю, что он подключается к некоторому порту.И это именно то, откуда вы получаете IP.например, в Java:

Socket socket = serverSocket.accept();
InetAddress addr = socket.getInetAddress()
System.out.println("new host with IP " + addr.getHostAddress() + " entered the system");

Кроме того, вы можете разрешить полное доменное имя вашей системы.

# bash
nslookup `hostname --fqdn`

# groovy
groovy -e 'println java.net.InetAddress.getLocalHost().getHostAddress()'

Хотя полное доменное имя зависит от конфигурации вашего хоста и может преобразоваться в 127.0.0.1, который нене очень полезно

В качестве третьего варианта, характерного для EC2, вы также можете использовать AWS SDK или EC2 CLI:

# using CLI
ec2-describe-instances | grep INSTANCE | cut -f4

Возвращает список общедоступных имен DNS, которые разрешаются в частные IP при разрешении.из EC2 (попробуйте передать вывод в xargs -n1 nslookup на экземпляре EC2 или вне EC2 соответственно).Конечно, вы можете отфильтровать список, чтобы показать только экземпляры, запущенные из специальных AMI, которые вас интересуют.

...