Запуск Wildfly в службе приложений Azure, как настроить JGroups для репликации сеансов

Запуск Wildfly в качестве службы приложений Azure стал возможен с помощью пользовательского Java-приложения [ https://azure.microsoft.com/en-us/documentation/articles/web-sites-java-custom-upload/]. Однако узлы службы приложений не знают внутренний IP-адрес при регистрации в JGroups. Они всегда выставляют 127.0.0.1. Для того чтобы члены кластера JGroups могли взаимодействовать, нам нужен хорошо известный IP-адрес узла.

Как Wildfly может определить внутренний IP-адрес хоста, который он может использовать для регистрации в кластере JGroups?

3 ответа

По моему опыту, я думаю, вы можете попробовать использовать Azure SDK для Java, чтобы получить внутренний IP-адрес хоста из WebSiteManagementClient,

Ниже приведен пример кода для получения внутреннего IP-адреса.

String userName = "<user-name>";
String password = "<password>";
String resourceGroupName = "<resource-group-name>";
String name = "<webapp-name>";

ServiceClientCredentials credentials = new BasicAuthenticationCredentials(userName, password);
WebSiteManagementClient webSiteManagementClient = new WebSiteManagementClientImpl(credentials);
HostingEnvironmentsOperations hostingEnvironmentsOperations = webSiteManagementClient.getHostingEnvironmentsOperations();
ServiceResponse<AddressResponse> serviceResponse = hostingEnvironmentsOperations.getHostingEnvironmentVips(resourceGroupName, name);

AddressResponse addressResponse = (AddressResponse) serviceResponse.getBody();
String internalIp = addressResponse.getInternalIpAddress();

Чтобы запустить приведенный выше пример, вам нужно добавить зависимые библиотеки в ваш проект Maven, см. Зависимости ниже.

<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-svc-mgmt-websites</artifactId>
    <version>0.9.2</version>
</dependency>

Подробнее о ключевых классах в приведенном выше примере кода см. Ниже.

  1. WebSiteManagementClient & WebSiteManagementClientImpl
  2. HostingEnvironmentsOperations
  3. AddressResponse

Вы можете использовать код Питера (выше) для определения доступных IP-адресов, а затем установить bind_addr в JGroups, например, так:

InetAddress bind_addr; // detect address by using Azure's SDK
JChannel ch=new JChannel("config.xml");
TP transport=ch.getProtocolStack().getTransport();
transport.setBindAddress(bind_addr);
ch.connect("mycluster");

Важно то, что вам нужно установить адрес привязки перед подключением канала.

Вы можете использовать специальное ключевое слово для bind_addrподробнее см. [1]. Например bind_addr=match-address:192.168.1.* попытаться выбрать IP-адрес в данной подсети.

[1] http://www.jgroups.org/manual/index.html

Другие вопросы по тегам