RiakCS 对像存储性能探索全记录之——

Riak CS集群部署精要

简介

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

部署过程

安装Elang

安装编译依赖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++,按提示安装成功即可;

RIak集群搭建

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

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

部署Riak CS

下载安装

$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集群部署完成。

高级实践:(见调优尝试)

Riak CS集群部署相关推荐

  1. Nacos集群部署说明

    Nacos集群部署说明 集群模式部署 这个快速开始手册是帮忙您快速在你的电脑上,下载安装并使用Nacos,部署生产使用的集群模式. 集群部署架构图 因此开源的时候推荐用户把所有服务列表放到一个vip下 ...

  2. 来了,k8s!-----------------k8s集群部署

    k8s的集群部署,官方提供了三种方式: minikube Minikube是一个工具,可以在本地快速运行的一个单点的k8s,仅用于尝试k8s或日常开发的用户使用.部署地址:https://kubern ...

  3. Nacos集群部署方案

    1. 介绍 生产环境部署nacos使用集群部署方案cluster来保障高可用 2. 集群部署架构图 nacos官方推荐把所有服务列表放到VIP下面,然后挂到一个域名下面 http://ip1:port ...

  4. EureKa服务注册与发现(集群部署Eureka与支付模块集群部署、订单模块访问负载均衡调用支付服务实现)

    上一遍文章完成了,聚合父工程.消费模块.支付模块.公共模块的搭建.RestTemplate调用支付模块 该篇项目创建gitv2.0的管理分子完成学习 1.Eureka基础知识 1.1. 什么是服务治理 ...

  5. 自动化运维之k8s——Kubernetes集群部署、pod、service微服务、kubernetes网络通信

    目录 一.Kubernetes简介 1.Kubernetes简介 2.kubernetes设计架构 3.Kubernetes核心组件 4.kubernetes设计结构 二.Kubernetes部署 1 ...

  6. Nacos生产环境集群部署方案

    1.介绍 生产环境中部署nacos首先肯定是使用集群模式cluster保证高可用. 2.集群部署架构图 nacos 官方推荐用户把所有服务列表放到一个vip下面,然后挂到一个域名下面 http://i ...

  7. Docker集群部署管理

    1.什么是Kubernetes? Kubernetes是Google开源的容器集群管理系统,是目前比较火的集群式部署管理系统:Kubernetes(简称k8s),它是基于Docker技术的nat网络模 ...

  8. 数据库系列之SequoiaDB高可用集群部署(二)

    SequoiaDB作为存储引擎,支持高并发的HTAP场景.本位总结运维分析项目中使用SequoiaDB作为数据存储的高可用部署实战,并接入Kafka进行高并发的更新业务和Spark进行高并发的批量查询 ...

  9. k8s集群部署二进制(一)

    部署一套完整的Kubernetes高可用集群(二进制) 一.前置知识点 1.1 生产环境可部署Kubernetes集群的两种方式 目前生产部署Kubernetes集群主要有两种方式: kubeadm ...

最新文章

  1. 第十一次个人例行报告
  2. 关于正点原子STM32的MDK例程移植到IAR中遇到的错误解决方法 __use_no_semihosting
  3. Eclipse中弹出OLE Exception窗口
  4. trie树 mysql_Trie树详解(转)
  5. 设计模式(5)—— 工厂方法模式(Factory Method,创建型)
  6. pycharm如何修改文件名
  7. TED如何和压力做朋友(一)
  8. 专家不确定伊朗是否是银行 DDoS 攻击的幕后黑手
  9. 电工与电子技术和电子电工的区别
  10. 股票术语之期货、期权
  11. C++练习实例———控制台实现坦克大战小游戏
  12. 现代微积分学的公理观
  13. 关于墨客的abi decode/encode
  14. Stm32 学习笔记(1)我所使用的板子
  15. 微信小程序开发(未完待续)
  16. 初识 love2d. Hello World lua 调试 iOS 环境运行
  17. WWDC 2015后果
  18. html+css+js实现内容的收缩与展开
  19. 数据采集简繁体快速转换
  20. 语音合成TTS论文优选:A HYBRID TEXT NORMALIZATION SYSTEM USING MULTI-HEAD SELF-ATTENTION FOR MANDARIN

热门文章

  1. 李开复:年轻人现在就该开始找AI替代不了的工作
  2. 5s插上电信卡显示无服务器,苹果5s装上电信卡肿么是无服务啊
  3. 来自思妙动画的情感小品
  4. 爱奇艺校招笔试题判断题
  5. 亚马逊云科技游戏孵化营-游戏的增长
  6. 用C++语言程序实现拉格朗日插值公式
  7. jdk1.7的HashMap重写以及与1.8的比较
  8. 永磁同步电机矢量控制基础补充(六)——如何在simulink初始化电机参数?
  9. 返回键退出程序与不退出程序应用
  10. 【SpringCloud框架之Bus消息总线】