GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

riptano

ccm – localhost上のApache Cassandraクラスタを簡単に作成して破壊するためのスクリプト

投稿日:

localhost上のApache Cassandraクラスタを簡単に作成して破壊するためのスクリプト

CCM(Cassandra Cluster Manager)

localhost上でApache Cassandraクラスタを作成、起動、削除するためのスクリプト/ライブラリ。

ccmとccmlibの目的は、ローカルの箱に小さなカサンドラクラスターを簡単に作成、管理、破壊することです。 これは、カサンドラクラスターをテストするためのものです。

要件

  • Pythonのインストール(Python 2.7で動作するようにテスト済み)

  • pyYAML( http://pyyaml.org/sudo easy_install pyYaml

  • 6つ( https://pypi.org/project/six/sudo easy_install six

  • ant( http://ant.apache.org/、Mac OS X、 brew install ant

  • psutil( https://pypi.org/project/psutil/

  • Java(バージョンは使用するCassandraのバージョンによって異なりますが、わからない場合はJava 7を使用してください)、現在のバージョンのCassandraで動作することが知られています。

  • 複数のノードクラスタを作成する場合は、複数のループバックエイリアスを使用するのが最も簡単な方法です。 現代のLinuxディストリビューションでは、何もする必要はありませんが、Mac OS Xでは、次のようにエイリアスを作成する必要があります。

    sudo ifconfig lo0 alias 127.0.0.2 up
    sudo ifconfig lo0 alias 127.0.0.3 up
    ...
    

    使用セクションでは、少なくとも127.0.0.1、127.0.0.2、および127.0.0.3が利用可能であることを前提としています。

オプション要件

  • Paramiko( http://www.paramiko.org/ ):ParamikoはリモートでCCMを実行する機能を追加しました。 pip install paramiko

:リモートマシンは、SSHサーバーと正常なCCMで構成されている必要があります。 複数のノードで作業する場合は、公開される各IPアドレスは順番に並んでいる必要があります。 たとえば、IPv4アドレスの4番目のオクテットの最後の数字は1 (192.168.33.11など)で始まる必要があります。 リモートCCMマシンの設定については、 Vagrantfileを参照してください。

既知の問題点

Windowsのみ:

  • node startはウィンドウをポップアップし、フォーカスを奪う。
  • ccmから起動されたcqlshは、コマンドプロンプトで間違ったプロンプトを表示します。
  • 非nodetoolベースのコマンドラインオプションが失敗する(sstablesplit、scrubなど)
  • psutilをインストールするには、pypiから.msiを使用する必要があります。 pip install psutilは動作しません
  • ソースからC *をビルドするには、PATHにant.batが必要です
  • Cassandra 2.1.0以降を使用している場合は、無制限のPowershell実行ポリシーで実行する必要があります
  • チョコレートでインストールされたAntはccmでは見つかりませんので、問題を解決するためにシンボリックリンクを作成する必要があります(管理者として):
    • cmd / c mklink C:\ ProgramData \ chocolatey \ bin \ ant.bat C:\ ProgramData \ chocolatey \ bin \ ant.exe

リモート実行のみ:

  • create --config-dir--install-dircreateすると期待どおりに動作しないcreateがあります。 設定ディレクトリとインストールディレクトリには多くのファイルが含まれているため、クラスタやノード操作の他のほとんどのオプションと同様に、リモートマシンにコピーされることはありません
  • リモート実行を使用してccmから起動されたcqlshが正しく起動しません(例: ccm --ssh-host 192.168.33.11 node1 cqlsh )。 ただし、 -x <CMDS>または--exec=CMDSを使用して、リモートノードでCQLSHコマンドを実行することはできます。

インストール

ccmはpython distutilsをソースディレクトリから使います:

sudo ./setup.py install

ccmはPython Package Indexで利用できます:

pip install ccm

利用可能なHomebrewパッケージもあります:

brew install ccm

使用法

3ノードのカサンドラクラスターを起動させたいとしましょう。

短縮版

ccm create test -v 2.0.5 -n 3 -s

もちろん、あなたがテストしたいバージョンのCassandraで2.0.5を置き換えたいと思うでしょう。

より長いバージョン

ccmはCassandraソースツリー(jarファイルではない)から動作します。 ccmにソースを見つける方法を伝える2つの方法があります:

  1. Cassandraのソースをダウンロードしてコンパイルした場合は、ccmに次のように新しいクラスタを開始することによってそれらを使用するように要求できます。

    ccm create test –install-dir = <パス/ to / cassandra-sources>

    または、そのソースツリーディレクトリから、単純に

     ccm create test
    
  2. あなたはCassandraのリリース版を使うようにccmに頼むことができます。 たとえば、Cassandra 2.0.5を使用するには、

     ccm create test -v 2.0.5
    

    ccmはバイナリをhttp://archive.apache.org/dist/cassandraからダウンロードし、それを使用するように新しいクラスタを設定します。 つまり、指定したバージョンのクラスタを初めて作成するときに、このコマンドに数分かかることがあります。 ccmは~/.ccm/repository/にコンパイルされたソースを保存するので、2回目にそのバージョンのクラスタを作成する方がはるかに高速です(異なるバージョンのクラスタをたくさん作成すると、ディスクスペース)。

クラスタを作成したら、次のように3つのノードを設定できます。

ccm populate -n 3

Mac OSXの場合は、最初のノード以外のすべてのノードに新しいインタフェースを作成します。たとえば、クラスタに3つのノードを設定した場合は、127.0.0.2と127.0.0.3のインタフェースを作成します。

sudo ifconfig lo0 alias 127.0.0.2
sudo ifconfig lo0 alias 127.0.0.3

これらのエイリアスは再起動時に消えます。 Mac OSX上の永久的なネットワークエイリアスについては、

その後、以下を実行します:

ccm start

これは、IP 127.0.0の3つのノードを開始します。[1、2、3]はポート9160で、内部クラスタ通信ではポート7000、JMXではポート7100,7200、および7300です。 クラスタが正しく設定されていることを確認できます

ccm node1 ring

これで、4番目のノードをブートストラップすることができます。

ccm add node4 -i 127.0.0.4 -j 7400 -b

(移入は最初に複数のノードを追加するためのショートカットです)

ccmは、クラスタのすべてのノードをフラッシュするなどの便利な機能を提供します。

ccm flush

または1つのノードのみ:

ccm node2 flush

また、次のようにして、特定のノードのログファイルを簡単に見ることができます。

ccm node1 showlog

最後に、クラスタ全体を取り除くことができます(ノードを停止し、すべてのデータを削除します)。

ccm remove

提供されている他のコマンドのリストは、

ccm

各コマンドは、 -h (または--help )フラグによって文書化されます。 たとえば、 ccm add -hccm add -hのオプションを示します。

リモート使用(SSH / Paramiko)

上記の使用例はすべて、リモートで構成されたマシンでまったく同じように動作します。 CCMコマンドを実行する前にリモートマシンとの接続を確立するためには、リモートオプションが必要です。

引数 説明
–ssh-host 文字列 SSH接続に使用するホスト名またはIPアドレス
–ssh-port int SSH接続に使用するポート
デフォルトは22です。
–ssh-username 文字列 ユーザ名/パスワードまたは公開鍵認証に使用するユーザ名
–ssh-password 文字列 公開鍵認証を使用してユーザ名/パスワードまたは秘密鍵パスフレーズに使用するパスワード
–ssh-private-key ファイル名 SSH接続に使用する秘密鍵

特殊な取り扱い

コマンドによっては、リモートサーバー上にファイルを配置する必要があります。 これらのコマンドは事前処理され、ファイル転送が開始され、CCMコマンドのリモート実行の引数値が更新されます。

パラメータ 説明
--dse-credentials ローカルDSE資格情報ファイルをリモートサーバーにコピーする
--node-ssl 再帰的にノードSSLディレクトリをリモートサーバにコピーする
--ssl SSLディレクトリをリモートサーバに再帰的にコピーする

短縮版

ccm --ssh-host=192.168.33.11 --ssh-username=vagrant --ssh-password=vagrant create test -v 2.0.5 -n 3 -i 192.168.33.1 -s

-iは、作成プロセス中にIPプレフィックスを追加して、ノードがノードの適切なIPアドレスを使用して通信するようにします

ソース配布

毎回デフォルトのバイナリの代わりにソースディストリビューションを使用したい場合(たとえば、Continuous Integrationの場合)、cassandraのバージョンのsource:接頭辞を付けることができます。

ccm create test -v source:2.0.5 -n 3 -s

自動バージョンフォールバック

バージョン文字列に ‘binary:’または ‘source:’が明示的に指定されていない場合、ccmはapacheミラーにアクセスできない場合、gitから要求されたバージョンをビルドすることにフォールバックします。

GitとGitHub

正規のApache Gitリポジトリから最新バージョンを使用するには、バージョン名git:branch-name使用します 。例:

ccm create trunk -v git:trunk -n 5

CassandraのGitHubフォークからブランチをダウンロードするには、リポジトリに接頭辞を付けてgithub:でブランチすることができます:

ccm create patched -v github:jbellis/trunk -n 1

Bashのコマンドライン補完

ccmには、クラスタコマンドとノードコマンドの両方に多くのサブコマンドがあります。また、呼び出すサブコマンドの名前を覚えていないこともあります。 また、長いクラスタやノード名のためにコマンドラインが長くなることもあります。

bashのプログラム可能な補完機能を利用して、ccmの使用をより快適にします。 misc/ccm-completion.bashをあなたのホームディレクトリのどこかにコピーしてください(あるいは、あなたのシステムのすべてのユーザがアクセスできるようにするには/ etc) .bash_profileソースを入れてください:

. ~/scripts/ccm-completion.bash

設定が完了すると、 ccm sw<tab>ccm switchに展開されccm sw<tab> switchサブコマンドには、クラスタ名を補完するための特別な補完ロジックがあります。 したがって、 ccm switch cl<tab>は、 ccm switch cluster-58展開されます。ただし、cluster-58が名前が “cl”で始まる唯一のクラスタである場合。 あいまいさがある場合、 <tab>もう一度押すと、一致する選択肢が表示されます。

$ ccm switch cl<tab>
    ... becomes ...
$ ccm switch cluster-
    ... then hit tab twice ...
cluster-56  cluster-85  cluster-96
$ ccm switch cluster-8<tab>
    ... becomes ...
$ ccm switch cluster-85

呼び出されるccmに基づいて利用可能なサブコマンドを動的に決定します。 したがって、複数のccm(または新しいコマンドで継続的に更新しているccm)を実行しているユーザーは、自動的に動作します。

補完スクリプトは、2つの隠しサブコマンドを持つccmに依存しています。

  • show-cluster-cmds – クラスタサブコマンドの名前を発行します。
  • show-node-cmds – ノードのサブコマンドの名前を出力します。

したがって、十分に古いバージョンのccmでは動作しません。

リモートデバッグ

リモートデバッガでCassandraノードに接続する場合は、 -d (または--debug )フラグをpopulateコマンドに渡す必要があります。

ccm populate -d -n 3

これはIP 127.0.0。[1、2、3]の3つのノードにポート2100、2200、2300のリモートデバッグを設定します。メインスレッドはサスペンドされないので、リモートデバッガに接続する必要はありませんノードを開始する。

あるいは、ノードを追加するときに-r (または--remote-debug-port )フラグを使用してリモートポートを指定することもできます

ccm add node4 -r 5005 -i 127.0.0.4 -j 7400 -b

物事が保管される場所

デフォルトでは、ccmはすべてのノードデータと設定ファイルを~/.ccm/cluster_name/下に格納します。 これは、各コマンドで--config-dirオプションを使用して上書きすることができます。

DataStax Enterprise

CCM 2.0では、DSEクラスタの作成と対話がサポートされています。 –dseオプションは、 ccm createコマンドで使用する必要があります。 ccm create -hヘルプを参照してください。

CCM Lib

ccm機能は、ccmlibを使用してプログラムで使用できます。 これはCassandraに対する自動テストの実装に使用できます。 ccmlibの使い方の簡単な例を次に示します。

import ccmlib.cluster

CLUSTER_PATH="."
cluster = ccmlib.cluster.Cluster(CLUSTER_PATH, 'test', cassandra_version='2.1.14')
cluster.populate(3).start()
[node1, node2, node3] = cluster.nodelist()

# do some tests on the cluster/nodes. To connect to a node through thrift,
# the host and port to a node is available through
#   node.network_interfaces['thrift']

cluster.flush()
node2.compact()

# do some other tests

# after the test, you can leave the cluster running, you can stop all nodes
# using cluster.stop() but keep the data around (in CLUSTER_PATH/test), or
# you can remove everything with cluster.remove()

– Sylvain Lebresne sylvain@datastax.com







-riptano

執筆者: