RiakCS 对像存储性能探索全记录之——
RiakCS(Riak云存储)是基于Riak KV——Basho公司的分布式数据库构建的易于使用的对象存储软件。RiakCS旨在以任何规模提供简单,可用的分布式云存储,并可用于构建云架构(无论是公共还是私有),或用作重型应用程序和服务的存储基础架构。 Riak CS的API是AmazonS3兼容的,并支持涉及计费和计量的用户报告。
由于Riak CS是基于Riak KV数据库的,因此在部署Riak CS需要先部署Riak KV(下文中的Riak);另外,Riak系列的软件都是用Erlang开发的,因此我们需要部署Erlang环境;为了保持系统用户信息的唯一性我们需要安装Stanchion;所以部署Riak CS集群需要安装的主要组件有Erlang,Riak KV,Stanchion及Riak CS,下面我们按顺序一步步来完成。
硬件配置:Intel(R)Xeon(R) CPU E5-2420 0 @ 1.90GHz
操作系统:Ubuntu 14.04.3 LTS
网络连接正常。
软件版本:
Riak KV — riak-2.1.1
Stanchion — stanchion-2.1.0
Riak CS — riak-cs-2.1.0
安装编译依赖git:
$ sudo apt-get install build-essential libc6-dev-i386 git
安装编译依赖git:
$ sudo apt-getinstall build-essential libc6-dev-i386 git
安装依赖包
$ sudo apt-getupdate
$ sudo apt-getinstall build-essential autoconf libncurses5-dev openssl libssl-dev fopxsltproc unixodbc-dev git
安装GUI依赖
$ sudo apt-getinstall libwxbase2.8 libwxgtk2.8-dev libqt4-opengl-dev
安装Basho补丁版本的Eerlang
$ wgethttp://s3.amazonaws.com/downloads.basho.com/erlang/otp_src_R16B02-basho8.tar.gz
$ tar zxvfotp_src_R16B02-basho8.tar.gz
$ cdOTP_R16B02_basho8
$ ./otp_buildautoconf
$ ./configure&& make && sudo make install
验证
riak@riak2:~$which erl
/usr/local/bin/erl
启动Erlang
riak@riak2:~$erl
Erlang R16B02_basho8(erts-5.10.3) [source] [64-bit] [smp:24:24] [async-threads:10] [hipe][kernel-poll:false]
EshellV5.10.3 (abort with ^G)
1>
退出Erlang
1> q().
ok
2>riak@riak2:~$
可能遇到的问题:
1、make: *** [ ]Error x
----处理:
这种一般都是依赖包没有安装完全,可在网上搜索类似问题。
2、有时会遇到需要安装gcc以及g++,按提示安装成功即可;
1. 下载、安装Riak:
$ wgethttp://s3.amazonaws.com/downloads.basho.com/riak/2.0/2.0.7/riak-2.0.7.tar.gz
$ tar zxvf riak-2.0.7.tar.gz
$ cd riak-2.0.7
$ make rel
验证:
riak@riak2:~/riak-2.0.7/rel/riak/bin$ ./riak ping
pong
可能遇到的问题:
1、编译失败,报错:
make: *** [ ] Error X
----处理:
# apt-getinstall libpam0g-dev
2. 启停验证
启动:
/…/bin/riak start (留意提示信息)
验证是否启动成功:
/…/bin/riak ping (pong)
停止:
/…/bin/riak stop (OK)
可能遇到的问题:
1、系统默认同时打开文件数为1024,而riak要求在65536以上,在新装的系统中安装成功后启动riak时报警:
!!!!
!!!! WARNING: ulimit -n is 1024; 65536 is the recommended minimum.
!!!!
----处理:
修改ulimit数:
1)# vim/etc/security/limits.conf
在末尾添加:
* soft nofile 65535
* hard nofile 65535
2)# vim/etc/pam.d/common-session
加入一行:
session required pam_limits.so
3)# vim/etc/profile
ulimit -SHn 65536
4)reboot.
2、
当riak单机工作正常之后,就可以着手构建集群了。
3. 构建集群
假设我们有两台服务器,
riak1: 10.148.51.11
riak2: 10.148.51.12
配置第一个节点:
--先停止Riak:
/…/bin/riakstop (OK)
--修改配置:
编辑riak-conf,将配置项参数参照如下设置:
nodename= riak@10.148.51.11
listener.http.internal= 10.148.51.31:8098
listener.protobuf.internal= 10.148.51.31:8087
以上所用端口号视具体情况选用可用端口。
--启动
/…/bin/riakstart (留意提示信息)
注意,修改配置项直接启动通常会失败。
查看启动信息
/…riak/bin/riak console
通常会看到如下信息:
…
[os_mon] memory supervisor port (memsup):Erlang has closed
[os_mon]cpu supervisor port (cpu_sup): Erlang has closed
…
{"Kernelpid terminated"…},
…
处理
rm -rf /…riak/data/*
然后再重新启动。
配置其他节点:
重复以上步骤即可。
加入集群:
前提是记录每个节点的nodename,本例为:riak@10.148.51.11,riak@10.148.51.12
操作:
——加入:
以riak@10.148.51.11为首节点,在riak@10.148.51.12上面执行
/…/bin/riak-admin cluster joinriak@10.148.51.11
Success:staged join request for 'riak@10.148.51.21' to 'riak@10.148.51.11'
以上提示说明加入操作已提交成功。
——显示集群更改计划(plan):
/…/bin/riak-admin cluster plan
注意提示信息。
——提交计划(commit)
/…/bin/riak-admin cluster commit
Cluster changes committed
上面提示表明节点已经加入成功,已成功构建一个包含riak@10.148.51.11,riak@10.148.51.12两个节点的riak集群,接下来我们可以通过相关命令操作进行验证。
可能的遇到的问题:
如两个节点的ring_size数据设置不一样,join操作会报:
Failed: riak@10.148.51.124 has a differentring_creation_size
处理:
1)停止riak,
2)杀掉与riak相关的所有进程
3)删除ring/目录下的所有数据
4)重启,join
4. 集群相关操作
1、查看集群状态
/…/bin/riak-admin clusterstatus
+-----------------------+------+-------+-----+-------+
| node |status| avail |ring |pending|
+-----------------------+------+-------+-----+-------+
| (C) riak@10.148.51.11 |valid | up |75.0| 50.0 |
| riak@10.148.51.21 |valid | up |25.0| 50.0 |
+-----------------------+------+-------+-----+-------+
2、加入新节点
重复前面步骤即可。
3、节点脱离集群
在要脱离的节点执行
/…/bin/riak-admin clusterleave
Success: staged leaverequest for 'riak@10.148.51.11'
注意,每次集群变动之后都需要plan以及commit。
验证可以通过clusterstatus查看。
4、强制移除节点
有时节点脱离失败,可采取强制移除节点来让节点脱离:
/…/bin/riak-admin clusterforce-remove riak@10.148.51.12
5、替换节点
在某个节点脱离时可以其所有数据分区传输到另一个节点,然后离开集群并关闭:
/…/bin/riak-admin clusterreplace riak@10.148.51.12 riak@10.148.51.11
6、集群更改计划
/…/bin/riak-admin cluster plan
7、提交集群更改
/…/bin/riak-admin clustercommit
8、清除当前暂存的集群更改
/…/bin/riak-admin clusterclear
9、查看集群分区信息
/…/bin/riak-admin clusterpartitions
Stanchion是一个管理Riak CS集群中的全局唯一实体的应用程序。它确保整个系统中的用户帐户和存储桶名称唯一。
Riak CS缺少Stanchion将不可用。
Riak CS集群在任意时刻只需要一个Stanchion节点保持活动即可,但为了避免Stanchion节点变得不可用,可以在集群中部署多个Stanchion节点,通过在每节点的riak-cs.conf将load balancer IP配置为当前的Stanchion IP即可。
下载安装
$ git clone https://github.com/basho/stanchion.git
$ tar -zxvf stanchion-2.1.0.tar.gz
$ cd stanchion-2.1.0 && make rel
可能遇到的问题:
1)编译的失败,报make: *** [ ] Error X
参照riak的相应操作即可。
2)在编译过程中找不到组件,显示带有“git://…”的提示信息,要么配置主机识别git协议,要么将包中文件中的链接修改为https协议。
配置
以riak@10.148.51.11节点为例,编辑stanchion.conf,将配置项参数参照如下设置:
listener =10.148.51.11:8085
riak_host =10.148.51.11:8087
nodename = stanchion@10.148.51.11
启动/验证/停止:
/…/bin/stanchionstart
/…/bin/stanchion ping
/…/bin/stanchion stop
下载安装
$git clone https://github.com/basho/riak_cs.git
$tar -zxvf riak-cs-2.1.0.tar.gz
$ cd riak-cs-2.1.0 && make rel
可能遇到的问题:参考riak kv 及stanchion的安装过程。
配置
以riak@10.148.51.11节点为例,
编辑riak-cs.conf,将配置项参数参照如下设置:
listener= 10.148.51.11:8080
riak_host= 10.148.51.11:8087 (注:设置为你想riak cs连接到的riak 节点的IP)
stanchion_host= 10.148.51.11:8085 (注:设置为相应的stanchion节点煌IP)
nodename= riak-cs@10.148.51.11
##storage_backend= XXX
编辑riak-cs.conf,将配置项参数参照如下设置:
[
{eleveldb, [
{total_leveldb_mem_percent, 30}
]},
{riak_kv, [
{add_paths,["/…/riak-cs/lib/riakc-2.1.1/ebin"]},
{storage_backend, riak_cs_kv_multi_backend},
{multi_backend_prefix_list, [{<<"0b:">>,be_blocks}]},
{multi_backend_default, be_default},
{multi_backend,[
{be_default,riak_kv_eleveldb_backend, [
{data_root, " /…/riak/data"}
]},
{be_blocks,riak_kv_bitcask_backend, [
{data_root, " /…/riak/data/bitcask"}
]}
]}
]}
].
其它节点重复以上步骤即可。
启动/验证/停止:
注意:启动服务的顺序很重要,因为每个都是下一个的依赖。 确保在启动Riak CS
之前成功启动Stanchion,在启动Stanchion之前成功启动Riak。
/…/bin/riak-csstart
/…/bin/riak-cs ping
/…/bin/riak-cs stop
验证与相应的Riak通信是否正常:
$curl -v http://10.148.51.11:8080/riak-cs/ping
OK
创建管理员帐户及用户帐户:
1)编辑riak-cs.conf,确保如下设置
anonymous_user_creation =on
2)启动riak,stanchion,riakcs
3)申请管理员帐户:
curl -v -H 'Content-Type: application/json' \
-XPOST http://10.148.51.11:8080/riak-cs/user \
--data '{"email":"admin@example.com","name":"admin"}'
返回类似如下JASON信息:
{"email":"admin@example.com",
"display_name":"admin",
"name":"admin",
"key_id":"Q_UF-UA4GZ_GROF2BA0FW",
"key_secret":"3exVObMfxq1wzaTO2URvaSaayR0O0jPDIc4tSmQ==",
"id":"b830761e3e63adb3792c1fa439271a06f4378b7dd16022b71be186daf6cbf5318",
"status":"enabled"}
4)添加管理员帐户:
编辑每节点的riak-cs.conf,确保如下设置:
admin.key = Q_UF-UA4GZ_GROF2BA0FW
admin.secret = 3exVObMfxq1wzaTO2URvaSaayR0O0jPDIc4tSmQ==
编辑每节点的stanchion.conf,确保如下设置:
admin.key = Q_UF-UA4GZ_GROF2BA0FW
admin.secret = 3exVObMfxq1wzaTO2URvaSaayR0O0jPDIc4tSmQ==
在所有节点重启riak cs,stanchion。
5)验证集群用户:
$ /…/riak/bin/riak attach
然后在显示的Erlang界面中输入:
{ok, C} = riak:local_client().
C:list_keys(<<"moss.users">>).
然后回车,帐户正常则返回类似如下信息:
(riak@10.148.51.11)1> {ok, C} =riak:local_client().
{ok,{riak_client,['riak@10.148.51.11',undefined]}}
(riak@10.148.51.11)2> {ok, C} =riak:local_client().
{ok,{riak_client,['riak@10.148.51.11',undefined]}}
(riak@10.148.51.11)3>C:list_keys(<<"moss.users">>).
{ok,[<<" Q_UF-UA4GZ_GROF2BA0FW">>,…">>]}
至此,一个满足基本存储功能的Riak CS集群部署完成。