在多个节点上部署Oracle NoSQL数据库

1. 简介

Oracle NoSQL数据库是一款基于Berkeley DB Java Edition构建的,分布式的,跨数据中心的Key-Value数据库。它是一款高性能,和极短的响应时间(毫秒级)的云数据库方案。Oracle NoSQL数据库使客户能够轻松地管理大量的,动态模式 (dynamic schemas) 的数据,如Web日志数据,传感器和智能仪表的数据,用户个性化数据,和社交网络的数据。 Oracle NoSQL DB是采用Oracle Berkeley DB Java Edition做底层存储引擎,但我们在其之上添加了更多的基础架构层的功能,如: 数据分布 动态分区 负载平衡 监控和管理 可预见的延迟 多节点备份 举例来说,Oracle NoSQL DB是汽车的话,Oracle BDB则算汽车引擎。 Oracle NoSQL数据库会有商业版和社区版两个版本。当前发行的第一个版本中(v1.1.100),两者没有功能上的区别(商业版有Oracle的支持服务)。目前商业版本已经开放下载:http://t.cn/SvbsUm 它包括数据库产品本身的Java类库,第三方类库,示例代码,文档,启动脚本和基于Google GWT实现的管理功能。

2. Oracle NoSQL数据库在企业部署的示例图

如下图所示,在当今的企业部署中,Oracle NoSQL数据库可以和传统的关系型数据库混合搭配提供服务。比如,NoSQL数据库可以运行有实时要求的、非结构化的应用;关系型数据库可以用来执行查 询分析、交易结算等功能。举个在线电子商务的应用来说,和用户相关的注册信息、个人头像、评论、爱好、购物车、网站的静态图片、商品等信息可以存在 Oracle NoSQL数据库;而当用户选定进行结算时,则可以通过Oracle关系型数据库进行支付等操作。

Oracle NoSQL数据库分客户端和服务端2个部分。客户端提供给应用程序的API调用(如Put,Get,Delete,Multi Put/Get/Delete,Iterator等),以及服务端的一些状态和统计信息(如数据分区、机器负载等)。目前客户端仅提供Java接口,暂时不支持其他语言。

而服务端则具体用来管理数据,提供数据库操作、并发控制、一致性和扩展性、管理功能等。在下图中,每个Storage Node代表着数据中心中的一台物理或者虚拟的机器(VM),这些机器可以是跨数据中心的。而针对整个NoSQL数据库的管理进程可以部署在某个Storage Node上。我们提供命令行和web两种管理接口。

Oracle NoSQL数据库在企业部署示例图

Oracle NoSQL数据库在企业部署示例图

3. 在多个节点上部署NoSQL数据库

目前Oracle NoSQL数据库只支持在Linux或者Solaris (10及以上)机器上进行部署,这是由于部署及管理的脚本是bash的。如果你要在Windows上进行部署,你可以有2种办法:使用 Cygwin,MingGW等类Linux工具;或者将NoSQL部署脚本转换成Windows的bat脚本 (可参考 https://forums.oracle.com/forums/thread.jspa?threadID=2307203&tstart=0 )。你也可以尝试在类Linux的系统(如Unix)上实验部署Oracle NoSQL数据库。为了性能考虑,我们不推荐你使用虚拟机。

3.1 前期准备

  • JDK  1.6.0 u25或以上。
  • 一台或者多台Linux或者Solaris (10及以上)机器。
  • 保证机器之间时间同步。你可以使用ntp等工具。
  • Oracle NoSQL数据库发布包,如kv-1.1.100.zip。

3.2 安装步骤

a. 创建启动配置参数文件

b. 启动管理进程和存储节点代理进程(Storage Node Agent, 简称SNA)

c. 通过Oracle NoSQL数据库管理(命令行或者web方式)配置一个NoSQL库,步骤如下:

1) 创建一个数据中心

2) 部署一台Storage Node,用来运行该NoSQL库的管理模块

