Титан - Кассандра - Elasticsearch :: В соединении отказано

Я использую Titan 0.5.0 с Cassandra 2.0.8.

Когда я впервые запустил свой Java-клиент с локальной Titan-Cassandra, я смог подключиться к нему. Теперь, когда я удаленно развернул Titan-Cassandra на Debian Wheezy с выделенным пользователем, у меня появилось «Исключение отказа в подключении» (см. Стек ниже). Я могу подключиться к Титану через Rexter на удаленном сервере через http://my-domain.com:8182 и я могу видеть свои вершины и ребра.

Какие изменения нужно внести в локальную конфигурацию (клиент Java и Titan на одном компьютере), чтобы запустить Titan с Cassandra и Elasticsearch на удаленном компьютере, к которому обращается мой клиент Java?

Java-код клиента

private final URL titanConfiguration =TitanRepository.class.getResource("/conf/titan-cassandra.properties");
public TitanGraph load() {
    return TitanFactory.open(titanConfiguration.getPath());
}

Рабочая конфигурация с локальной версией Titan-Cassandra:

Конфигурация Java titan-cassandra.properties

storage.backend=cassandrathrift
storage.hostname=127.0.0.1
cache.db-cache = true
cache.db-cache-clean-wait = 20
cache.db-cache-time = 180000
cache.db-cache-size = 0.5

index.search.backend=elasticsearch
index.search.hostname=127.0.0.1
index.search.client-only=true

schema.default=none

Никаких изменений в каталоге Titan conf

НЕ работает конфигурация Java с Titan-Cassandra на удаленном сервере

Конфигурация Java titan-cassandra.properties

storage.backend=cassandrathrift
storage.hostname=192.168.1.20   <<< OR http://my-domain.com
cache.db-cache = true
cache.db-cache-clean-wait = 20
cache.db-cache-time = 180000
cache.db-cache-size = 0.5

index.search.backend=elasticsearch
index.search.hostname=192.168.1.20    <<< OR http://my-domain.com
index.search.client-only=true

schema.default=none

изменения в директории Titan conf

  • rexster-cassandra-es.xml:

<base-uri>http://my-domain.com</base-uri>
<index.search.hostname>192.168.1.20</index.search.hostname>

Трассировки стека

java.lang.IllegalArgumentException: Could not instantiate implementation: com.thinkaurelius.titan.diskstorage.cassandra.thrift.CassandraThriftStoreManager

    at com.thinkaurelius.titan.util.system.ConfigurationUtil.instantiate(ConfigurationUtil.java:55)
    at com.thinkaurelius.titan.diskstorage.Backend.getImplementationClass(Backend.java:425)
    at com.thinkaurelius.titan.diskstorage.Backend.getStorageManager(Backend.java:366)
    at com.thinkaurelius.titan.graphdb.configuration.GraphDatabaseConfiguration.<init>(GraphDatabaseConfiguration.java:1208)
    at com.thinkaurelius.titan.core.TitanFactory.open(TitanFactory.java:92)
    at com.thinkaurelius.titan.core.TitanFactory.open(TitanFactory.java:60)
    at be.jiliant.spotmydate.server.TitanRepository.load(TitanRepository.java:30)
    at be.jiliant.spotmydate.server.persist.processor.PersistProcessor.process(PersistProcessor.java:38)
    at org.apache.camel.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:63)
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)
    at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:163)
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:398)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:105)
    at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:87)
    at org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:103)
    at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:685)
    at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:623)
    at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:591)
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:308)
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:246)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1142)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1134)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1031)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.reflect.InvocationTargetException: null
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at com.thinkaurelius.titan.util.system.ConfigurationUtil.instantiate(ConfigurationUtil.java:44)
    ... 29 common frames omitted
Caused by: com.thinkaurelius.titan.diskstorage.TemporaryBackendException: Temporary failure in storage backend
    at com.thinkaurelius.titan.diskstorage.cassandra.thrift.CassandraThriftStoreManager.getCassandraPartitioner(CassandraThriftStoreManager.java:218)
    at com.thinkaurelius.titan.diskstorage.cassandra.thrift.CassandraThriftStoreManager.<init>(CassandraThriftStoreManager.java:196)
    ... 34 common frames omitted
