yamlファイルのseedsを指定するフィールドが、IPアドレスのみを指定するようになっていて、ポート番号を指定できない。簡単に修正できれば修正してみようかと、ソースを追ってみたけど割に中の方までIpAddressだけしか持っていないので難しいと判断。
VMの中なので、ネットワークインターフェイスを増やすのは簡単なので、それで何とかしようかと思ったのだが、 ググったらもっと簡単な方法があった。 3年前の記事。
ローカルホストのloインターフェイスにaliasで別のIPアドレスをふり、それを使うという方法。 本物のネットワーク・インターフェイスを増やすと色々面倒だけどこれなら、ずっと楽だしVMじゃなくてもできる。
以下ubuntuでの方法。
-
sudo ifconfig lo:1 127.0.0.2 up
とかやって、lo:1というインターフェイスを作る。必要な数だけつくる。 - conf ディレクトリをサーバの数だけ複製する。
- cassandra.yamlの data_file_directories, commit_log_directory, saved_caches_directory が重複しないように 別々のディレクトリを掘って指定する。
- cassandra.yamlの listen_address と rpc_address を127.0.0.2などに変更する。
-
cassandra.yamlのseeds にアドレスを並べる
- seeds: "127.0.0.1,127.0.0.2"
- log4j-server.properties の /var/log/cassandra となっている部分を適宜重複しないように変更する。
- cassandra-env.sh のJMX_PORTは別の値を指定する。このポートは常に0.0.0.0に対してバインドされるらしいので 複数のサーバ間が同じポートで共有することができないらしい。
-
起動時には新しく作ったconfディレクトリを環境変数で指定して起動すれば良い。
CASSANDRA_CONF=conf1 bin/cassandra