share facebook facebook2 twitter menu hatena pocket slack

2013.02.18 MON

Cassandraってなんじゃ?(EC2でDataStaxOpsCenterを動かす)

三浦 悟

WRITTEN BY三浦 悟

Cassandraってなんじゃ?(EC2でクラスタリング:シングルリージョン編)の記事で、
Cassandraでクラスタリングをした場合、クラスタの情報を見るためのnodetoolの紹介をしました。
ただ、nodetoolやcassandra-cliでは、ノードの構成や配置が複雑であり、データの分布を直感的に
確認することは大変です。

そんな場合、DataStax社が提供しているOpsCenterという管理画面ツールを使うと便利なようです。
DataStaxはApache Cassandraのプロジェクトリーダーが起こした会社でcassandraのコミッタの多くが
在籍しているそうです。

DataStax OpsCenterに関しては、Cassandraクラスタと、DataStax OpsCenterの構築のサイトで
紹介されています。
また、DataStaxの公式サイト(DataStax OpsCenter Documentation)に詳細なガイドがあります。

これらのサイトを参考に、OpsCenterをEC2にインストールしてみました。
いくつかEC2ならではの部分や戸惑った点に触れながら手順を紹介しようと思います。

○OpsCenterのインストール

Cassandraってなんじゃ?(EC2でクラスタリング:シングルリージョン編)」にて、
APIアクセスをしたpublicサブネットのappサーバーに、OpsCenterをインストールします。


# 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 Modeling」:KeySpaceやColumnFamilyなど、データモデルを追加編集できたりします。

「Data Explorer」:登録されているデータも見ることができます。

「EVENT LOG」:クラスタに起こったイベントのログを確認できます。

「EDIT CLUSTER…」:クラスタの簡単な編集もできるようです。

「CLUSTER」の各ビューでは各ノードのアクション(CLEAR、DISCOMMISION、REPAIRなど)もできるようです。
一部は有償のEnterprise版にしかできない機能もあるようです。

○まとめ

OpsCenterは、cassandraクラスタの状態が直感的に分かり、とても便利そうだと感じました。
また、ここまでの機能が利用できて無料というのはすごいことだと思います。

これからも勉強しながら少しずつ利用してみたいと思います。

こちらの記事はなかの人(memorycraft)監修のもと掲載しています。
元記事は、こちら

三浦 悟

三浦 悟

高円寺在住のなんじゃ系男子 またの名をmemorycraftといいます。 炭水化物大好き 日々の「なんじゃ?」を記事にしてます。