Ubuntu14.04でPython3を使用してRiak2をインストールおよび構成する方法
###序章
Riakは、分散データベースアーキテクチャに重点を置いたnoSQLの非リレーショナルデータストアです。 最新のRiak2.1.1エディションでは、結果整合性とは対照的に、すべてのデータを強整合性にすることができます。よりアクセスしやすくなっていますが、最新ではありません。
Riakは、Redis、MemcacheDB、Aerospikeなどの競合他社とともに、Key-ValueNoSQL実装のファミリーの1つの選択肢です。 その結果、Key-Valueデータベースとして、データセット全体を取得するSQL風のクエリ用に最適化されていません。
- 前提条件
このチュートリアルに従うには、次のものが必要です。
- 1つの新しいUbuntu14.04ドロップレット
- このチュートリアルのステップ2と3に従ってセットアップできるsudo非rootユーザー。
- ステップ1—Riakのインストール
このセクションでは、Riak自体をインストールします。
2.0のリリースで、Riakはパッケージを自己ホスト型aptリポジトリから packagecloud.io サービスに移行したため、apt
インデックスにRiakを設定する必要があります。 幸い、Riakはまさにそれを行うカスタムスクリプトを提供しています。
まず、スクリプトをダウンロードします。
curl -O https://packagecloud.io/install/repositories/basho/riak/script.deb.sh
直接実行するのではなく、最初にスクリプトを開いて、期待どおりのものが含まれていることを確認します。
less script.deb.sh
HTTPS経由でパッケージをフェッチするには、スクリプトでapt-transport-https
パッケージをインストールする必要があります。 また、認証局をチェックし、公開鍵をインポートして、パッケージインデックスを更新します。
q
を押してファイルを閉じ、スクリプトを実行します。
sudo bash script.deb.sh
最後に、Riakをインストールします。
sudo apt-get install riak=2.1.1-1
ステップ2—Riakの構成と起動
このセクションでは、Riakノードを構成して起動します。
まず、RiakのErlangVMをいくつかの推奨設定で最適化する必要があります。 キューのスキャン間隔の設定と、スケジューラによる負荷の圧縮の無効化という2つの変更を行います。
nano
またはお気に入りのテキストエディタを使用して、新しいRiak2.0の構成ファイルを開きます。
sudo nano /etc/riak/riak.conf
以下で強調表示されているerlang.schedulers.force_wakeup_interval = 500
行のコメントを解除します。 e
が行の最初の文字になるように、先頭のスペースも削除されていることを確認してください。
/etc/riak/riak.conf
. . . ## Set scheduler forced wakeup interval. All run queues will be ## scanned each Interval milliseconds. While there are sleeping ## schedulers in the system, one scheduler will be woken for each ... ## Default: 500 ## ## Acceptable values: ## - an integer ## erlang.schedulers.force_wakeup_interval = 500 . . .
次の直後のブロックのerlang.schedulers.compaction_of_load = false
に対して、このプロセスを繰り返します。
/etc/riak/riak.conf
. . . ## Enable or disable scheduler compaction of load. By default ## scheduler compaction of load is enabled. When enabled, load ## balancing will strive for a load distribution which causes as many ... ## Default: false ## ## Acceptable values: ## - one of: true, false ## erlang.schedulers.compaction_of_load = false . . .
ファイルを保存して終了します。
Riakノードを起動するには、次のコマンドを実行します。
sudo riak start
次のように表示されます。
出力
!!!! !!!! WARNING: ulimit -n is 1024; 65536 is the recommended minimum. !!!!
上記のメッセージは、システムのオープンファイル制限が低いことを警告しています。これにより、任意の時点で開いているファイルハンドルの数が制限されます。 各ハンドルは、私たちが所有する筆記具と考えてください。 すべてのコンピュータプロセスには、書くための筆記具が必要です
デフォルトでは、使用可能な書き込みツールに対するシステムの制限は1024です。 Riakは、その制限を65536に上げることをお勧めします。 この制限を引き上げるには、公式のRiak OpenFilesLimitドキュメントを参照してください。
ノードが実行されていることを再確認するには、以下を使用します。
sudo riak ping
コマンドは、ノードが実行中の場合はpong
を出力し、それ以外の場合はエラーを返します。
事前に作成された一連のRiakテストを実行するには、次のコマンドを実行します。
sudo riak-admin test
上記のコマンドは以下を出力します。
出力
Successfully completed 1 read/write cycle to '[email protected]'
これで、Riakノードが稼働しています。
ステップ3—サンプルPythonアプリケーションの構築(オプション)
以下は、サンプルのPython-Riakアプリケーションをセットアップするオプションの一連の手順です。 上記の手順は言語に依存せず、正常に機能するために以下に依存しません。 サンプルのPythonアプリケーションに興味がない場合は、「結論」セクションにスキップできます。
まず、現在のPythonバージョンを確認します。
python --version
次の出力が表示されます。
OutputPython 2.7.6
python
でPython3を実行したいと思います。 それでは、古いバイナリを削除しましょう。
sudo rm /usr/bin/python
次に、その場所にPython3バイナリへのシンボリックリンクを作成します。
sudo ln -s /usr/bin/python3 /usr/bin/python
ここでpython --version
を再度実行すると、出力Python 3.4.0
が表示されます。
次に、Pythonパッケージの推奨パッケージインストーラーであるPipをインストールします。 Pipを使用すると、必要なPython3パッケージを簡単に管理できます。 Pipの概要については、このチュートリアルをお読みください。
インストールするには、次のコマンドを実行するだけです。
sudo apt-get install python3-pip
次に、Python-Riakクライアントをインストールする必要があります。 最初にいくつかの依存関係を満たす必要があります。
sudo apt-get install python3-dev libffi-dev libssl-dev
クライアントをインストールします。
sudo pip3 install riak
最後に、PythonとRiakの組み合わせをテストするためのサンプルアプリケーションをコーディングします。 アプリケーションを格納する新しいフォルダーを作成し、その中に新しいファイルを作成します。
mkdir ~/test sudo nano ~/test/app.py
以下を中に貼り付けます。 これは、公式Riakドキュメントのサンプルコードです。
〜/ test / app.py
import riak # connect to Riak myClient = riak.RiakClient(pb_port=8087, protocol='pbc') # create new Bucket myBucket = myClient.bucket('test') # store key-value pairs val1 = 1 key1 = myBucket.new('one', data=val1) key1.store() val2 = "two" key2 = myBucket.new('two', data=val2) key2.store() val3 = {"myValue": 3} key3 = myBucket.new('three', data=val3) key3.store() # fetch the data fetched1 = myBucket.get('one') fetched2 = myBucket.get('two') fetched3 = myBucket.get('three') print('Value 1 correct: '+str(val1 == fetched1.data)) print('Value 2 correct: '+str(val2 == fetched2.data)) print('Value 3 correct: '+str(val3 == fetched3.data))
次に、以下を実行してこのアプリケーションをテストします。
python ~/test/app.py
次の警告が出力されますが、これは無視してかまいません。
Python application warning/usr/local/lib/python3.4/dist-packages/riak/security.py:54: UserWarning: Found OpenSSL 1.0.1f 6 Jan 2014 version, but expected at least OpenSSL 1.0.1g. Security may not support TLS 1.2. warnings.warn(msg, UserWarning)
Transport Layer Security(TLS)1.2は、TLS 1.1の上に構築された、より厳格なセキュリティプロトコルであり、TLSは、通常、SSLからのアップグレードです。 ただし、InternetExplorerはTLS1.1および1.2を普遍的にサポートしているわけではなく、TLS1.2はすべての一般的なブラウザの初期バージョンでは無効になっています。 結果として、SSLを使用して、アプリケーションとRiakデータストア間の接続を安全に管理できます。
次のように出力されます。
出力
Value 1 correct: True Value 2 correct: True Value 3 correct: True
それでおしまい!
##結論
これでRiak2が構成され、Python3に正常に接続されました。 ただし、このRiak 2のインストールはPythonに固有のものではなく、他の言語に簡単に適合させることができます。 Riakの保護の詳細については、公式のRiak2の推奨事項を参照してください。