您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
淘宝开源数据库OceanBase编译、安装和配置手册
 
作者:Eugene 来源:TechTarget中国 发布于 2015-11-9
   次浏览      
 

概述

OceanBase是 一个高性能的分布式表格系统,提供类似BigTable的性能和扩展性,但表格中保存的是强类型的数据,比如integer,string,datetime等。 它使用C++编写,运行于64位Linux环境下。生产环境下需要使用多台机器搭建OceanBase集群以提供高可用和高性能,但是你也完全可以使用一 台机器运行OceanBase。

本章节讲解如何迅速搭建一个可用的最小OceanBase环境,在这之前请确保你能提供以下的条件:

64位的Linux服务器一台, 内存至少1G。

足够的磁盘空间,最少100MB。

拥有root权限或能通过sudo提升至root权限。

如果你满足要求,恭喜你。可以继续安装OceanBase的过程了。这大概分为如下几个步骤:

从源码编译安装OceanBase及其依赖的库

启动OceanBase

使用OceanBase

最后,我们会对OceanBase中的配置做一个粗略的解释以帮助你解决启动时遇到的问题。

从源码编译安装OceanBase及其依赖的库

在安装OceanBase之前,请检查gcc的版本:

gcc --version

最好用gcc 4.1.2编译,如果版本不匹配,不一定可以编译成功,欢迎大家测试不同版本的编译器,同时欢迎大家提供patch让OceanBase能在更多版本的编译器下编译通过。

Oceanbase在运行时需要用到一些动态库,建议在bashrc中将LD_LIBRARY_PATH设置好:

echo "export TBLIB_ROOT=$HOME/ob-install-dir"  >> ~/.bashrc 
echo "export LD_LIBRARY_PATH=/usr/lib/:/usr/local/lib:\$TBLIB_ROOT /lib:\$HOME/ob-install-dir/lib:\$LD_LIBRARY_PATH" >> ~/.bashrc
source ~/.bashrc

安装依赖的库:[libtoolize]

编译脚本中用到了aclocal, autoconf, automake等工具,一般机器上会自带。如果机器上没有安装,请先安装:

sudo yum install libtool.x86_64

liblzo2

liblzo2是一个压缩库,OceanBase需要用它来压缩静态数据. 利用yum快速安装

sudo yum install LZO.x86_64

如果yum找不到这个包,可以选择手动安装:

wget -c http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz 
tar zxf lzo-*
(cd lzo-2.03; ./configure --enable-shared --prefix=/usr/ && make && sudo make install)

安装完成后你可以编译一个C程序看看编译器能否找到它:

echo "int main(){ return 0;}" > /tmp/a.c && gcc /tmp/a.c -llzo2 -o /tmp/a.out 
/tmp/a.out

如果没报错就说明安装成功了。如果显示下面的消息则说明$LD_LIBRARY_PATH变量没有配置正确,请确定liblzo2.so.2所在目录并加入到$LD_LIBRARY_PATH中。

./a.out: error while loading shared libraries: liblzo2.so.2: cannot open shared object file: No such file or directory

Snappy

Snappy是Google出品的压缩库,OceanBase用它来压缩静态数据[可选]. 注意:Snappy依赖于lzo库,请先装lzo库再装Snappy。利用yum快速安装

sudo yum install Snappy.x86_64

如果yum找不到这个包,可以选择手动安装:

cd ~ 
wget -c http://snappy.googlecode.com/files/snappy-1.0.3.tar.gz
tar zxf snappy-*
(cd snappy-1.0.3; ./configure --prefix=/usr/ && make && sudo make install)

安装完成后你可以编译一个C程序看看编译器能否找到它:

echo "int main(){ return 0;}" > /tmp/a.c && gcc /tmp/a.c -o /tmp/a.out -lsnappy 
/tmp/a.out

如果没报错就说明安装成功了。如果显示下面的消息则说明$LD_LIBRARY_PATH变量没有配置正确,请确定liblzo2.so.2所在目录并加入到$LD_LIBRARY_PATH中。

./a.out: error while loading shared libraries: libsnappy.so.1: cannot open shared object file: No such file or directory

