Tair 是阿里巴巴开源的,可提供快速访问的内存(MDB引擎)/持久化(LDB引擎)存储服务,基于高性能、高可用的分布式集群架构,满足读写性能要求高及容量可弹性伸缩的业务需求。
近期需要研究一下该中间件,搭建了一下单机环境,整体流程如下。
搭建所需服务器环境:
- Centos6 环境的Linux服务器
- tbsys & tbnet
- git & svn
- yum
- tair master
第一步: 前期环境准备
yum install boost
yum install boost-devel
yum install boost-doc
yum install automake
yun install autoconfig
yun install libtool
yum install zlib-devel
yum install gcc gcc++
yum install gcc gcc-c++ gcc-g77
yum install openssl-devel libcurl-devel
yum install subversion
yum install git
第二步: 安装 tbsys & tbnet
由于tair的实现用到了底层库 tbsys 和 tbnet,因此在安装tair之前需要先安装依赖库 tbsys 和 tbnet。
网上教程是从淘宝的SVN中checkout代码,但我无法成功下载SVN代码,所以转而从git下载。
svn checkout http://code.taobao.org/svn/tb-common-utils/trunk/tb-common-utils // 无效
git clone https://github.com/raywill/tb-common-utils // 可下载
设置环境变量 TBLIB_ROOT
取得源代码后, 先指定环境变量 TBLIB_ROOT 为需要安装的目录. 这个环境变量在后续 tair 的编译安装中仍旧会被使用到.
vi /etc/profile
export TBLIB_ROOT=your path
# 使修改的环境变量生效
source /etc/profile
设置 头文件路径
因为tbnet和tbsys在两个不同的目录,但它们的源码文件里头文件的互相引用却没有加绝对或相对路径,将两个目录的源码加入到C++环境变量中即可。
vi /etc/profile
CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/home/tair/tair/tb-common-utils/tbsys/src:/home/tair/tair/tb-common-utils/tbnet/src
export CPLUS_INCLUDE_PATH
# 使修改的环境变量生效
source /etc/profile
其中 tbsys 和 tbnet 的地址是上面下载代码的地址,请根据实际情况配置
之后进行安装,进入源代码目录,执行 build.sh 进行安装。
第三步: 下载tair代码,并编译
# 从git下载代码
git clone https://github.com/alibaba/tair.git
# 编译依赖
./bootstrap.sh
# 检测和生成 Makefile (默认安装位置是 ~/tair_bin, 修改使用 --prefix=目标目录)
./configure
# 编译和安装到目标目录
make
make install
注意: 在官方文档中,使用的是 make -j && make install,但我试验过,这样安装会报错,分开则没问题。
此外,在执行 ./bootstrap.sh ./configure 中如果有error异常,请把第一步中所有yum install 都执行一遍。
make 完成后,会在home目录下有一个 tair_bin的目录生成,则表示安装完成。
第四步:Tair 最小化配置方法
下面以MDB引擎为例配置一个最小化的Tair集群(1 * ConfigServer + 1 * DataServer)
MDB 引擎默认使用共享内存,所以需要查看并设置系统的tmpfs的大小:
# 这里根据实际机器内存情况配置,必须大于Tair使用内存的配置
cat /etc/fstab | grep /dev/shm
上述命令如果没有结果,则需要设置 /dev/shm
vi /etc/fstab
添加下面一行到 fstab文件中
tmpfs /dev/shm tmpfs rw,size=1G 0 0
执行 mount -o remount /dev/shm
如果执行下面的命令出现如下结果,表示修改完成
df -h | grep /dev/shm
tmpfs 1.0G 0 1.0G 0% /dev/shm
tair 的包中有一个 set_shm.sh, 按照官方文档的说法,也是可以设置的,但我试过,没有成功。
修改 如下三份配置文件
cp etc/configserver.conf.default etc/configserver.conf
cp etc/group.conf.default etc/group.conf
cp etc/dataserver.conf.default etc/dataserver.conf
修改里面的内容
configserver.conf
[public]
config_server=ip:5198
group.conf
[group_test]
# data center A
_server_list=ip:5191
dataserver.conf
[public]
config_server=ip:5198
[tairserver]
mdb_inst_shift=0
process_thread_num=4
io_thread_num=4
slab_mem_size=512
注意在CentOS 7下,安装目录下的 tair.sh 启动脚本有一行代码需要修改, diff如下
--- a/tair.sh
+++ b/tair.sh
@@ -52,7 +52,7 @@ check_shm_size()
if [ $engine == "mdb" ]
then
safety_free_size=500;
- tmpfs_size=`df -m |grep tmpfs | awk '{print $2}'`
+ tmpfs_size=`df -m |grep /dev/shm | awk '{print $2}'`
let "safety_size = $tmpfs_size - $safety_free_size"
slab_mem_size=`grep slab_mem_size $1 | grep -v "#" | awk -F '[ =]' '{print $NF}'`
执行如下命令,开始启动
./tair.sh start_ds // 启动数据节点
./tair.sh start_cs // 启动config节点
注意,我用默认的 tair.sh 启动时,会出现 数据节点无法启动,conifg节点启动的情况
在将 tair.sh 中的相对路径改为绝对路径,在清空core.****, /dump, /data, /logs, /dev/shm 之后,再运行上面的命令,就可以正常启动。
连接tair
./sbin/tairclient -c ip -g group_test
效果如下图所示:
至此,一个基于单服务器的单配置节点,单数据节点的Tair服务就完成了。