2016-06-06 51 views
0

將Wildfly作爲Azure App Service運行,可以通過自定義Java應用程序[https://azure.microsoft.com/en-us/documentation/articles/web-sites-java-custom-upload/]。但是,在向JGroup註冊時,應用服務節點不知道內部IP地址。他們總是暴露127.0.0.1。爲了讓JGroups羣集成員進行通信,我們需要一個衆所周知的節點IP地址。在Azure應用服務中運行Wildfly,如何爲會話複製配置JGroups

Wildfly如何確定可用於向JGroups羣集註冊的主機的內部IP地址?

回答

1

根據我的經驗,我認爲您可以嘗試使用Azure SDK for Java從WebSiteManagementClient獲取主機的內部IP地址。

以下是獲取內部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
+0

謝謝@Peter。雖然這可能是一個解決方法,但它需要修改JGroups來檢測IP地址。我們可以修改JGroups代碼,但是如何打開防火牆以允許在JGroups端口7600上進行入站?這可能在Azure應用服務中嗎?對於Azure V2來說,SDK也發生了變化 - https://github.com/Azure/azure-sdk-for-java。 –

0

你可以使用一個特殊的關鍵字爲bind_addr,見[1]瞭解詳情。例如。 bind_addr=match-address:192.168.1.*嘗試選擇給定子網上的IP地址。

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

+0

謝謝@Beta。我們如何知道Azure App Services子網CIDR塊?它可能正在172.x.x.x或某個其他塊上運行應用程序服務。 –

+0

您需要知道分配給您的地址範圍。不幸的是,我對Azure並不熟悉,但大多數雲只會爲您分配一個地址,因此不要設置bind_addr,或將其設置爲non_loopback也可能有所幫助。 –

+0

是的,我希望Azure應用服務就是如此。這是一個無服務器部署,用戶無法選擇運行時環境,因此Azure使用共享環境。它告訴我,我的站點有4個傳出地址,Azure可以爲我的任何節點選擇它們中的任何一個。 –

0

你可以使用彼得代碼(如上),以檢測可用的IP地址,然後在JGroups的,例如設置bind_addr像這樣:

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"); 

重要的是,您需要在連接通道之前設置綁定地址。

相關問題