3) 将管理模块部署到Storage Node上 (该步骤在步骤b的基础上增加了对NoSQL数据库级别的管理功能,因此管理节点和端口必须一致)

4) 创建一个Storage Node池

5) 将步骤2)创建的Storage Node加到存储节点池

6) 将剩余节点(Storage Node) 轮流部署并加入到存储节点池

7) 在指定的存储节点池上部署NoSQL库,指定复制因子和数据分区数。

d. 在客户端运行HelloBigDataWorld示例程序,验证数据库是否部署成功。

3.3 实际部署示范

对照3.2的过程,简单起见我们在3个节点上部署一个NoSQL数据库实例,并运行HelloBigDataWorld例子。

1. 下载Oracle NoSQL数据库发布包(如kv-1.1.100.zip),并解压释放。释放文件的文件夹约定为KVHOME。(注意:如果是多机环境,你要将发布包释放或者映射到每台机器的对应目录。)

2. 创建存放数据文件的目录,约定为KVROOT。多机的话,每台机器一样要创建数据文件目录。

3. 在管理节点上,创建启动配置参数文件

> KVHOME/bin/kvctl makebootconfig -root KVROOT \
                                  -port 5000 \
                                  -admin 5001 \
                                  -harange 5010,5020

4. 启动管理进程和存储节点代理进程

> KVHOME/bin/kvctl start -root KVROOT

5. 在管理节点上: 验证管理进程和存储节点代理进程是否顺利启动

> jps -m
29400 ManagedService -root /tmp -class Admin -service BootstrapAdmin.13250 -config config.xml
29394 StorageNodeAgentImpl -root /tmp -config config.xml

# 如果顺利启动则会出现上面所示的2个进程

6. 在客户端: 验证客户端是否可以顺利“联系”存储节点代理进程

> KVHOME/bin/kvctl ping -port 5000 -host node01

# 如果成功则出现如下所示的信息:
SNA at hostname: node01, registry port: 5000 is not registered.
            No further information is available

# 否则,不成功的话,会出现如下错误:
Could not connect to registry at node01:5000
Connection refused to host: node01; nested exception is:
java.net.ConnectException: Connection refused

7. 通过命令行配置一个NoSQL数据库实例

7.1 使用命令行单步执行

1) 启动管理功能的命令行

> KVHOME/bin/kvctl runadmin -port 5000 -host node01

2) 指定数据库名字

kv-> configure mystore

3) 创建一个数据中心 

kv-> plan -execute -name "Deploy DC" deploy-datacenter "Boston" "Savvis"
1
kv->

4) 部署一台Storage Node,用来运行该NoSQL库的管理模块

kv-> plan -execute -name "Deploy n01" deploy-sn 1 node01 5000 "comment"
2
kv->

5) 将管理模块部署到Storage Node上 (该步骤在步骤b的基础上增加了对NoSQL数据库级别的管理功能,因此管理节点和端口必须一致)

kv-> plan -execute -name "Deploy admin" deploy-admin 1 5001
3
kv->
6) 创建一个Storage Node池

kv-> addpool BostonPool
kv-> show topology
dc=[dc1] name=Boston
 sn=[sn1]  dc=dc1 node1:5000 status=UNREPORTED
7) 将步骤2)创建的Storage Node加到存储节点池

kv-> joinpool BostonPool 1
AllStorageNodes: sn1
BostonPool: sn1
kv->
8 ) 将剩余节点(Storage Node) 轮流部署并加入到存储节点池

kv-> plan -execute -name "Deploy n02" deploy-sn 1 node02 5000
4
kv-> joinpool BostonPool 2
AllStorageNodes: sn1 sn2
BostonPool: sn1 sn2
kv-> plan -execute -name "Deploy n03" deploy-sn 1 node03 5000
5
kv-> joinpool BostonPool 3
AllStorageNodes: sn1 sn2 sn3
BostonPool: sn1 sn2 sn3
kv->

....
9) 在指定的存储节点池上部署NoSQL库,指定复制因子和数据分区数

