Запуск 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?


person Anurag Sharma    schedule 06.06.2016    source источник


Ответы (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
person Peter Pan    schedule 07.06.2016
comment
Спасибо @Питер. Хотя это может быть обходным путем, но для определения IP-адреса требуется изменить JGroups. Мы можем изменить код JGroups, но как насчет открытия брандмауэра, чтобы разрешить вход на порт 7600 JGroups? Возможно ли это в службе приложений Azure? Также похоже, что для Azure V2 SDK изменен — github.com/Azure/azure-sdk -для-java. - person Anurag Sharma; 08.06.2016

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

[1] http://www.jgroups.org/manual/index.html#Transport< /а>

person Bela Ban    schedule 07.06.2016
comment
Спасибо @Бета. Откуда мы знаем блок CIDR подсети Azure App Services? Служба приложений может работать на 172.x.x.x или в каком-то другом блоке. - person Anurag Sharma; 08.06.2016
comment
Вам нужно знать диапазон назначенных вам адресов. К сожалению, я не знаком с Azure, но большинство облаков присваивают вам только один адрес, поэтому может помочь не установка bind_addr или установка non_loopback. - person Bela Ban; 08.06.2016
comment
Да, я бы хотел, чтобы это было в случае со Службой приложений Azure. Это развертывание без сервера, при котором пользователь не может выбирать среду выполнения, поэтому Azure использует общую среду. Он говорит мне, что у моего сайта есть 4 исходящих адреса, и Azure может выбрать любой из них для любого моего узла. - person Anurag Sharma; 08.06.2016

Вы можете использовать код Питера (выше) для обнаружения доступных 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");

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

person Bela Ban    schedule 09.06.2016