Alibaba的OceanBase数据库环境配置与安装

声明:我参考github上面的OB官方文档来配置本地的OB环境,因为已经拥有集群,所以我只安装了OB数据库和C客户端,并没有搭建服务器。网站如下:https://github.com/alibaba/oceanbase/tree/master/oceanbase_0.4

一、系统环境

CentOs 6.5
g++ 4. 1.2

二、准备安装环境

在安装OceanBase前,请先根据磁盘规划和服务器规划,在各服务器中分别完成修改操作系统配置、创建安装用户、检查gcc版本、配置环境变量和创建数据磁盘挂载点,否则会造成安装失败。
2.1 修改操作系统配置
为保证OceanBase正常安装,我们需要对所有OceanBase服务器进行设置网卡名称、配置“sysctl.conf”和配置NTP时钟同步等操作。
2.1.1 设置网卡名称
采用RPM包安装时,需要配置和使用一键脚本,要求各Server服务启动的网卡名称必须相同。
采用源码安装时,您可以使用ifconfig命令查看并记录网卡名称,并在启动OceanBase各Server时通过“-i”参数进行指定,但是为了便于管理和记忆,建议您修改成相同网卡名称。
所有OceanBase服务器的网卡名称设置为“eth0”的操作步骤如下:
以root用户登录各OceanBase服务器。
使用vi编辑器,修改“/etc/udev/rules.d/70-persistent-net.rules”文件。

SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?“, ATTR{address}==”08:00:27:9e:ee:33”, ATTR{type}==”1”, KERNEL==”eth“, NAME=”eth0

使用vi编辑器,修改“/etc/sysconfig/network-scripts/ifcfg-eth0”文件。

DEVICE=”eth0
BOOTPROTO=static
NM_CONTROLLED=”yes”
ONBOOT=”yes”
TYPE=Ethernet
NETMASK=255.255.255.0
IPADDR=10.10.10.2

执行reboot命令,重新启动服务器。
执行ifconfig命令,查看网卡名称。

2.1.2 配置“sysctl.conf”
为保证OceanBase正常运行,请在安装OceanBase前修改“sysctl.conf”配置。
所有OceanBase服务器的“sysctl.conf”配置过程如下:
以root用户登录各OceanBase服务器。
使用vi编辑器,在“/etc/sysctl.conf”文件末尾添加以下内容。

net.core.somaxconn = 2048
net.core.netdev_max_backlog = 10000
net.core.rmem_default = 16777216
net.core.wmem_default = 16777216
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

net.ipv4.ip_local_port_range = 3500 65535
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

vm.swappiness = 0

执行以下命令,使修改配置生效。
/sbin/sysctl -p /etc/sysctl.conf

2.2 创建安装用户

在所有OceanBase服务器中,创建OceanBase安装用户的操作步骤如下:
以root用户分别登录各OceanBase服务器。
执行如下命令,创建OceanBase的安装用户。
useradd -d /home/admin -s /bin/bash -m admin
执行如下命令,为用户“admin”设置密码。
passwd admin
您需要根据系统的提示输入两次密码“Abc@123”。
为“admin”赋予“sudo”权限。
a. 执行以下命令,添加“/etc/sudoers”文件的写权限。
chmod u+w /etc/sudoers
b. 使用vi编辑器,在“/etc/sudoers”文件中“root ALL=(ALL) ALL”后添加语句,如黑体部分所示。

  root ALL=(ALL) ALL
admin ALL=(ALL) ALL

c. 执行以下命令,删除“/etc/sudoers”文件的写权限。
chmod u-w /etc/sudoers

2.3 检查gcc版本

Red Hat 5:gcc 4.1.2
Red Hat 6:gcc 4.1.2或者gcc 4.4.6
说明:您可以执行cat /etc/issue命令查看Linux版本号。
如果您的gcc版本不符合要求,请参考本手册的“9.2 安装gcc 4.1.2”重新安装。
检查gcc版本的操作步骤如下:
以root用户分别登录各OceanBase服务器。
执行gcc –version命令,检查gcc版本,系统显示如下。

gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-51)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

2.4 配置环境变量

OceanBase在运行时需要使用到动态库,因此安装OceanBase前需要配置环境变量,操作步骤如下:
以admin用户分别登录各OceanBase服务器。
用vi编辑器在“/home/admin/.bashrc”文件中,添加如下语句:
说明:拷贝添加以下语句时,请删除#后的注释语句。其中“/home/admin/ocaenbase”为安装目录,“/opt/taobao/java”为Java安装目录。
export TBLIB_ROOT=~/tb-common-utils
export LD_LIBRARY_PATH=/home/admin/oceanbase/lib:/usr/local/lib/libsnappy.so:/usr/:/usr/lib/:/usr/local/lib:/lib: TBLIBROOT/lib:/usr/local/lib64exportEASYROOT=/usrexportEASYLIBPATH= EASY_ROOT/lib64
export JAVA_HOME=/opt/taobao/java
export DRC_ROOT=/home/ds

执行**so**urce ~/.bashrc命令让环境变量配置生效。

2.5 配置免登录
在OceanBase的安装服务器中选择一台作为本机,配置该服务器到所有安装服务器的免登录(包括本机到本机)。配置免登录后,该服务器在连接其他服务器时,无需输入密码。
* 配置过程
假设本机的IP为“10.10.10.2”,配置免登录的操作步骤如下:
以admin用户登录本机(10.10.10.2)。
执行以下命令,并按“Enter”键,直至生成公钥。
ssh-keygen -t rsa
执行以下命令,并根据提示输入登录密码,配置免登录。
ssh-copy-id [email protected]

  • 验证
    配置免登录完成后,在本机中输入“ssh [email protected]”。
    如果无需输入密码,则表示配置免登录成功。
    如果仍需要输入密码,则请重新配置免登录。

三、采用RPM包安装

3.1 下载安装包
下载OceanBase安装包的操作步骤如下:
以admin用户分别登录各OceanBase服务器。
执行以下命令,下载OceanBase安装包。
git clone https://github.com/alibaba/oceanbase_rpm_package ~/oceanbase_install

(需要安装git,见附)

3.2 安装动态库
安装“LZO”和“Snappy”的操作步骤如下:
以admin用户分别登录各OceanBase服务器。
执行以下命令,进入依赖包目录。
cd ~/oceanbase_install/Lib
依次执行以下命令,安装“LZO”和“Snappy”。
sudo rpm -ivh lzo-2.06-0.x86_64.rpm
sudo rpm -ivh snappy-1.1.2-2.x86_64.rpm
3.3 安装OceanBase软件
安装OceanBase软件操作步骤如下:
以admin用户分别登录各OceanBase服务器。
执行以下命令,进入安装包目录。
cd ~/oceanbase_install/Package
执行以下命令,安装OceanBase。
sudo rpm –nodeps -ivh oceanbase-0.4.2.8-1502.el6.x86_64.rpm –prefix=/home/admin/oceanbase

四、安装OceanBase C客户端

4.1安装
安装OceanBase C客户端的操作步骤如下:
以admin用户登录本地计算机。
执行以下命令,下载OceanBase C客户端安装包。
wget https://github.com/twlkyao/oceanbase_client/tree/master/C/curl-7.29.0-1.el6.x86_64.rpm
wget https://github.com/twlkyao/oceanbase_client/tree/master/C/oceanbase-devel-0.4.2.1-1193.el6.x86_64.rpm
(此链接不为官方链接,官方的已经404,若显示包损坏,直接进链接点击下载安装)

执行以下命令,安装依赖库curl。
sudo rpm -Uvh curl-7.29.0-1.el6.x86_64.rpm
执行以下命令,安装OceanBase C客户端。
sudo rpm -Uvh oceanbase-devel-0.4.2.1-1193.el6.x86_64.rpm
使用vi编辑器在“~/.bashrc”文件中添加以下内容。

