2015-01-17 8 views
5

मुझे एक उपकरण के लिए अक्का रिमोट सुविधा का अनुभव हो रहा है। असल में, मैं अलग-अलग बंदरगाहों के साथ एक ही मेजबान में कोर और रिमोट सिस्टम काम करने में सक्षम था। ध्यान दें कि मेरे रिमोट सर्वर राउटर पर चलते हैं, जैसा कि अक्का दस्तावेज़ों में बताया गया है।अक्का रिमोट मार्ग होस्टनाम कॉन्फ़िगरेशन समस्या

अब मैं बेहतर प्रयोग करने के लिए कई एज़ूर वर्चुअल मशीनों का उपयोग करने की कोशिश कर रहा हूं लेकिन मुझे कुछ समस्याएं आ रही हैं।

कोर आवेदन विन्यास निम्नलिखित (मैं सुरक्षा कारणों के लिए कुछ नाम बदल दिया है) है:

akka.actor.deployment { 
    /querierActor/querierPool { 
    router = round-robin-pool 
    nr-of-instances = 12 
    target.nodes = [ 
     "akka.tcp://[email protected]:2560" 
     ,"akka.tcp://[email protected]:2560" 
     ,"akka.tcp://[email protected]:2560" 

    ] 
    } 
} 

// remote configuration. Use it for multiple machines calculation 
akka { 
    actor { 
    provider = "akka.remote.RemoteActorRefProvider" 
    } 
    remote { 
    enabled-transports = ["akka.remote.netty.tcp"] 
    netty.tcp { 
     maximum-frame-size = 100MiB 
     port = 2552 
     hostname = "0.0.0.0" 
    } 
    } 
} 

जबकि दूरस्थ मेजबान निम्नलिखित विन्यास है:

akka.actor.deployment { 
    /querierActor/querierPool { 
    router = balancing-pool 
    nr-of-instances = 15 
    } 
} 

akka { 
    actor { 
    provider = "akka.remote.RemoteActorRefProvider" 
    } 
    remote { 
    enabled-transports = ["akka.remote.netty.tcp"] 
    netty.tcp { 
     maximum-frame-size = 100MiB 
     hostname = "0.0.0.0" 
     port = 2560 
    } 
    } 
} 

इस विन्यास का उपयोग करना, सर्वर और रिमोट होस्ट स्पष्ट रूप से कम्यूनिक करने में सक्षम हैं लेकिन रिमोट होस्ट कुछ त्रुटियों को लॉग करना शुरू कर देता है:

[ERROR] [01/17/2015 12:55:05.734] [SYSTEM-akka.remote.default-remote-dispatcher-16] [akka.tcp://[email protected]:2560/system/endpointManager/reliableEndpointWriter-akka.tcp%3A%2F%2FSYSTEM%400.0.0.0%3A2552-0/endpointWriter] dropping message [class akka.actor.ActorSelectionMessage] for non-local recipient [Actor[akka.tcp://[email protected]:2560/]] arriving at [akka.tcp://[email protected]:2560] inbound addresses are [akka.tcp://[email protected]:2560] 

और बाद में, सर्वर और दूरस्थ होस्ट त्रुटि लॉग और प्रारंभ करने के लिए शुरू होता है।

सर्वर त्रुटि:

[WARN] [01/17/2015 12:21:05.658] [CRAWLER-LD-akka.remote.default-remote-dispatcher-7] [akka.tcp://[email protected]:2552/system/remote-watcher] Detected unreachable: [akka.tcp://[email protected]:2560] 
[WARN] [01/17/2015 12:21:05.664] [SYSTEM-akka.remote.default-remote-dispatcher-17] [Remoting] Association to [akka.tcp://[email protected]:2560] with unknown UID is reported as quarantined, but address cannot be quarantined without knowing the UID, gating instead for 5000 ms. 

(...) 

[INFO] [01/17/2015 12:21:05.712] [SYSTEM-akka.actor.default-dispatcher-6] [akka://SYSTEM/user/querierActor/querierPool] Message [akka.dispatch.sysmsg.DeathWatchNotification] from Actor[akka://SYSTEM/user/querierActor/querierPool#-1217916605] to Actor[akka://SYSTEM/user/querierActor/querierPool#-1217916605] was not delivered. [1] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'. 

(...) 

रिमोट त्रुटि (समान लाइनों में कई बार):

(...) 
[ERROR] [01/17/2015 14:21:16.371] [SYSTEM-akka.remote.default-remote-dispatcher-16] [akka.tcp://[email protected]:2560/system/endpointManager/reliableEndpointWriter-akka.tcp%3A%2F%2FSYSTEM%400.0.0.0%3A2552-2/endpointWriter] dropping message [class akka.actor.ActorSelectionMessage] for non-local recipient [Actor[akka.tcp://[email protected]:2560/]] arriving at [akka.tcp://[email protected]:2560] inbound addresses are [akka.tcp://[email protected]:2560] 
[ERROR] [01/17/2015 14:21:17.388] [SYSTEM-akka.remote.default-remote-dispatcher-16] [akka.tcp://[email protected]:2560/system/endpointManager/reliableEndpointWriter-akka.tcp%3A%2F%2FSYSTEM%400.0.0.0%3A2552-2/endpointWriter] dropping message [class akka.actor.ActorSelectionMessage] for non-local recipient [Actor[akka.tcp://[email protected]emote-srv01.cloudapp.net:2560/]] arriving at [akka.tcp://[email protected]:2560] inbound addresses are [akka.tcp://[email protected]:2560] 
[WARN] [01/17/2015 14:21:17.465] [SYSTEM-akka.remote.default-remote-dispatcher-16] [akka.tcp://[email protected]:2560/system/endpointManager/reliableEndpointWriter-akka.tcp%3A%2F%2FSYSTEM%400.0.0.0%3A2552-2] Association with remote system [akka.tcp://[email protected]:2552] has failed, address is now gated for [5000] ms. Reason is: [Disassociated]. 
[INFO] [01/17/2015 14:21:17.467] [SYSTEM-akka.actor.default-dispatcher-21] [akka://SYSTEM/system/transports/akkaprotocolmanager.tcp0/akkaProtocol-tcp%3A%2F%2FSYSTEM%40186.228.120.115%3A56044-3] Message [akka.remote.transport.AssociationHandle$Disassociated] from Actor[akka://SYSTEM/deadLetters] to Actor[akka://SYSTEM/system/transports/akkaprotocolmanager.tcp0/akkaProtocol-tcp%3A%2F%2FSYSTEM%40186.228.120.115%3A56044-3#-2070785548] was not delivered. [6] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'. 
[INFO] [01/17/2015 14:21:17.468] [SYSTEM-akka.actor.default-dispatcher-21] [akka://SYSTEM/system/transports/akkaprotocolmanager.tcp0/akkaProtocol-tcp%3A%2F%2FSYSTEM%40186.228.120.115%3A56044-3] Message [akka.remote.transport.ActorTransportAdapter$DisassociateUnderlying] from Actor[akka://SYSTEM/deadLetters] to Actor[akka://SYSTEM/system/transports/akkaprotocolmanager.tcp0/akkaProtocol-tcp%3A%2F%2FSYSTEM%40186.228.120.115%3A56044-3#-2070785548] was not delivered. [7] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'. 

(...) 

मैं पता लगा है कि समस्या होस्टनाम विन्यास में हो सकता है और हो सकता है सर्वर से होस्ट नाम डालने की कोशिश की और दूरस्थ मेजबान। लेकिन, इस मामले में, सिस्टम भी लोड नहीं होता है:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'FacadeMemory' defined in file [D:\data\development\git\semantic-web-crawler\crawlerld.core\target\classes\net\dovale\websemantics\linkedDataRecommender\facade\memory\FacadeMemory.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [facade.memory.FacadeMemory]: Constructor threw exception; nested exception is org.jboss.netty.channel.ChannelException: Failed to bind to: /remote-srv01.cloudapp.net:2560 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1077) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1022) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:706) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:762) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:109) 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:691) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:320) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:952) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:941) 
    at facade.memory.GUIMain.main(GUIMain.java:23) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134) 
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [facade.memory.FacadeMemory]: Constructor threw exception; nested exception is org.jboss.netty.channel.ChannelException: Failed to bind to: /remote-srv01.cloudapp.net:2560 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:164) 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1070) 
    ... 21 more 
Caused by: org.jboss.netty.channel.ChannelException: Failed to bind to: /remote-srv01.cloudapp.net:2560 
    at org.jboss.netty.bootstrap.ServerBootstrap.bind(ServerBootstrap.java:272) 
    at akka.remote.transport.netty.NettyTransport$$anonfun$listen$1.apply(NettyTransport.scala:393) 
    at akka.remote.transport.netty.NettyTransport$$anonfun$listen$1.apply(NettyTransport.scala:389) 
    at scala.util.Success$$anonfun$map$1.apply(Try.scala:236) 
    at scala.util.Try$.apply(Try.scala:191) 
    at scala.util.Success.map(Try.scala:236) 
    at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235) 
    at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235) 
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) 
    at akka.dispatch.BatchingExecutor$Batch$$anonfun$run$1.processBatch$1(BatchingExecutor.scala:67) 
    at akka.dispatch.BatchingExecutor$Batch$$anonfun$run$1.apply$mcV$sp(BatchingExecutor.scala:82) 
    at akka.dispatch.BatchingExecutor$Batch$$anonfun$run$1.apply(BatchingExecutor.scala:59) 
    at akka.dispatch.BatchingExecutor$Batch$$anonfun$run$1.apply(BatchingExecutor.scala:59) 
    at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:72) 
    at akka.dispatch.BatchingExecutor$Batch.run(BatchingExecutor.scala:58) 
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:41) 
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:401) 
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) 
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) 
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) 
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) 
Caused by: java.net.BindException: Cannot assign requested address: bind 
    at sun.nio.ch.Net.bind0(Native Method) 
    at sun.nio.ch.Net.bind(Net.java:436) 
    at sun.nio.ch.Net.bind(Net.java:428) 
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:214) 
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) 
    at org.jboss.netty.channel.socket.nio.NioServerBoss$RegisterTask.run(NioServerBoss.java:193) 
    at org.jboss.netty.channel.socket.nio.AbstractNioSelector.processTaskQueue(AbstractNioSelector.java:372) 
    at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:296) 
    at org.jboss.netty.channel.socket.nio.NioServerBoss.run(NioServerBoss.java:42) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

