ただ、nodetoolやcassandra-cliでは、ノードの構成や配置が複雑だったりデータの分布を直感的に確認することは大変です。
そんな場合、DataStax社が提供しているOpsCenterという管理画面ツールを使うと便利なようです。DataStaxはApache Cassandraのプロジェクトリーダーが起こした会社でcassandraのコミッタの多くが在籍しているそうです。
DataStax OpsCenterに関しては、以下のサイトで紹介されています。
Cassandraクラスタと、DataStax OpsCenterの構築
また、DataStaxの公式サイトに詳細なガイドがあります。
DataStax OpsCenter Documentation
これらのサイトを参考に、OpsCenterをEC2にインストールしてみました。いくつかEC2ならではの部分やはまった点に触れながら手順を紹介しようと思います。
OpsCenterのインストール
前回の記事でAPIアクセスをしたpublicサブネットのappサーバーにインストールします。
# cd /usr/local/src/ # rpm -Uvh http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm # cat /etc/yum.repos.d/datastax.repo [datastax] name= DataStax Repository baseurl=http://rpm.datastax.com/community enabled=1 gpgcheck=0 # yum install opscenter-free -y
接続先の設定をします。
opscenterd.confで設定します。
ここで、seed_hostsには、前回設定したseedインスタンスのIPを指定します。
また、ここではuse_sslをfalseにしてHTTPアクセスにしておきます。
# vi /etc/opscenter/opscenterd.conf --- [jmx] port = 7199 [webserver] port = 8888 interface = 0.0.0.0 [cassandra] seed_hosts = 10.0.1.10 [agents] ssh_port = 22 use_ssl = false https_port = 61621 incoming_port = 61620 ---
セキュリティグループの設定
OpsCenterでは、以下のサイトに説明があるように接続に複数のポートを使用するようです。
OpsCenter and OpsCenter agent ports
ここでは以下のようにポートを設定します。
app(OpsCenter)インスタンス
- 22 10.0.0.0/16 →ssh(natから入る想定)
- 80 0.0.0.0/0 →通常のWEB接続
- 8888 0.0.0.0/0 →OpsCenterコンソールのUI画面
- 61620 10.0.0.0/16 →cassandraの各ノードからOpsCenterへ情報を送るポート
cassandraインスタンス
- 22 10.0.0.0/16 →ssh(natから入る想定)、agentのインストールに必要
- 7000 10.0.0.0/16 →cassandraノード同士の通信
- 7199 10.0.0.0/16 →JMXポート
- 9160 10.0.0.0/16 →Thrift API
- 61621 10.0.0.0/16 →OpsCenterから各ノードへの情報取得用ポート
赤字が前回から新たに付与する設定です。
ここまでできたらOpsCenterを起動します。
# /etc/init.d/opscenterd start
ブラウザで確認
それでは、ブラウザでOpsCenterでUIを確認してみます。
app(OpsCenter)インスタンスにEIPをつけて、
http://インスタンスのEIP:8888/
を確認してみます。
おお!表示されました。
seedインスタンスのIPしか設定しませんでしたが、ノードが3つあることは理解されているようです。
しかし現時点では、情報が空のようです。
これは、cassandra側にOpsCenterのエージェントツールがないためです。
エージェントのインストール
次にエージェントをインストールします。
適切な設定がしてあると、OpsCenter側からcassandraにインストールすることが出来るようです。
タイトル部分の「Fix」というリンクをクリックします。
すると、以下のようなダイアログが開き、3つのノードのIPが表示されます。
ここで、「Edit Credentials」というリンクをクリックします。
すると、別のダイアログが更に開き、これらのインスタンスに入るためのユーザーとパスワードなどを聞かれます。
ここでは、rootユーザーか、もしくはsudoersに登録されているユーザーとパスワードを指定します。
sshがパスワードログインを許可していない場合は、「Private Key」に鍵ファイルのテキストをペーストします。
また、ここで登録された情報は永続化されることはない旨の説明が表示されています。
入力を終えたら「Done」ボタンをクリックします。
元のダイアログに戻るので、「Install on all nodes」ボタンをクリックします。
すると、SSHのフィンガープリントを確認されるので、「Accept Fingerprint」ボタンをクリックします。
エラー
しばらくすると、エラーダイアログが表示されてしまいました。
そこで、cassandra側を見てみます。
# ls -l /etc/init.d/ | grep opsなにもインストールされていないようです。
インストールログがあるようなので、確認します。
# tail -1000f /var/log/opscenter-agent/installer.log 2013-02-13 23:12:09 +0900 Started: Wed Feb 13 23:10:26 2013 - 04:15 ago 2013-02-13 23:12:09 +0900 State : Sleeping, pid: 25343 2013-02-13 23:10:27 +0900 Could not retrieve mirrorlist http://www.atomicorp.com/mirrorlist/atomic/centos-6-x86_64 error was 2013-02-13 23:10:27 +0900 12: Timeout on http://www.atomicorp.com/mirrorlist/atomic/centos-6-x86_64: (28, 'connect() timed out!') 2013-02-13 23:10:27 +0900 Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os error was 2013-02-13 23:10:27 +0900 12: Timeout on http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os: (28, 'connect() timed out!') 2013-02-13 23:10:27 +0900 Could not get metalink https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=x86_64 error was 2013-02-13 23:10:27 +0900 12: Timeout on https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=x86_64: (28, 'connect() timed out!')これは、VPCでEIPをつけずにyumインストールをするときによく見るログです。
OpsCenterはSSHでcassandraノードに入ってyumでエージェントをインストールしようとしているようです。
なので、エージェントをインストールするときだけ、各ノードにEIPを付与してあげます。
では同じ手順でリトライしてみます。
OpsCenterの画面で再度「Install on all nodes」をクリックします。
。。。。やはりエラーになります。
くわしい原因が書かれていないので、OpsCenterのログを見てみます。
# tail -1000f /var/log/opscenter/opscenterd.log 2013-02-13 23:30:41+0900 [Test_Cluster] INFO: Beginning install of OpsCenter agent to 10.0.1.176 2013-02-13 23:30:42+0900 [Test_Cluster] INFO: Installing rpm package on 10.0.1.176 2013-02-13 23:31:12+0900 [Test_Cluster] WARN: HTTP request http://10.0.1.227:61621/cluster/datacenter?node_ip=10.0.1.176 failed: Connection was refused by other side: 111: Connection refused. 2013-02-13 23:31:12+0900 [Test_Cluster] WARN: Unable to collect datacenter, rack information: Failed query to http://10.0.1.227:61621/cluster/datacenter?node_ip=10.0.1.176 : Connection was refused by other side: 111: Connection refused. 2013-02-13 23:31:12+0900 [Test_Cluster] WARN: HTTP request http://10.0.1.227:61621/cluster/datacenter?node_ip=10.0.1.10 failed: Connection was refused by other side: 111: Connection refused. 2013-02-13 23:31:12+0900 [Test_Cluster] WARN: Unable to collect datacenter, rack information: Failed query to http://10.0.1.227:61621/cluster/datacenter?node_ip=10.0.1.10 : Connection was refused by other side: 111: Connection refused. 2013-02-13 23:31:12+0900 [Test_Cluster] WARN: HTTP request http://10.0.1.10:61621/cluster/datacenter?node_ip=10.0.1.227 failed: Connection was refused by other side: 111: Connection refused.
どうやら61621ポートでHTTPリクエストが拒否されているようです。
再度cassandra側を見てみます。
# ls -l /etc/init.d/ | grep ops -rwxr-xr-x 1 opscenter-agent opscenter-agent 3197 7月 3 05:39 2012 opscenter-agent
今度はインストール自体はできているようです。
このファイルの中を見てみます。
# cat /etc/init.d/opscenter-agent ... OPSC_ADDR_DIR="/var/lib/opscenter-agent/conf" ...
/var/lib/opscenter-agent/confがcassandra側のエージェント設定ディレクトリのようです。
confディレクトリにはaddress.yamlしかないので、中身を見てみます。
# cat /var/lib/opscenter-agent/conf/address.yaml stomp_interface: "10.0.0.39"
ググってみたところ、OpsCenter側でSSLをOFFにしてある場合エージェント側でもHTTPSをHTTPに切り替える必要があるようで、use_sslを0に設定するといいようです。
そこで3つのcassandraノードに以下のように設定しました。
# cat /var/lib/opscenter-agent/conf/address.yaml stomp_interface: "10.0.0.39" use_ssl: 0
そして、再びOpsCenterの画面をみると、以下の状態になっているので同じ手順で再度「Install on all nodes」をクリックします。
すると、うまくいったようで、OpsCenterの画面が更新されて、情報が表示されるようになりました!
左ペインのメニューを適当にクリックしてみると、、、
「CLUSTER:RING VIEW」:ハッシュの分散状態を確認できます。
「CLUSTER:PHYSICAL VIEW」:ap-north-eastにまとまっていることがわかります。(Ec2Snitchの場合)
「CLUSTER:LIST VIEW」:リスト状にノードが表示されます。
「PERFORMANCE」:各ノードや全体平均のパフォーマンス統計情報が表示されます。
「Data Explorer」:登録されているデータも見ることができます。
「EVENT LOG」:クラスタに起こったイベントのログを確認できます。
「EDIT CLUSTER...」:クラスタの簡単な編集もできるようです。
「CLUSTER」の各ビューでは各ノードのアクション(CLEAR、DISCOMMISION、REPAIRなど)もできるようです。一部は有償のEnterprise版にしかできない機能もあるようです。
まとめ
cassandraクラスタの状態がかなり直感的にわかりとても便利そうです。
そして、ここまでできて無料というのはすごいです。
これから勉強しながらちょっとずつ利用してみたいと思います。