libnuma

Oceanbase中用到了NUMA支持,需要libnuma的支持。下面通过yum安装numactl来添加numa相关的头文件和库。

sudo yum install numactl-devel.x86_64

如果yum找不到这个包,可以选择手动安装:

cd ~ 
wget -c http://freshmeat.net/urls/5994b4dd6cf45abcf4c4ed8c16a75f24 # 如果该地址失效,请到http://freshmeat.net/projects/numactl/手工下载
tar zxf numactl-*
(cd numactl-2.0.7; make && sudo make install)

libaio

Oceanbase中用到了AIO,需要libaio的支持。下面通过yum安装libaio来添加numa相关的头文件和库。

sudo yum install libaio-devel.x86_64

如果yum找不到这个包,可以选择手动安装:

cd ~ 
wget -c http://libaio.sourcearchive.com/downloads/0.3.107-7/libaio_0.3.107.orig.tar.gz # 如果该地址失效,请到http://libaio.sourcearchive.com/手工下载
tar zxf libaio*
(cd libaio-0.3.107; make && sudo make install)

tbsys是对操作系统服务的封装,tbnet则提供了网络框架,OceanBase依赖于这两个库。 tbnet和tbsys被作为tb-common-utils被开源了, 可以访问 http://code.taobao.org/trac/tb-common-utils/wiki/ZhWikiStart 以了解更多情况。 注意,安装和使用tbnet和tbsys之前,要设置好 TBLIB_ROOT 这个环境变量,这个环境变量指示了安装tbnet和tbsys库的路径.

用如下命令下载源码并编译安装:

cd ~ 
export TBLIB_ROOT=$HOME/ob-install-dir
svn checkout http://code.taobao.org/svn/tb-common-utils/trunk/ tb-common-utils
(cd tb-common-utils; sh build.sh)

安装成功后, TBLIB_ROOT 所指示的目录下会有include和lib两个目录,可用如下的命令验证编译器能否找到库:

echo "int main(){ return 0;}" > /tmp/a.c && gcc /tmp/a.c -o /tmp/a.out -L$TBLIB_ROOT/lib -ltbnet -ltbsys 
/tmp/a.out

如果报错,检查 TBLIB_ROOT 是否设置正确了

gtest

可选。如果你执行./configure –without-test-case不编译OB的test,那么这一节可以忽略。如果你要编译test,本节内容仅供参考:新版gtest是不允许安 装的,gtest上的wiki有说到。建议./configure && make之后,直接:

cp -r gtest-build-dir/include/gtest ob-src-dir/include 
cp -r gtest-build-dir/lib/.libs ob-src-dir/lib

编译安装OceanBase

检出OB分支源代码:

cd ~ 
#开源后svn地址 svn co http://code.taobao.org/svn/oceanbase/trunk/ ob-src-dir
svn co http://svn.app.taobao.net/repos/oceanbase/branches/rm/oceanbase/ ob-src-dir

编译安装


(cd ob-src-dir; ./build.sh init && ./configure --prefix=$HOME/ob-install-dir --with-release --without-test-case && make -j2 && make install)

注意 –without-test-case表示不编译测试用例,因为OceanBase使用googletest作为测试框架,如果你想跑单元测试,需要把googletest的头文件和库放入到oceanbase源码顶层目录的include和lib目录。 安装完成后需要进行一次初始化,根据当前机器配置生成必要的初始化文件。执行single-machine-bootstrap脚本就可以完成全部初始化工作。

cd $HOME/ob-install-dir 
./single-machine-bootstrap init# 创建必要的目录,生成配置文件

一切初始化完成后系统目录如下图所示:

/
|--/usr/lib/
| |-- liblzo*.so.*
| |-- libsnappy*.so.*
| `-- ...
|
|--$HOME
|-- tb-common-utils
|-- ob-src-dir
| `- ...
|
`-- ob-install-dir
|-- single-machine-bootstrap
|-- include
|-- lib
|-- bin
|-- @etc
| |-- rootserver.conf
| |-- mergeserver.conf
| |-- chunkserver.conf
| |-- updateserver.conf
| `-- schema.ini
|
`-- @data
|-- ups_commitlog
|-- rs_commitlog
|-- ups_data
|-- log
|-- cs
`-- rs