export LD_PRELOAD=/home/admin/oceanbase/lib/libobsql.so.0.0.0
export OB_SQL_CONFIG_DIR=/home/admin/oceanbase/etc/

执行以下命令,使环境变量生效。
source ~/.bashrc
使用vi编辑器修改“~/oceanbase/etc/libobsql.conf”文件,参数说明如表3-1所示。

logfile=/tmp/obsql.log
initurl=http://10.232.102.182:8080/diamond-server/config.co?dataId=197
loglevel=DEBUG
minconn=2
maxconn=50

ip=10.10.10.2

port=2828

username=admin
passwd=admin
Alibaba的OceanBase数据库环境配置与安装_第1张图片

4.2访问方式
主要通过一个示例介绍如何使用OceanBase C客户端连接OceanBase。
* 前提条件
OceanBase主备集群已经安装且正常运行。
配置“__all_cluster”中主备集群的流量分配“cluster_flow_percent”,主集群为“0”,备集群为“100”。
C开发环境已经部署完成,如已安装g++,gcc等。
客户端服务器用户:admin
* 案例操作流程
编写一段C程序,使用OceanBase C客户端进行如下操作:
连接OceanBase数据库。
创建表“test”:c1列为主键,int类型;c2列为varchar类型。
插入两行数据“1”、“ hello ob”和“2”、“hello java”。
查询表“test”内容。
删除表“test”。
* 预期结果
根据客户端特性,create table、insert和drop table在主集群中执行,select操作在备集群中执行。
* 示例
编写一段SQL的C代码,保存为“test.c”文件,并上传至客户端服务器的“/home/sqluser”目录。
说明:API的完整说明请参考《MySQL C API文档》。

#include  
#include 
#include 
#include   //注意,此处为“mysql.h” 
int main(int argc, char *argv[])
 {    
    (void)argc;
    (void)argv;
    const char* HOST = "127.0.0.1";
    int PORT = 2828; 

    // 1. 初始化libmysqlclient   
    if (0 != mysql_library_init(0, NULL, NULL))
    {
      fprintf(stderr, "could not init mysql library\n");
      exit(1);
    }
    MYSQL my_;
    mysql_init(&my_);

    // 2. 连接OceanBase SQL服务  
    fprintf(stderr, "Connecting server %s:%d...\n", HOST, PORT);
    mysql_real_connect(&my_, HOST, "admin", "admin", "", PORT, NULL, 0);

    // 3. 建表  
    int ret = 0;
    ret = mysql_query(&my_, "drop table if exists test");
    if (0 != ret)
    { 
       fprintf(stderr, "%sn", mysql_error(&my_));
    }
    ret = mysql_query(&my_, "create table if not exists test (c1 int primary key, c2 varchar)");
    if (0 != ret)
    {
       fprintf(stderr, "%sn", mysql_error(&my_));
    }

    //建表后预留用于主备同步的时间。
    sleep(60); 

    //4. 插入数据  
    ret = mysql_query(&my_, "insert into test (c1, c2) values (1, 'hello ob'), (2, 'hello java')");
    if (0 != ret)
    {
       fprintf(stderr, "%sn", mysql_error(&my_));
    }

    // 5. 查询数据  
    ret = mysql_query(&my_, "select * from test");  
    if (0 != ret)
    {
       fprintf(stderr, "%sn", mysql_error(&my_));
    }
    MYSQL_RES *result = mysql_store_result(&my_);

    // 6. 删表  
    ret = mysql_query(&my_, "drop table if exists test");
    if (0 != ret)
    { 
     fprintf(stderr, "%sn", mysql_error(&my_));
    }

   // 7. destroy
    mysql_close(&my_);
    mysql_library_end();
    return 0;
  } 

