【Cassandra】 Cassandra + OptCenterをEC2に入れてみた。


Cassandra + OptCenterをEC2に入れた際にハマったところをメモ。

構築はこちらのサイトを参考にしました。
http://inokara.hateblo.jp/entry/2014/01/08/020002

んでハマったところをあげていきます。

1.nodetoolが動作しない

# /usr/local/cassandra/bin/nodetool ring

java.util.nosuchelementexception cassandra

# /usr/local/cassandra/bin/nodetool status

error: No nodes present in the cluster. Has this node finished starting up?

これは誤った設定で起動した際のdataが残ってしまっていたせいだと思われる。
「/path/to/cassandra/data/」配下の「data」「commitlog」「saved_caches」を削除して再起動したら直った。
ちなみに誤った設定というのはサーバAにてcassandraを設定&起動後、AMIを作成してサーバB&Cを作成したためサーバAのdataが残ってしまっていたのだと思われる。
そのためサーバA起動後にサーバBを起動するとサーバAのcassandraが停止してしまう等のおかしな現象が発生していた。

2.thriftのポートに接続できない。

cassandra-cliにてcassandraにアクセスしようとしたらConnection refusedとなってしまった。

# /usr/local/cassandra/bin/cassandra-cli

org.apache.thrift.transport.TTransportException: java.net.ConnectException: Connection refused
        at org.apache.thrift.transport.TSocket.open(TSocket.java:187)
        at org.apache.thrift.transport.TFramedTransport.open(TFramedTransport.java:81)
        at org.apache.cassandra.thrift.TFramedTransportFactory.openTransport(TFramedTransportFactory.java:41)
        at org.apache.cassandra.cli.CliMain.connect(CliMain.java:66)
        at org.apache.cassandra.cli.CliMain.main(CliMain.java:239)
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:182)
	        ... 4 more
Exception connecting to 127.0.0.1/9160. Reason: Connection refused.

これは「cassandra/conf/cassandra.yaml」のrpc_ipaddressの設定の問題だった。
rpc_ipaddressはThriftを使って外部との接続を許可するIPアドレスとの事。
そこに「rpc_ipaddress: 10.0.1.164」と設定していたのだがエラーログを見たところ「Exception connecting to 127.0.0.1/9160. Reason: Connection refused.」となっていたので、デフォルトではローカルのIPは127.0.0.1となってしまうようだ。
hostを指定してアクセスしたところアクセスする事ができた。

# /usr/local/cassandra/bin/cassandra-cli -h 10.0.1.164

Connected to: "Sky Cluster" on 10.0.1.164/9160
Welcome to Cassandra CLI version 2.1.3

The CLI is deprecated and will be removed in Cassandra 3.0.  Consider migrating to cqlsh.
CQL is fully backwards compatible with Thrift data; see http://www.datastax.com/dev/blog/thrift-to-cql3

Type 'help;' or '?' for help.
Type 'quit;' or 'exit;' to quit.

[default@unknown]

また、このエラーが発生した祭に「127.0.0.1」からのIPを許可しようと思い「rpc_ipaddress: localhost」と設定したのだがこれはやめたほうがいいみたい。たぶん。「cassandra-cli」ではアクセスできるようになるのだが、optcenterでclusterを追加する際に「10.0.1.164」と設定しても「unable to connect to cluster」となってしまいoptcenterに追加する事ができなかった。
また、再起動するまでの間、OptCenterから各ノードにアクセスできるのだが「WriteRequests」などの値が「No Data」となる事があったので、rpc_ipaddressの設定を変更してcassandraを再起動した際はoptcenterのmanagerとagentを再起動した方がいいかもしれない。

3.optcenterとagentが通信できない

OptCenterの管理画面から各ノードにagentをインストールしたのだが、「agents failed to connect ops center」というエラーがでてしまい値がとってこれない。agentのインストールは成功するのだがしばらくすると再度インストールを求められてしまう。
これについては原因がよく分からなかったが、agentではなくmanager側を再起動したところ通信できるようになった。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です