2012年10月31日水曜日

Cassandra の基本設定

設定は conf/cassandra.yaml で設定します。 debianは/etc/cassandra内、CentOS などはインストールされた先/etc/cassandra/conf 内、他は任意で設置 したconf ディレクトリに存在します。

基本的な設定項目

  • クラスター名
  • 全体のクラスター名を設定します。

    cluster_name: 'Test Cluster'
  • DB データ格納先
  • data_file_directories:
        - /var/lib/cassandra/data
  • コミットログ格納先
  • commitlog_directory: /var/lib/cassandra/commitlog
  • キャッシュデータ格納先
  • saved_caches_directory: /var/lib/cassandra/saved_caches

    ※上記3つのデータ格納先ディレクトリはそれぞれデフォルトの設定です。cassandra を実行するユーザーで書き込めるディレクトリを指定してください。パスの部分を変えれば変更が可能です。

  • seeds
  • seeds はノード初回起動時に keyspace などのメタ情報等を seeds に設定されたホストに問い合わせに行き、その後はノードの生き死にの確認をする際に利用されます。リング構築時最初に起動するノードには、そのノードの自アドレスを設定して起動してください。また、そのリングの中で最初に起動するノードでは無い場合、生きているノードのアドレスを指定してください。

    seed_provider:
      - class_name: org.apache.cassandra.locator.SimpleSeedProvider
          - seeds: "127.0.0.1"
    
  • listen_address
  • listen_address はリングを構築する上での、自ノードのアドレスです。基本的に自ノードのアドレスを設定します。また NIC が複数存在する場合などは、複数あるアドレスのうち、いずれかを指定してください。

    listen_address: localhost
  • rpc_address
  • rpc_address はデータをやり取りする際に使用されるアドレスです。基本的に、0.0.0.0(全ての NIC で使用する)を設定します

    rpc_address: localhost
  • ポート番号
  • rpcで使用するポートが rpc_port、ノード間で使用するのが strage_portです。そのノードで使用できるポート番号をそれぞれ設定してください。

    rpc_port: 9160
    storage_port: 7000
    

各ノードのリング内の位置設定

一つのリングにリングの位置として一周 0~2^127 までのレンジがありますいずれかのレンジをノードに指定する事で、そのレンジ位置から次のノードまでのレンジに対応するデータがそのノードに入る事になります。(データがどのレンジ位置になるかはデフォルトの場合 rowkey を hash にした値が使用されます)また、このレンジ位置をノードではトークンと言います。複数のノードでリングを構成する際はこのトークンの値を均等に分けて設定する事により各ノードに入るデータの割合を均等にする事が出来ます。 以下のような5つのノードでリング構成を構築しました。

設定例

192.168.1.10
192.168.1.11
192.168.1.12
192.168.1.13
192.168.1.14

この5つのノードの位置を均等にします。この時、トークンの値を自動的に生成してくれるツールを使うと便利です。今回はそのトークン値生成ツールを使用して設定を行います。

  1. wget でトークン値生成ツールを取得します。
  2. $wget https://raw.github.com/riptano/ComboAMI/2.2/tokentoolv2.py
  3. 取得したトークン値生成ツールを python で実行し、トークンの数値を取得します
  4. $python tokentoolv2.py 5
    {
        "0": {
            "0": 0,
            "1": 34028236692093846346337460743176821145,
            "2": 68056473384187692692674921486353642291,
            "3": 102084710076281539039012382229530463436,
            "4": 136112946768375385385349842972707284582
             }
    }
    
  5. nodetool の move コマンドを使用して、
  6. 取得した値をそれぞれのノードに設定します。(nodetool は cassandra の bin 配下、又はパッケージでインストールした場合は/usr/bin/nodetoolにあります)

    
    $ nodetool -h 192.168.1.10 move 0
    $ nodetool -h 192.168.1.11 move 34028236692093846346337460743176821145
    $ nodetool -h 192.168.1.12 move 68056473384187692692674921486353642291
    $ nodetool -h 192.168.1.13 move 102084710076281539039012382229530463436
    $ nodetool -h 192.168.1.14 move 136112946768375385385349842972707284582
    
    
  7. nodetool の ring コマンドを使用して、均等にデータが配置されたか確認します。
  8. $ nodetool -h 192.168.1.10 ring

    それぞれのノードに Token が設定されているか、データが均等に配置されているか確認してください。データが均等になっていなければ nodetool の move で Token を変更することで調節が可能です。

JVM のメモリ使用量設定

Cassandra はデフォルトでJVMが使用するヒープメモリを自動的に計算して設定していますが非常に小さな値となってしまう場合があります。JVMのメモリ使用量を確認しOSの搭載メモリの半分に満たない場合は手動にて設定変更を行います。

#vim cassandra-env.sh
MAX_HEAP_SIZE=”4G” ←コメントアウトをはずし指定(搭載メモリの半分以上)
HEAP_NEWSIZE=”800M” ←コメントアウトをはずし指定(CPU core * 100MB)

0 件のコメント:

コメントを投稿

JWT(Jason Webトークン)を理解するJWT(Jason Webトークン)を理解する

JWT ( Jason Web トークン)を理解する   JSON Web Token はオープンスタンダードです。これは、任意の 2 つの機関 ( ユーザー、サーバー)間で情報を転送するために使用されます。 JWT では、ユーザーデー...