如何在Ubuntu14.04上使用Python3安装和配置Riak2
###介绍
Riak 是一个 noSQL、非关系型数据存储,专注于分布式数据库架构。 最新的Riak 2.1.1版本,所有数据都可以做到强一致,数据在检索时是最新的,而不是最终一致,数据更易于访问,但不是最新的。
Riak 是一系列 key-value noSQL 实现中的一种选择,其竞争对手包括 Redis、MemcacheDB 和 Aerospike。 作为一个键值数据库,它因此没有针对抓取整个数据集的 SQL 式查询进行优化。
- 先决条件
要遵循本教程,您将需要:
- 一个新鲜的 Ubuntu 14.04 Droplet
- 一个sudo非root用户,可以按照本教程的步骤2和3进行设置
- Step 1 — 安装 Riak
在本节中,我们将安装 Riak 本身。
随着 2.0 的发布,Riak 已将其软件包从自托管的 apt 存储库迁移到 packagecloud.io 服务,因此我们需要使用 Riak 填充 apt
索引。 幸运的是,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。 我们将进行两项修改:设置队列扫描间隔和禁用调度程序压缩负载。
使用 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.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 打开文件限制文档 。
要仔细检查您的节点是否正在运行,请使用以下命令。
sudo riak ping
如果节点正在运行,该命令将输出 pong
,否则将返回错误。
要运行一系列预构建的 Riak 测试,请运行:
sudo riak-admin test
上述命令将输出以下内容。
输出
Successfully completed 1 read/write cycle to 'riak@127.0.0.1'
您的 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
。
接下来,我们将安装 Pip,这是 Python 包的推荐包安装程序。 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)
传输层安全 (TLS) 1.2 只是建立在 TLS 1.1 之上的更严格的安全协议,而 TLS 通常是 SSL 的升级。 但是,Internet Explorer 并不普遍支持 TLS 1.1 和 1.2,并且在所有流行浏览器的早期版本中都禁用了 TLS 1.2。 因此,我们可以接受 SSL 来安全地管理应用程序和 Riak 数据存储之间的连接。
它应该输出以下内容:
输出
Value 1 correct: True Value 2 correct: True Value 3 correct: True
就是这样!
##结论
您现在已经配置了 Riak 2 并成功地将其连接到 Python3。 然而,这个 Riak 2 安装并不特定于 Python,并且可以很容易地适应其他语言。 有关保护 Riak 的更多信息,请参阅官方 Riak 2 建议 。