启动OceanBase

在整个OceanBase集群中一共有四种角色:RootServer?,UpdateServer?,ChunkServer?和MergeServer:

RootServer是集群的中心控制结点

UpdateServer是集群的更新服务结点

ChunkServer是集群静态数据存储结点

MergeServer为查询服务结点。

应用程序使用OceanBase,需要通过客户端库,客户端只需要知道RootServer的地址即可。

在最简单的情况下,OceanBase由一个RootServer, 一个UpdateServer, 一个ChunkServer和一个MergeServer组成,这四个Server都运行在同一台物理机上。可以用如下的命令启动四个Server:

cd $HOME/ob-install-dir 
bin/rootserver -f etc/rootserver.conf
bin/updateserver -f etc/updateserver.conf
bin/mergeserver -f etc/mergeserver.conf
bin/chunkserver -f etc/chunkserver.conf

当然,OceanBase并不强制要求四个Server的启动顺序。

Server都作为daemon运行,可以用如下命令查看对应的log:

cd $HOME/ob-install-dir 
tail -f data/log/rootserver.log
tail -f data/log/updateserver.log
tail -f data/log/mergeserver.log
tail -f data/log/chunkserver.log

在成功启动OceanBase后,按照默认的配置认生成了一个名为test的表。这个表是典型的kv数据表,可以使用OceanBase提供的API读写这个表。 如有运行有问题,可以参考后面关于配置的更加详细的解释。

使用OceanBase

TODO

配置文件说明

OceanBase提供表格存储服务,所以首先要有一个schema文件描述表格,其次RootServer, UpdateServer?, ChunkServer?和MergeServer都有自己的配置文件。 四个Server的配置文件是在启动Server时通过命令行参数指定的,schema文件的路径是在RootServer的配置文件中指定的。

修改数据库schema配置文件

一个schema配置文件描述一个应用,一个应用可以有多个表格,配置文件中要指定应用的名字,及每个表的名字,每一列的名字,类型等信息。 详细的描述参见源码包的文档: doc/OceanBase的schema.docx

[app_name] 
name = 数据库应用名称
max_table_id = 应用的最大数据表ID

[数据表1名称]
table_id = 数据表1的ID
...其他字段含义要参考OB文档...
compress_func_name=lzo_1.0
column_info=1,2,info_user_nick,varchar,128
....

[数据表2名称]
table_id = 数据表2的ID
compress_func_name=lzo_1.0
...

修改 rootserver.conf

RootServer?的配置主要指定自己的地址及UpdateServer的地址,Schema文件的路径等。

修改 updateserver.conf

UpdateServer?的配置主要指定自己的地址及RootServer的地址, 数据的存储目录等信息。

 [root_server] 
pid_file = rootserver的pid文件路径
log_file = rootserver的运行日志文件路径
data_dir = rootserver的持久化数据目录

log_level = rootserver的日志级别
dev_name = rootserver监听的网卡名称,如eth0
vip = rootserver的VIP设备地址,用来实现热备,开发环境中只需要单rootserver,这里指定为rootserver地址即可
port = rootserver的监听端口

__create_table_in_init=1 # 在系统初始化时建立表
__safe_copy_count_in_init=1 # 防止在只有1个chunkserver时产生warn信息
__safe_copy_count_in_merge=1 #

[update_server]
vip = updateserver的VIP设备地址,用来实现热备,因为rootserver是主动连接updateserver的。开发环境中只需要单updateserver,这里指定为updateserver地址即可
port = updateserver的监听端口,以便rootserver连接
ups_inner_port=updateserver的低优先级监听端口,以用于每日合并

[schema]
file_name = 数据库schema配置文件路径

关于UpdateServer的数据目录结构

