前書き

Riakは、分散データベースアーキテクチャに重点を置いたnoSQLの非リレーショナルデータストアです。 最新のRiak 2.1.1エディションでは、すべてのデータを「一貫性のある」状態にすることができます。データは取得時に最新の状態になります。

Riakは、Redis、MemcacheDB、Aerospikeなどの競合他社とのキーバリューnoSQL実装ファミリの選択肢の1つです。 そのため、キーと値のデータベースとして、データセット全体を取得するSQL風のクエリに対して最適化されていません。

前提条件

このチュートリアルを実行するには、次のものが必要です。

  • 1つの新しいUbuntu 14.04ドロップレット

  • sudo非ルートユーザー。https://www.digitalocean.com/community/tutorials/how-to-add-and-delete-users-on-an-an-ubuntu-のステップ2および3に従ってセットアップできます。 14-04-vps [このチュートリアル]

ステップ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のErlang VMを最適化する必要があります。 キュースキャン間隔の設定と、スケジューラによる負荷の圧縮を無効にするという2つの変更を行います。

`+ nano +`またはお好みのテキストエディターを使用して、新しいRiak 2.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.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


. . .

ファイルを保存して終了します。

Riakノードを開始するには、次を実行します。

sudo riak start

以下が表示されます。

出力

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

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

デフォルトでは、システムで利用可能なライティングツールの制限は1024です。 Riakは、その制限を65536に引き上げることをお勧めします。 この制限を引き上げるには、http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/ [Riak Open Files Limitの公式ドキュメント]を参照してください。

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

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`でPython 3を実行したいと思います。 それでは、古いバイナリを削除しましょう。

sudo rm /usr/bin/python

次に、代わりにPython 3バイナリへのシンボリックリンクを作成します。

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

今すぐ `+ python –version `を実行すると、出力 ` Python 3.4.0 +`が表示されます。

次に、Pythonパッケージの推奨パッケージインストーラーであるPipをインストールします。 Pipを使用すると、必要なPython3パッケージを簡単に管理できます。 Pipの概要については、https://www.digitalocean.com/community/tutorials/common-python-tools-using-virtualenv-installing-with-pip-and-managing-packages [このチュートリアル]を参照してください。

それをインストールするには、次を実行するだけです:

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

内部に以下を貼り付けます。 これは、http://docs.basho.com/riak/latest/dev/taste-of-riak/python/ [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からのアップグレードです。 ただし、Internet ExplorerはTLS 1.1および1.2を普遍的にサポートしておらず、TLS 1.2はすべての一般的なブラウザーの初期バージョンで無効になっています。 その結果、アプリケーションとRiakデータストア間の接続を安全に管理するためにSSLを使用できます。

以下を出力するはずです。

出力

Value 1 correct: True
Value 2 correct: True
Value 3 correct: True

それでおしまい!

結論

Riak 2を構成し、Python3に正常に接続しました。 ただし、このRiak 2のインストールはPythonに固有のものではなく、他の言語に簡単に適合させることができます。 Riakの保護の詳細については、公式のhttp://docs.basho.com/riak/latest/ops/running/authz/[Riak 2の推奨事項]を参照してください。