kv-> plan -execute -name "Deploy the store" deploy-store BostonPool 3 300

10) 查询所有以上步骤的结果

kv-> show plans
1 Deploy Boston DC         SUCCEEDED
2 Deploy n01               SUCCEEDED
3 Deploy admin             SUCCEEDED
4 Deploy n02               SUCCEEDED
5 Deploy n03               SUCCEEDED
6 Deploy the store         SUCCEEDED

11) 退出命令行

kv-> quit

7.2 使用脚本

1) 启动管理功能的命令行,并指定运行的脚本

> KVHOME/bin/kvctl runadmin -port 5000 -host node01 -script scrpt.txt
kv-> 

执行脚本(scrpt.txt)内容如下:

### Begin Script ###
configure mystore
plan -execute -name "Deploy Boston DC" deploy-datacenter "Boston" "Savvis"
plan -execute -name "Deploy n01" deploy-sn 1 node01 5000
plan -execute -name "Deploy admin" deploy-admin 1 5001
addpool BostonPool
joinpool BostonPool 1
plan -execute -name "Deploy n02" deploy-sn 1 node02 5000
joinpool BostonPool 2
plan -execute -name "Deploy n03" deploy-sn 1 node03 5000
joinpool BostonPool 3
plan -execute -name "Deploy the store" deploy-store BostonPool 3 300
### End Script ###

2) 查询所有以上步骤的结果

kv-> show plans
1 Deploy Boston DC         SUCCEEDED
2 Deploy n01               SUCCEEDED
3 Deploy admin             SUCCEEDED
4 Deploy n02               SUCCEEDED
5 Deploy n03               SUCCEEDED
6 Deploy the store         SUCCEEDED

3) 退出命令行

kv-> quit

8. 在客户端运行HelloBigDataWorld示例程序,验证数据库是否部署成功。

在客户端编译示例程序:

javac -g -cp lib/kvclient-M.N.O.jar:examples examples/hello/*.java

运行该示例程序:

java -cp KVHOME/lib/kvclient-M.N.O.jar:KVHOME/examples \
     hello.HelloBigDataWorld \
     -host <hostname> -port <hostport> -store <kvstore name> 

如果输出结果为 "Hello Big Data World!",那么恭喜你,你的第一个Oracle NoSQL数据库已经配置成功了。

4. 卸载NoSQL数据库

卸载的过程比较直观,有2种办法:

1. 在每个Storage Node节点上: 通过kvctl停止数据库,然后移除KVROOT目录。

a) kvctl stop -root KVROOT/

b) rm KVROOT/

2. 在每个节点上kill掉所有NoSQL数据库的Java进程 (通过jps -m定位进程号),然后移除KVROOT目录。 备注:这里基于的假设是Oracle NoSQL数据库是7*24的不间断应用,因此目前的办法是逐个Storage Node来停止服务,并删除数据。

5. 后续

当你的NoSQL成功部署以后,你可能会去读一下Oracle NoSQL数据库的FAQ和Getting Started Guide来编写你的第一个NoSQL应用。你也可能会要去查询对应的Javadoc以及示例代码。

如果是数据库管理员的话,你可能会去读一下Oracle NoSQL数据库的FAQ和Administrator’s Guide。

以上所有这些文档在你下载的Oracle NoSQL发布包中,或者你也可以访问 http://docs.oracle.com/cd/NOSQL/html/index.html 如果有更多问题,欢迎通过邮件和我联系: chao.huang[at]oracle[dot]com;或者通过新浪微博和我们互动: weibo.com/bdbchina。 转载请注明出处,谢谢。

转自 http://www.bdbchina.com/2011/12/%E5%9C%A8%E5%A4%9A%E4%B8%AA%E8%8A%82%E7%82%B9%E4%B8%8A%E9%83%A8%E7%BD%B2oracle-nosql%E6%95%B0%E6%8D%AE%E5%BA%93/

猜你喜欢

转载自mib168.iteye.com/blog/1565298