さくらVPSで稼動しているCassandra0.6.5をCassandra0.7.0-beta1に変更してみる。
前回、「Cassandra, Thriftを利用したAPIを確認する」でいろいろ試してみました。
折角なので、Cassandra0.7.0から利用できるセカンダリインデックスをCassandraのバージョンを変更し、試して
みたいと思う。併せて、環境設定の変更点なども記していけたらと思います。
(Cassandra0.7.0-beta1でセカンダリインデックスが利用できるかわかりません。)
Cassandra0.6.5のサービスを止める
既存のCassandra0.6.5のサービスを止めます。(独自のシェル)
/usr/local/bin/casactl stop
Cassandra0.6.5で作成されたログやデータファイルを削除します。
rm /var/log/cassandra/system.log rm /var/lib/cassandra/commitlog/* rm -rf /var/lib/cassandra/data/*
apache-cassandra-0.7.0-beta1-bin.tar.gzを取得する
wgetでソースを取得します。
wget ftp://ftp.riken.jp/net/apache//cassandra/0.7.0/apache-cassandra-0.7.0-beta1-bin.tar.gz
(0.7.0 RC4があるらしいが、落としてしまったのでこのまま利用する。)
シンボリックリンクをはりかえます。
ln -s apache-cassandra-0.7.0-beta1 cassandra
(今までは、ln -s apache-cassandra-0.6.5 cassandraとしていました。)
Cassandra0.7.0用に設定ファイルを書き換える
cassandra-0.6.5でconf/storage-conf.xmlだったものが、cassandra0.7.0では、conf/cassandra.yaml
に変更になっています。
vi /usr/local/cassandra/conf/cassandra.yaml data_file_directories: - /home/y_tag/tmp/cassandra/data seeds: - 固有のIP rpc_address: 0.0.0.0
cassandra-0.6.5でbin/cassandra.in.shにあったJVMのオプションが、cassandra0.7.0では、conf/cassandra-env.sh
内に変更になっています。
vi /usr/local/cassandra/conf/cassandra-env.sh MAX_HEAP_SIZE="1G" JVM_OPTS="$JVM_OPTS -ea" JVM_OPTS="$JVM_OPTS -Xms$MAX_HEAP_SIZE" JVM_OPTS="$JVM_OPTS -Xmx$MAX_HEAP_SIZE" JVM_OPTS="$JVM_OPTS -Xss128k" JVM_OPTS="$JVM_OPTS -XX:+UseParNewGC" JVM_OPTS="$JVM_OPTS -XX:+UseConcMarkSweepGC" JVM_OPTS="$JVM_OPTS -XX:+CMSParallelRemarkEnabled" JVM_OPTS="$JVM_OPTS -XX:SurvivorRatio=8" JVM_OPTS="$JVM_OPTS -XX:MaxTenuringThreshold=1" JVM_OPTS="$JVM_OPTS -XX:+HeapDumpOnOutOfMemoryError" JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.port=port" JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=false" JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
Cassandraを再度起動してみる。
/usr/local/bin/casactl start
INFO 17:41:52,668 DiskAccessMode 'auto' determined to be mmap, indexAccessMode is mmap INFO 17:41:52,851 Couldn't detect any schema definitions in local storage. INFO 17:41:52,852 Found table data in data directories. Consider using JMX to call org.apache.cassandra.service.StorageService.loadSchemaFromYaml(). INFO 17:41:52,877 Cassandra version: 0.7.0-beta1 INFO 17:41:52,878 Thrift API version: 10.0.0 INFO 17:41:52,889 Saved Token not found. Using 60241603823023011117341191363720282092 INFO 17:41:52,890 Saved ClusterName not found. Using Test Cluster INFO 17:41:52,897 Creating new commitlog segment /var/lib/cassandra/commitlog/CommitLog-1294735312897.log INFO 17:41:52,912 switching in a fresh Memtable for LocationInfo at CommitLogContext(file='/var/lib/cassandra/commitlog/CommitLog-1294735312897.log', position=276) INFO 17:41:52,917 Enqueuing flush of Memtable-LocationInfo@973617947(169 bytes, 4 operations) INFO 17:41:52,918 Writing Memtable-LocationInfo@973617947(169 bytes, 4 operations) INFO 17:41:52,987 Completed flushing /var/lib/cassandra/data/system/LocationInfo-e-1-Data.db INFO 17:41:53,004 Starting up server gossip INFO 17:41:53,072 Binding thrift service to /0.0.0.0:Thrift port INFO 17:41:53,076 Using TFramedTransport with a max frame size of 15728640 bytes.
nodeがあるか確認してみる
nodetool --host 固有のIP -p 固有のport ring Address Status State Load Token 固有のIP Up Normal 385 bytes 60241603823023011117341191363720282092
cliからつないでみる
$cassandra-cli Welcome to cassandra CLI. Type 'help' or '?' for help. Type 'quit' or 'exit' to quit. [default@unknown]connect localhost/Thrift port [default@unknown] show keyspaces system
Cassandra0.6.5時代に作成したクライアントプログラムから接続してみる
conf/cassandra.yaml内の84行目に下記の記述があります。
thrift_framed_transport_size_in_mb: 15
その為、org.apache.thrift.transport.TFramedTransportというクラスをインスタンス化
し、接続しています。「thrift_framed_transport_size_in_mb: 0」とすると
「TTransport port = new TSocket("localhost", 9160);」で接続できますが
cassandra-cliで接続ができなくなるみたいです。
//TTransport port = new TSocket("localhost", 9160); TTransport port = new TFramedTransport(new TSocket("localhost", 9160)); TProtocol protocol = new TBinaryProtocol(port); Cassandra.Client client = new Cassandra.Client(protocol); port.open(); // クラスタ名の表示 System.out.printf("Cluster name : [%s]\n", client.describe_cluster_name()); // バージョンの表示 System.out.printf("Version : [%s]\n", client.describe_version()); // 接続中クラスタの全キースペースを取得 for (String keyspace : client.describe_keyspaces()) { // キースペース名の表示 System.out.printf("Keyspace : [%s]\n", keyspace); // キースペース内の全 Column Family の取得 for (Map.Entry<String, Map<String, String>> entry : client.describe_keyspace(keyspace).entrySet()) { System.out.printf("\tColumn Family : [%s]\n", entry.getKey()); for (Map.Entry<String, String> innerEntry : entry.getValue().entrySet()) { System.out.printf("\t\t[%s]:[%s]\n", innerEntry.getKey(), innerEntry.getValue()); } System.out.println(" -- "); } } port.close();
とりあえず、Cassandra0.7.0を利用する土台ができました。
動的キースペースやセカンダリインデックスに関しては、別途、確認をしてみようと思います。