Caused by: org.apache.thrift.transport.TTransportException: java.net.ConnectException: Connection refused
    at org.apache.thrift.transport.TSocket.open(TSocket.java:185)
    at org.apache.thrift.transport.TFramedTransport.open(TFramedTransport.java:81)
    at com.thinkaurelius.titan.diskstorage.cassandra.thrift.thriftpool.CTConnectionFactory.makeRawConnection(CTConnectionFactory.java:87)
    at com.thinkaurelius.titan.diskstorage.cassandra.thrift.thriftpool.CTConnectionFactory.makeObject(CTConnectionFactory.java:52)
    at com.thinkaurelius.titan.diskstorage.cassandra.thrift.thriftpool.CTConnectionFactory.makeObject(CTConnectionFactory.java:21)
    at org.apache.commons.pool.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:1220)
    at com.thinkaurelius.titan.diskstorage.cassandra.thrift.CassandraThriftStoreManager.getCassandraPartitioner(CassandraThriftStoreManager.java:215)
    ... 35 common frames omitted
Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:579)
    at org.apache.thrift.transport.TSocket.open(TSocket.java:180)
    ... 41 common frames omitted

person Antoine Wils    schedule 23.11.2014    source источник
comment
на самом деле я не очень хорошо понимаю, как Titan, Rexter, Cassandra и Elasticsearch запускаются и работают вместе. Есть ли хороший учебник, которому я мог бы следовать, чтобы понять эти концепции? Или я должен запустить и настроить все эти компоненты отдельно?   -  person Antoine Wils    schedule 25.11.2014


Ответы (1)


Если Rexster работает на том же (удаленном) компьютере и может подключиться, но вы не можете подключиться со своего локального компьютера, то, скорее всего, это проблема конфигурации Cassandra. В cassandra.yaml установите rpc_address на 0.0.0.0 (в настоящее время вы, вероятно, установили его на 127.0.0.1), перезапустите Cassandra и попробуйте снова подключиться.

person Daniel Kuppitz    schedule 08.12.2014
comment
это не помогло. Я пробовал в комбинации с локальным хостом или IP-адресом ящика в listen_address - person Antoine Wils; 11.12.2014
comment
Можете ли вы поделиться своим cassandra.yaml в Gist? Бьюсь об заклад, любая из настроек, связанных с IP, неверна (также могут быть listen_address, broadcast_address или seeds; последнее маловероятно, если Cassandra запускается без ошибок). - person Daniel Kuppitz; 11.12.2014
comment
и мой cassandra.yaml, и rexter-cassandra-es.xml доступны по адресу gist. В rexter-cassandra-es.xml меняю 2 параметра base-uri и storage.hostname - person Antoine Wils; 12.12.2014
comment
listen_address это localhost, я не думаю, что это сработает. Попробуйте использовать общедоступный или частный IP-адрес вашего хоста (192.168.1.20?) для listen_address, а также для seeds. - person Daniel Kuppitz; 13.12.2014
comment
Я уже пробовал публичный IP-адрес моего хоста в listen_address. Семена менять не пробовал, но может дело в нем. Я видел отказ вокруг кольца на стороне клиента. Я постараюсь изменить это как можно скорее и держать вас в курсе. Спасибо - person Antoine Wils; 13.12.2014
comment
спасибо, я думаю, что это сработало, но я не могу доказать, потому что теперь у меня проблема с эластичным поиском (короче говоря, не удалось создать экземпляр реализации: com.thinkaurelius.titan.diskstorage.es.ElasticSearchIndex ... Вызвано: org.elasticsearch.client .transport.NoNodeAvailableException: узел недоступен). Я не знаю, использую ли я правильный подход. Я думал, что использовать Titan с конфигурацией rexter-cassandra-es будет легко. Не проще ли будет запустить их все по отдельности? Я в режиме проб и ошибок, и я не могу найти всю информацию о том, как справиться с этим - person Antoine Wils; 16.12.2014
comment
На самом деле я всегда запускаю их все по отдельности. Все, что работает лучше всего для вас. - person Daniel Kuppitz; 16.12.2014