さくらVPSでCassandra 0.7.4にjmxでアクセスする



Attach APIを調べながら、Javaクラス実行時に、MBeanServerにserviceを登録するやり方を調べてみました。*1
そのついでに、Cassandraの健康チェックもできないものかと思い、さくらVPSに設定してあるCassandraにJMXで繋げてみました。
 

前提

  • Cassandraのバージョンは、0.7.4を利用している。
  • iptablesで外部からアクセスできるようにポートに穴を開けた。

 

iptablesの設定

本当は、sshトンネリングで試そうと思ったがどうやらjmxは、「-Dcom.sun.management.jmxremote.port=$JMX_PORT」で
指定したポート番号以外にも任意で、ポート番号を利用するみたいです。仕方ないので、以下の様に許可をだしました。

 $vi  /etc/sysconfig/iptables
      -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s *.*.*.* --dport 8080:65535 -j ACCEPT

 
ーs にアクセス元のIPアドレスを指定します。
ーーdportは、jmxremote.portで許可したポート番号(8080)から65535までを利用する許可だと思います。*2

「/etc/rc.d/init.d/iptables restart」コマンドで設定を反映後、設定がされているか確認をします。

 $/sbin/iptables -L
      ACCEPT     tcp  --  *.*.*.*  anywhere            state NEW tcp dpts:8080:65535

 
きちんと、設定内容が表示されていれば、問題はないと思います。
 

Cassandraの設定

cassandra-env.shにjmxの設定があるので、そこで、任意のポート番号を編集します。
86行目辺りに、以下の記述があるので、iptablesのルールで指定したポート番号とあわせておきます。*3

 $vi conf/cassandra-env.sh
  JMX_PORT="8080"

 
設定後、Cassandraを再起動します。
 

ローカルPCからアクセスしてみる

ローカルPCにインストールしているJDKから、JMXアクセスをしてみます。
なお、ローカルPCとサーバ環境のJDKは、JDK6であることが、前提です。*4

リモートプロセスのサービス名は、次のような感じです。

  service:jmx:rmi:///jndi/rmi://*.*.*.*:port/jmxrmi

 
「*.*.*.*」には、監視したいサーバのIPアドレス(Cassandraサービス)、port番号は、jmxremote.portで指定したポート番号(8080)を指定します。
 
jconsoleの概要は、以下のような感じで表示がされます。

 
jconsoleのMBean情報は、以下のような感じで表示がされます。

Cassandraが利用しているJVMの状態がわかるようになったので、いろいろ操作をしながら負荷状況を確認したいと思います。
 


*1:この言い回しであっているか分かりませんが¨

*2:詳しく調べてないがこんな意味だと思う¨

*3:ポート番号の8080はお勧めできないがサンプルなので勘弁してほしい¨

*4:私の環境は、java version "1.6.0_24"です