store_root, raid_regex和dir_regex 共同指定了UpdateServer的数据目录,UpdateServer?以 sstable的方式保存数据。在 store_root 项指定的目录下建立多个与 raid_regex 配置项匹配的目录, 目前默认的目录名是这样的raid1 raid2 raid3 ….,同一个sstable文件会在一个raid目录产生多份拷贝,在上述每个raid目录下建立多个与 dir_regex 配置项匹配的软链接,目前默认的目录名是这样的store1 store2 store3… 分别指向不同设备挂载点下的目录(如 /data/1-1/ups_store /data/1-2/ups_store… ), 在测试时我们可以使用普通的目录代替挂载点。

因此建立好的环境用tree命令看是这样的:

data
|-- raid1
| |-- store1 -> /data/1-1/ups_store/
| |-- store2 -> /data/1-2/ups_store/
| |-- store3 -> /data/1-3/ups_store/
| |-- store4 -> /data/1-4/ups_store/
| `-- store5 -> /data/1-5/ups_store/
`-- raid2
|-- store1 -> /data/2-1/ups_store/
|-- store2 -> /data/2-2/ups_store/
|-- store3 -> /data/2-3/ups_store/
|-- store4 -> /data/2-4/ups_store/
`-- store5 -> /data/2-5/ups_store/

可用如下的命令建立目录和链接

mkdir -p /data/{raid{1..2},{1..2}-{1..5}/ups_store} for i in {1..2}; do 
for j in {1..5}; do
ln -s /data/$i-$j/ups_store /data/raid$i/store$j; # 注意这里建立软链接时最好使用绝对路径
done
done

修改 mergeserver.conf

MergerServer?的配置主要指定RootServer的地址等。

 [merge_server] 
port = mergeserver监听端口
dev_name = mergeserver监听网卡名称,如eth0
log_file = mergeserver的运行日志文件路径
pid_file = mergesever的pid文件路径
log_level = mergeserver的日志级别

[root_server]
vip = rootserver的VIP设备地址,开发环境中只要指定为rootserver地址即可
port = rootserver的监听端口

修改 chunkserver.conf

ChunkServer?的配置主要指定RootServer的地址, 数据存储目录等。

[public] 
pid_fie = chunkserver的运行日志文件路径
log_file = chunkserver的pid文件路径
log_level = chunkserver的日志级别

[chunkserver]
dev_name = chunkserver的监听网卡名称,如eth0
port = chunkserver的监听端口
datadir_path = chunkserver数据持久化目录的路径
application_name = 数据库应用名称
[root_server]
vip = rootserver的VIP设备地址,开发环境中只要指定为rootserver地址即可
port = rootserver监听端口

chunkserver的数据放在 /datadir_path/$i/application_name/sstable 下, 并且由于该目录并不存在因此需要建立对应的目录

  mkdir -p /datadir_path/{1..10}/application_name/sstable
   
次浏览       
相关文章

基于EA的数据库建模
数据流建模(EA指南)
“数据湖”:概念、特征、架构与案例
在线商城数据库系统设计 思路+效果
 
相关文档

Greenplum数据库基础培训
MySQL5.1性能优化方案
某电商数据中台架构实践
MySQL高扩展架构设计
相关课程

数据治理、数据架构及数据标准
MongoDB实战课程
并发、大容量、高性能数据库设计与优化
PostgreSQL数据库实战培训
最新活动计划
LLM大模型应用与项目构建 12-26[特惠]
QT应用开发 11-21[线上]
C++高级编程 11-27[北京]
业务建模&领域驱动设计 11-15[北京]
用户研究与用户建模 11-21[北京]
SysML和EA进行系统设计建模 11-28[北京]

MySQL索引背后的数据结构
MySQL性能调优与架构设计
SQL Server数据库备份与恢复
让数据库飞起来 10大DB2优化
oracle的临时表空间写满磁盘
数据库的跨平台设计
更多...   

并发、大容量、高性能数据库
高级数据库架构设计师
Hadoop原理与实践
Oracle 数据仓库
数据仓库和数据挖掘
Oracle数据库开发与管理

GE 区块链技术与实现培训
航天科工某子公司 Nodejs高级应用开发
中盛益华 卓越管理者必须具备的五项能力
某信息技术公司 Python培训
某博彩IT系统厂商 易用性测试与评估
中国邮储银行 测试成熟度模型集成(TMMI)
中物院 产品经理与产品管理
更多...