###序章

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はまさにそれを行うカスタムスクリプトを提供しています。

まず、スクリプトをダウンロードします。

  1. curl -O https://packagecloud.io/install/repositories/basho/riak/script.deb.sh

直接実行するのではなく、最初にスクリプトを開いて、期待どおりのものが含まれていることを確認します。

  1. less script.deb.sh

HTTPS経由でパッケージをフェッチするには、スクリプトでapt-transport-httpsパッケージをインストールする必要があります。 また、認証局をチェックし、公開鍵をインポートして、パッケージインデックスを更新します。

qを押してファイルを閉じ、スクリプトを実行します。

  1. sudo bash script.deb.sh

最後に、Riakをインストールします。

  1. sudo apt-get install riak=2.1.1-1

ステップ2—Riakの設定と起動

このセクションでは、Riakノードを構成して起動します。

まず、RiakのErlangVMをいくつかの推奨設定で最適化する必要があります。 キューのスキャン間隔の設定と、スケジューラによる負荷の圧縮を無効にするという2つの変更を行います。

nanoまたはお気に入りのテキストエディタを使用して、新しいRiak2.0の設定ファイルを開きます。

  1. 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ノードを起動するには、次のコマンドを実行します。

  1. sudo riak start

次のように表示されます。

出力
!!!!
!!!! WARNING: ulimit -n is 1024; 65536 is the recommended minimum.
!!!!

上記のメッセージは、システムのオープンファイル制限が低いことを警告しています。これにより、任意の時点で開いているファイルハンドルの数が制限されます。 各ハンドルは、私たちが所有する筆記具と考えてください。 すべてのコンピュータプロセスには、書くための筆記具が必要です

デフォルトでは、使用可能な書き込みツールに対するシステムの制限は1024です。 Riakは、その制限を65536に上げることをお勧めします。 この制限を引き上げるには、公式のRiak OpenFilesLimitドキュメントを参照してください。

ノードが実行されていることを再確認するには、以下を使用します。

  1. sudo riak ping

コマンドは、ノードが実行中の場合はpongを出力し、それ以外の場合はエラーを返します。

ビルド済みのRiakテストのシーケンスを実行するには、次のコマンドを実行します。

  1. sudo riak-admin test

上記のコマンドは以下を出力します。

出力
Successfully completed 1 read/write cycle to '[email protected]'

これでRiakノードが稼働しています。

ステップ3—サンプルPythonアプリケーションの構築(オプション)

以下は、サンプルのPython-Riakアプリケーションをセットアップするオプションの一連の手順です。 上記の手順は言語に依存せず、正常に機能するために以下に依存しません。 サンプルのPythonアプリケーションに興味がない場合は、「結論」セクションにスキップできます。

まず、現在のPythonバージョンを確認します。

  1. python --version

次の出力が表示されます。

Output
Python 2.7.6

pythonでPython3を実行したいと思います。 それでは、古いバイナリを削除しましょう。

  1. sudo rm /usr/bin/python

次に、その場所にPython3バイナリへのシンボリックリンクを作成します。

  1. sudo ln -s /usr/bin/python3 /usr/bin/python

ここでpython --versionを再度実行すると、出力Python 3.4.0が表示されます。

次に、Pythonパッケージの推奨パッケージインストーラーであるPipをインストールします。 Pipを使用すると、必要なPython3パッケージを簡単に管理できます。 Pipの概要については、このチュートリアルをお読みください。

インストールするには、次のコマンドを実行するだけです。

  1. sudo apt-get install python3-pip

次に、Python-Riakクライアントをインストールする必要があります。 最初にいくつかの依存関係を満たす必要があります。

  1. sudo apt-get install python3-dev libffi-dev libssl-dev

クライアントをインストールします。

  1. sudo pip3 install riak

最後に、PythonとRiakの組み合わせをテストするためのサンプルアプリケーションをコーディングします。 アプリケーションを格納する新しいフォルダーを作成し、その中に新しいファイルを作成します。

  1. mkdir ~/test
  2. 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)

トランスポート層セキュリティ(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の推奨事項を参照してください。