मुझे नहीं पता कि मैं क्या गलत कर रहा हूं। मैंने इस मुद्दे के बारे में जानकारी खोजने की कोशिश की लेकिन मुझे जो भी मिला वह मेरी समस्या से संबंधित है। मैंने एज़ुर कॉन्फ़िगरेशन पर बंदरगाह भी खोले हैं।

मैं अपने सर्वर होस्ट को अपने रिमोट होस्ट के साथ बहुमूल्य रूप से कैसे काम कर सकता हूं?

उत्तर

5

मैं समस्या का समाधान करने में सक्षम था।

कुछ निष्फल शोध के बाद, मुझे कुछ अलग-अलग चीजों को आजमाने की ज़रूरत थी। मैं कुछ धारणाएं कर रहा हूं जो गलत हो सकती हैं क्योंकि मुझे कोई अन्य जानकारी नहीं मिली है। यदि आप इस उत्तर को पढ़ रहे हैं और कोई त्रुटि पा रहे हैं, तो कृपया मुझे बताएं।

समस्या यह थी कि फ्रेमवर्क (sun.nio.ch.Net.bind0 स्पष्ट रूप से, लेकिन मुझे इसके बारे में कई दस्तावेज़ नहीं मिला) ips की निम्नलिखित सीमा को अनुमति देता है: 0.0.0.0 (यदि आप कनेक्शन स्वीकार करते हैं मशीन में कोई नेटवर्क इंटरफ़ेस), 127.0.0.0 (यदि आप केवल स्थानीय अनुरोध के साथ काम करते हैं - I अतिथि) और किसी भी कंप्यूटर के नेटवर्क इंटरफ़ेस का आईपी पता। इस अंतिम मामले में, अनुरोध केवल इस विशिष्ट इंटरफ़ेस को ही अनुमति दी जाएगी।

समस्या यह है कि "होस्टनाम" संपत्ति का उपयोग अक्का के दूरस्थ नोड्स को संबोधित करने के लिए भी किया जाता है। मेरा मतलब है, जब होस्ट नोड रिमोट नोड के लिए कॉल करता है, तो यह पहचानने के लिए इस जानकारी का उपयोग करता है कि परिणाम समाप्त होने के बाद भेजा जाना चाहिए। साथ ही, यदि आप संपत्ति होस्टनाम को मान 0.0.0.0 के साथ डालते हैं और इस नोड को अपने डीएनएस नाम से एक्सेस करने का प्रयास करते हैं (जो कि किसी भी नेटवर्क इंटरफ़ेस से संबद्ध नहीं हो सकता है) तो यह असफल हो जाएगा। आपको नेटवर्क इंटरफेस में से एक के रूप में एक ही आईपी के साथ मशीन की पहचान करनी है।

तो, मेरे सेटअप हल्के से बदल दिया:

मेजबान नोड के लिए, मैं यह बदलाव किया है:

(...) 
akka.actor.deployment { 
    /sparqlQuerierMasterActor/sparqlQuerierPool { 
    router = round-robin-pool 
    nr-of-instances = 12 
    target.nodes = [ 
     "akka.tcp://[email protected]:2560" 
     ,"akka.tcp://[email protected]:2560" 
     ,"akka.tcp://[email protected]:2560" 

    ] 
    } 
} 
(...) 

XXX, YYY और ZZZ पहुंच योग्य आईपी के रिमोट नोड्स जो भी एक नेटवर्क पर पंजीकृत हैं के हैं इंटरफेस।

दूरस्थ नोड के विन्यास के लिए बदल दिया:

(...) 
    remote { 
    enabled-transports = ["akka.remote.netty.tcp"] 
    netty.tcp { 
     maximum-frame-size = 100MiB 
     hostname = "YYY.YYY.YYY.YYY" 
     port = 2560 
    } 
    } 
(...) 

मैं इसे परीक्षण नहीं किया था मैं पिछले 0.0.0.0 विन्यास बनाए रख सकते हैं। शायद यह संभव है।

इस समाधान ने मुझे मेजबान और रिमोट नोड्स को निर्दोष रूप से कम करने के लिए अनुमति दी =)

संबंधित मुद्दे