介绍
Riak是一个noSQL非关系数据存储区,专注于分布式数据库架构。使用最新的Riak 2.1.1版本,可以使所有数据保持一致,其中数据在检索时是最新的,而不是最终一致的,其中数据更易于访问但不是最新的。
Riak是一系列键值noSQL实现中的一种选择,竞争对手包括Redis,MemcacheDB和Aerospike。作为键值数据库,它因此不针对抓取整个数据集的SQL式查询进行优化。
要学习本教程,您需要:
sudo
命令的非root账号的Ubuntu服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。在本节中,我们将安装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
在本节中,我们将配置并启动Riak节点。
首先,我们需要使用一些推荐的设置来优化Riak的Erlang VM。我们将进行两项修改:设置队列扫描间隔和禁用调度程序压缩负载。
使用nano
或您喜欢的文本编辑器打开新的Riak 2.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 Open Files限制文档。
要仔细检查节点是否正在运行,请使用以下命令。
sudo riak ping
如果节点正在运行,则将输出该pong
命令,否则将返回错误。
要运行一系列预构建的Riak测试,请运行:
sudo riak-admin test
以上命令将输出以下内容。
Successfully completed 1 read/write cycle to 'riak@127.0.0.1'
您的Riak节点现已启动并运行。
以下是设置示例Python-Riak应用程序的可选系列步骤。以上说明与语言无关,并且不依赖于以下内容以正常运行。如果您对示例Python应用程序不感兴趣,可以跳到结论部分。
首先,检查您当前的Python版本。
python --version
你应该看到输出:
Python 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包。
要安装它,只需运行以下命令:
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
它将输出以下警告,但这可以忽略不计。
/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官方建议。
更多Ubuntu教程请前往腾讯云+社区学习更多知识。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。