淘宝开源数据库OceanBase编译、安装和配置手册

简介:

概述

    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)

tbnet和tbsys

    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:

    应用程序使用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
原文出处:http://www.mysqlops.com/2011/08/31/oceanbase-install.html
目录
相关文章
|
7天前
|
存储 关系型数据库 分布式数据库
PolarDB 开源基础教程系列 8 数据库生态
PolarDB是一款开源的云原生分布式数据库,源自阿里云商业产品。为降低使用门槛,PolarDB携手伙伴打造了完整的开源生态,涵盖操作系统、芯片、存储、集成管控、监控、审计、开发者工具、数据同步、超融合计算、ISV软件、开源插件、人才培养、社区合作及大型用户合作等领域。通过这些合作伙伴,PolarDB提供了丰富的功能和服务,支持多种硬件和软件环境,满足不同用户的需求。更多信息请访问[PolarDB开源官方网站](https://openpolardb.com/home)。
40 4
|
1月前
|
SQL 存储 监控
obdiag:一款OceanBase 数据库诊断的利器
本次分享的主题是obdiag:一款 OceanBase 数据库诊断的利器,由蚂蚁集团 OceanBase 技术专家汤庆分享。主要分为四个部分: 1. OceanBase 概述 2. Obdiag 项目价值 3. Obdiag 设计与实现 4. Obdiag 未来规划
50 14
|
3月前
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
4月前
|
SQL 存储 人工智能
OceanBase CTO杨传辉谈AI时代下数据库技术的创新演进路径!
在「DATA+AI」见解论坛上,OceanBase CTO杨传辉先生分享了AI与数据库技术融合的最新进展。他探讨了AI如何助力数据库技术演进,并介绍了OceanBase一体化数据库的创新。OceanBase通过单机分布式一体化架构,实现了从小规模到大规模的无缝扩展,具备高可用性和高效的数据处理能力。此外,OceanBase还实现了交易处理、分析和AI的一体化,大幅提升了系统的灵活性和性能。杨传辉强调,OceanBase的目标是成为一套能满足80%工作负载需求的系统,推动AI技术在各行各业的广泛应用。关注我们,深入了解AI与大数据的未来!
OceanBase CTO杨传辉谈AI时代下数据库技术的创新演进路径!
|
3月前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
296 4
|
4月前
|
存储 JSON Ubuntu
时序数据库 TDengine 支持集成开源的物联网平台 ThingsBoard
本文介绍了如何结合 Thingsboard 和 TDengine 实现设备管理和数据存储。Thingsboard 中的“设备配置”与 TDengine 中的超级表相对应,每个设备对应一个子表。通过创建设备配置和设备,实现数据的自动存储和管理。具体操作包括创建设备配置、添加设备、写入数据,并展示了车辆实时定位追踪和车队维护预警两个应用场景。
144 3
|
4月前
|
SQL JSON 关系型数据库
MySQL是一个广泛使用的开源关系型数据库管理系统,它有许多不同的版本
【10月更文挑战第3天】MySQL是一个广泛使用的开源关系型数据库管理系统,它有许多不同的版本
288 5
|
4月前
|
关系型数据库 分布式数据库 数据库
PolarDB 开源:推动数据库技术新变革
在数字化时代,数据成为核心资产,数据库的性能和可靠性至关重要。阿里云的PolarDB作为新一代云原生数据库,凭借卓越性能和创新技术脱颖而出。其开源不仅让开发者深入了解内部架构,还促进了数据库生态共建,提升了稳定性与可靠性。PolarDB采用云原生架构,支持快速弹性扩展和高并发访问,具备强大的事务处理能力及数据一致性保证,并且与多种应用无缝兼容。开源PolarDB为国内数据库产业注入新活力,打破国外垄断,推动国产数据库崛起,降低企业成本与风险。未来,PolarDB将在生态建设中持续壮大,助力企业数字化转型。
191 2
|
5月前
|
关系型数据库 分布式数据库 数据库
开源云原生数据库PolarDB PostgreSQL 15兼容版本正式发布
PolarDB进行了深度的内核优化,从而实现以更低的成本提供商业数据库的性能。
|
6月前
|
Oracle 关系型数据库 MySQL
OceanBase 与传统数据库的对比
【8月更文第31天】随着云计算和大数据技术的发展,分布式数据库因其高扩展性、高可用性和高性能而逐渐成为企业和开发者关注的焦点。在众多分布式数据库解决方案中,OceanBase作为一个由阿里巴巴集团自主研发的分布式数据库系统,以其独特的架构设计和卓越的性能表现脱颖而出。本文将深入探讨OceanBase与其他常见关系型数据库管理系统(如MySQL、Oracle)之间的关键差异,并通过具体的代码示例来展示这些差异。
581 1

热门文章

最新文章