以admin用户登录客户端服务器。
执行以下命令,编译“test.c”。
g++ test.c -o atest -I /usr/include -L /usr/lib64/mysql -lmysqlclient
执行以下命令,运行“test.c”。
./atest
分别登录主备集群中安装MergeServer的服务器,查看MergeServer的日志文件“/home/admin/oceanbase/log/mergeserver.log”。
如果出现如下日志,则说明客户端运行正常。
主集群
[2013-06-08 10:51:16.467612] INFO ob_mysql_server.cpp:1054 [139693026940672] start query: “create table test (c1 int primary
key, c2 varchar)” real_query_len=50, peer=10.14.19.17:53472
[2013-06-08 10:52:16.764349] INFO ob_mysql_server.cpp:1054 [139693440083712] start query: “insert into test values (1, ‘hell
o ob’), (2, ‘hello java’)” real_query_len=58, peer=10.14.19.17:53472
[2013-06-08 10:52:16.810628] INFO ob_mysql_server.cpp:1054 [139693062612736] start query: “drop table test” real_query_le
n=15, peer=10.14.19.17:53472
备集群
[2013-06-08 10:52:16.797199] INFO ob_mysql_server.cpp:1056 [140177548736256] start query: “select * from test” real_query_l
en=18, peer=10.14.19.17:53527

附录:

一 g++4.1.2安装

安装gcc 4.1.2的操作步骤如下:
以root用户登录OceanBase服务器。
执行以下命令,查看是否安装“makeinfo”。
makeinfo –version
已安装,则记录版本号,然后执行“步骤3”。
未安装,则执行yum install texinfo命令,安装“makeinfo”。
执行以下命令,下载“gcc-4.1.2.tar.bz2”。
wget ftp://ftp.gnu.org/gnu/gcc/gcc-4.1.2/gcc-4.1.2.tar.bz2
执行以下命令,解压缩“gcc-4.1.2.tar.bz2”。
tar -xvf gcc-4.1.2.tar.bz2
执行以下命令,进入“gcc-4.1.2”目录。
cd gcc-4.1.2
使用vi编辑器,修改“configure”文件。如果您的“makeinfo”的版本在“4.2-4.9”之间,则跳过此步骤。

if ${MAKEINFO} –version \
| egrep ‘texinfo[^0-9]*([1-3][0-9]|4.[2-9]|[5-9])’ >/dev/null 2>&1;

“makeinfo”的版本为“4.13”,则将粗体部分修改为以下内容:
‘texinfo[^0-9]([1-3][0-9]|4.[4-9]|4.[1-9][0-9]|[5-9])’
“makeinfo”为其他版本,则将粗体部分修改为以下内容:
‘texinfo[^0-9]([1-3][0-9]|4.[2-9]|4.[1-9][0-9]|[5-9])’

小窍门:您可以在vi里使用/texinfo[^0-9]快速定位上面两行。
执行以下命令编译gcc 4.1.2。
./configure –prefix=/usr/local/gcc-4.1.2&& make

(安装gcc 4.1.2时,编译报错:
/usr/include/gnu/stubs.h:7:27: 错误:gnu/stubs-32.h:没有那个文件或目录
* 可能原因
glibc-devel没有安装。
* 处理方法
安装glibc-devel,详细操作步骤如下:
以root用户登录OceanBase服务器。
执行以下命令,安装glibc-devel。
执行以下命令
yum install glibc-devel.i686

安装gcc 4.1.2。
make install
执行以下命令,进入“/usr/bin”目录。
cd /usr/bin
依次执行以下命令,删除原有的gcc链接文件。
rm –rf gcc
rm –rf g++
依次执行以下命令,建立gcc 4.1.2的链接。
ln -s /usr/local/gcc-4.1.2/bin/gcc /usr/bin/gcc
ln -s /usr/local/gcc-4.1.2/bin/g++ /usr/bin/g++
执行以下命令,查看gcc版本。
gcc –v

二、git安装
执行下面指令安装:
yum -y install git
检查版本
git –version

你可能感兴趣的:(Linux)