2017-11-22 25 views
0

私はこの小さな大学プロジェクトを持っています。私はBokehフロントエンドとCassandraバックエンドを持つ単純なPythonアプリケーションを開発しました。私はプロトタイプを作成し、単一のCassandraノードで開発し、最大3つのノード(ネイティブは1つ、仮想化は2つ)まで拡張しました。DataStax Python Cassandra Driverがローカルホスト上のCassandraを間違って発見しています

  • 192.168.56.1スレーブのマスター
  • 192.168.56.101/102のために:そのための開発は、私はIPアドレスでvboxnet0という名前のホストオンリーネットワークを使用してに移行し、ローカルホスト上にありました。

カサンドラバージョン3.11.1
ボケサーバのバージョンである、私はそれに応じてコードを変更しているので、私のアプリのコードで始まる0.12.10(トルネード4.4.3上で実行されている)


です:

[email protected]:~> cqlsh 
Connection error: ('Unable to connect to any servers', {'127.0.0.1': error(111, "Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused")}) 
from cassandra.cluster import Cluster 
from cassandra.auth import PlainTextAuthProvider 
from cassandra.query import dict_factory` 

def pandas_factory(colnames, rows): 
    return pd.DataFrame(rows, columns=colnames) 
auth_provider = PlainTextAuthProvider(username='', password='') 
cluster = Cluster(contact_points=['192.168.56.1'], port=9042, auth_provider=auth_provider) 
session = cluster.connect() 
session.row_factory = pandas_factory 
session.default_fetch_size = None 

カサンドラは、ローカルホスト上で実行されているないです10

そして、まだPythonのドライバは何とかそれは127.0.0.1にカサンドラのホストを発見したと考えて、それに接続しようとする:

[email protected]:~/Folder/subfolder> bokeh serve Appname > ~/bokeh.output 
2017-11-22 19:24:49,230 Starting Bokeh server version 0.12.10 (running on Tornado 4.4.3) 
2017-11-22 19:24:49,233 Bokeh app running at: http://localhost:5006/Appname 
2017-11-22 19:24:49,233 Starting Bokeh server with process id: 5819 
2017-11-22 19:25:03,281 Using datacenter 'datacenter1' for DCAwareRoundRobinPolicy (via host '192.168.56.1'); if incorrect, please specify a local_dc to the constructor, or limit contact points to local cluster nodes 
2017-11-22 19:25:03,281 New Cassandra host <Host: 127.0.0.1 datacenter1> discovered 
2017-11-22 19:25:03,282 Found multiple hosts with the same rpc_address (127.0.0.1). Excluding peer 192.168.56.101 
2017-11-22 19:25:03,368 Failed to create connection pool for new host 127.0.0.1: 
Traceback (most recent call last): 
    File "cassandra/cluster.py", line 2343, in cassandra.cluster.Session.add_or_renew_pool.run_add_or_renew_pool (cassandra/cluster.c:44919) 
    File "cassandra/pool.py", line 332, in cassandra.pool.HostConnection.__init__ (cassandra/pool.c:6757) 
    File "cassandra/cluster.py", line 1119, in cassandra.cluster.Cluster.connection_factory (cassandra/cluster.c:16094) 
    File "cassandra/connection.py", line 330, in cassandra.connection.Connection.factory (cassandra/connection.c:5963) 
    File "/usr/lib64/python3.6/site-packages/cassandra/io/asyncorereactor.py", line 307, in __init__ 
    self._connect_socket() 
    File "cassandra/connection.py", line 369, in cassandra.connection.Connection._connect_socket (cassandra/connection.c:7477) 
ConnectionRefusedError: [Errno 111] Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused 
2017-11-22 19:25:03,403 Host 127.0.0.1 has been marked down 
2017-11-22 19:25:04,406 Error attempting to reconnect to 127.0.0.1, scheduling retry in 2.0 seconds: [Errno 111] Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused 
2017-11-22 19:25:06,414 Error attempting to reconnect to 127.0.0.1, scheduling retry in 4.0 seconds: [Errno 111] Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused 
2017-11-22 19:28:14,994 Error attempting to reconnect to 127.0.0.1, scheduling retry in 8.0 seconds: [Errno 111] Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused 
2017-11-22 19:28:16,489 Host 127.0.0.1 may be up; will prepare queries and open connection pool 
2017-11-22 19:28:16,808 Failed to create connection pool for new host 127.0.0.1: 



そしてそれが延々と続きます。正面では正常に見える、アプリが動作し、192.168.56.1が正しく照会されますが、これはちょうど何かが正しくないことを迷惑にし、バグか自分の責任かわかりません。

答えて

1

まず、カッサンドラはマスター/スレーブ関係を使用しません。すべてのノードは、いずれのノードもコーディネーターとして機能できるという点で同等です。コーディネーターは要求に基づいて選択され、クライアントは使用する最良コーディネーターを選択します。コーディネーターは、あなたが読み書きしているデータを担当する他のノードと調整し、クライアントに返答します。クライアントで指定しているコンタクトポイントは、コンタクトポイントと言います。これは、Cassandraaクラスタへの最初の接続を確立するためにのみ使用されます。これが完了すると、クライアントはあなたのカサンドラクラスター内の各ノードの接続を維持します(ノードはあなたの要求の潜在的な調整担当者です)。

質問にお答えします。あなたのcassandra.yamlファイルが間違っています。

2017-11-22 19:25:03,282 Found multiple hosts with the same rpc_address (127.0.0.1). Excluding peer 192.168.56.101 

マシンのアドレスにrpc_addressを設定する必要があります。クラスタ内の各ノードでこれを必ず実行してください。 http://cassandra.apache.org/doc/latest/getting_started/configuring.html#main-runtime-properties

また、すべてのノードで同じIP/ipsにシードを設定していることを確認してください。シードは、起動時にノードが接続するクラスタ内の1つまたは複数のノードの単なるIPです。 DCあたり2つのシードを持つことをお勧めします。すべてのノードで同じシードにする必要があります。