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
が行の最初の文字になるように、先頭のスペースも削除されていることを確認してください。
. . .
## 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
に対して、このプロセスを繰り返します。
. . .
## 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ドキュメントのサンプルコードです。
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)
トランスポート層セキュリティ(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の推奨事項を参照してください。