FAT47の底辺インフラ議事録

学んだことのメモ帳です

Cassandra2.0のインストールと用語メモ

Cassandraとは
オープンソースの分散データベース。
元々Facebook社が開発し、現在はApache Software Foundationが開発中で、2013年12月現在の最新版は2.0.3です。

ノードがP2P通信でクラスタを組む非中央管理型のシステムであり、
スケーラビリティ、高可用性、耐障害性に優れていると
言われています。

以下勉強メモ
■Cassandraのインストール
■用語集

Cassandraのインストール
JDKインストール
OracleJDKをダウンロードしてくる
http://www.oracle.com/technetwork/java/javase/downloads/index.html

rpm -ivh /tmp/jdk-7u45-linux-x64.rpm

Cassandraダウンロード

wget http://ftp.tsukuba.wide.ad.jp/software/apache/cassandra/2.0.3/apache-cassandra-2.0.3-bin.tar.gz
tar zxvf apache-cassandra-2.0.3-bin.tar.gz 
mv apache-cassandra-2.0.3 /usr/local/
ln -s /usr/local/apache-cassandra-2.0.3 /usr/local/cassandra
mkdir -p /var/log/cassandra 
mkdir -p /var/lib/cassandra

起動

/usr/local/cassandra/bin/cassandra start

用語集
・memtable
メモリ上に常駐しているデータ構造。
コミットログに書き込まれた後にmemtableに書き込まれ、
オブジェクト数の閾値を超えるとSSTableにフラッシュされます。

・SSTable
Sorted String Tableの略で、ディスク上のデータ保存形式。
memtableの内容がSSTableにフラッシュされるとアプリケーションからは、
SSTableの内容は変更できなくなります。
すべての書き込みは追記で行われるため、書き込みパフォーマンスが良いです。
コンパクションによりSSTableのマージが可能。

・コミットログ
すべての書き込み操作を記録します。
コミットログ→memtable→SSTableの順。

・コンパクション
SSTableをマージすることでファイルサイズを小さくします。
Cassandraはすべての挿入、更新、削除が追記で記録されるためSSTableが肥大化しやすいので、
キーのマージや、カラム連結、トゥームストーンの削除などを行ってSSTableの物理データを小さくします。
コンパクションには2種類あって、
メジャーコンパクションとリードオンリーコンパクションがあります。
※違いがいまいちわかってないのであとで調べる。


・トゥームストーン
Cassandraはデータの削除が行われても、データの物理削除は行われません。
かわりにトゥームストーンと呼ばれる削除フラグを追加します。
メジャーコンパクション実行時に、このトゥームストーンがついたデータが破棄されます。

レプリケーションファクタ
パフォーマンスを犠牲にして一貫性をどれだけ得るかの項目。
後述の一貫性レベル参照。

・一貫性レベル
クラスタ内のいくつのレプリカが書き込み・読み込み成功すれば成功とみなすかを決定する。
ZERO

書き込み 非同期でバックグラウンドで書き込む。もっとも信頼性が低い。

ANY

書き込み 書き込み受付がヒント(ヒントハンドオフ)であっても、最低1つのノードで成功したとみなす


ONE

書き込み 書き込み操作がコミットログとmemtableを含む最低1つのノードに書き込まれたことを保証.1つのノードから返答があったら成功とみなす。
読み込み 最初に応答したノードが返答する

QUORAM

書き込み レプリケーションファクタで設定した数値によって操作するレプリカ数が変わる。(レプリケーションファクタ / 2) + 1の数のレプリカで成功が必要。レプリケーションファクタを6に設定していた場合、4つのレプリカが操作を受け付ける必要がある。サービス要件によって数値を指定する。
読み込み すべてのノードに検索をかけ、返答したノードのクオラムの中から最新タイムスタンプをもつ値を返す。クオラムは(ノード数/ 2) + 1

ALL

書き込み レプリケーションファクタで設定したすべてのノードで書き込みが成功しないといけない。最も高い一貫性レベルをもつがパフォーマンスは悪くなる
読み込み すべてのノードに検索をかけ、最新のタイムスタンプをもつ値を返す。ひとつのノードでも応答を返さなかったら読み込み失敗になる。


今日はここまで。
クラスタ設定とかコンパクションまわりもうちょっと調べる。