Cockroach Labs公司的CockroachDB(简称CRDB)是一款适合于海量数据环境下高并发OLTP和OLAP场景的开源分布式NewSQL/HTAP数据库。它采用了新的架构和设计、新的分布式理论和算法,吸收了关系型数据库和NoSQL数据库各自的优点,无需应用级的分库分表,具有SQL模型的简单易用、水平弹性扩展、支持强一致性分布事务、异地多活的高可用、云原生等一系列特点。
“外部易用性”是CRDB的核心设计理念之一,它的所有功能都封装在一个二进制可执行程序文件中,可以做到最小化设置和没有外部依赖的简单、直接部署。
我们可以非常简单地在Linux、Mac OS、Windows等多种操作系统环境下运行它;此外,CRDB还能够非常方便的在Docker和Kubernetes下运行。
CRDB支持标准X86/X86-64架构,一个数据库集群可以从一台服务器扩展到上千台。同时也能完美支持ARM-64架构。我们已经在国产飞腾-麒麟平台上(飞腾ARM CPU+银河麒麟Linux操作系统—Kylin 4.0.2 GNU/Linux 4.4.58)通过测试和验证。
本文将和大家分享如何基于开源CockroachDB实现对ARM-64架构支持的方法和步骤。
编译环境说明
本文以CockroachDB 2.1.3版本的源码为例说明一般的编译方法以及编译ARM-64版本的方法。环境如下:
一、一个虚拟机(X86_64,4vCores/8G Mem,20G本地存储)
二、操作系统:Ubuntu16.04 LTS
三、需要的软件组件:
git
ncurses
gcc-6.x 、gcc++-6.x
make、cmake 3.8.1
go 1.10.7
docker
nodeJS、yarn
编译环境安装和配置
一、安装操作系统
只需要安装基本的Ubuntu 16.04 LTS即可,需要的包可以根据需要再随后安装:
关于虚拟机的创建(比如使用VMware或VisualBox)和在虚拟机中安装Ubuntu Linux这里从略,不清楚的可以搜索相应的介绍文章。
在安装完Ubuntu之后,创建的用户在sudo的时候提示需要输入口令。我们以使用如下方法进行修改,使得用户sudo时免口令提示(假设用户名为crdb):sudo vi etc/sudoers
在文件中增加:crdb ALL=(ALL)NOPASSWD:ALL
保存文件退出vi,然后重新登录后起作用。
二、安装git
sudo apt-get update
sudo apt-get install git #安装git 2.7.4
三、安装ncurses
sudo apt-get install libncurses5-dev
四、安装gcc-6.x和g++-6.x
sudo apt-get update
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-6 g++-6
cd usr/bin
sudo ln -s x86_64-linux-gnu-gcc-6 gcc
sudo ln -s x86_64-linux-gnu-gcc-ar-6 gcc-ar
sudo ln -s x86_64-linux-gnu-gcc-nm-6 gcc-nm
sudo ln -s x86_64-linux-gnu-gcc-ranlib-6 gcc-ranlib
sudo ln -s x86_64-linux-gnu-g++-6 g++
五、安装cmake 3.8.1
cd tmp
wget https://cmake.org/files/v3.8/cmake-3.8.1-Linux-x86_64.sh
chmod +x cmake-3.8.1-Linux-x86_64.sh
sudo bash cmake-3.8.1-Linux-x86_64.sh
sudo mv cmake-3.8.1-Linux-x86_64/ opt
sudo ln -s opt/cmake-3.8.1-Linux-x86_64/bin/cmake usr/local/bin/cmake
cmake --version
六、安装make
sudo apt-get install make #make 4.1
七、安装autoconf
sudo apt-get install autoconf #autoconf 2.69-9
八、安装golang 1.10.7
cd tmp
wget https://dl.google.com/go/go1.10.7.linux-amd64.tar.gz
sudo tar -C usr/local -xzvf go1.10.7.linux-amd64.tar.gz
vi .profile
增加如下:
PATH="$HOME/bin:$HOME/.local/bin:$PATH:/usr/local/go/bin"
九、安装node js 6.x
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install nodejs=6.16.0-1nodesource1
十、安装yarn
wget https://github.com/yarnpkg/yarn/releases/download/v1.7.0/yarn_1.7.0_all.deb
sudo dpkg -i yarn_1.7.0_all.deb
检查安装之后的版本:
nodejs -v
yarn -v
十一、安装Docker
参考:
https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-using-the-repository
#设置repository
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install docker-ce=17.06.2~ce-0~ubuntu
# 验证安装的docker是否正常
sudo docker run hello-world
编译X86-64 Linux下运行的CockroachDB
一、 获得CockroachDB源码
cd/home/crdb
mkdir -p cockroach-master/src/github.com/cockroachdb/
cd cockroach-master/src/github.com/cockroachdb/
git clone https://github.com/cockroachdb/cockroach.git
cd cockroach
git checkout v2.1.3 #以cockroachdb 2.1.3为例
二、 编译构建
cd/home/crdb/cockroach-master/src/github.com/cockroachdb/cockroach
make build
如果只编译开源版本的功能,执行:
make buildoss
编译ARM-64 Linux下运行的CockroachDB
cd/home/crdb/cockroach-master/src/github.com/cockroachdb/cockroach
#启动cockroach构建容器,如果本地镜像不存在会下载。
./build/builder.sh pull
#构建ARM-64 Linux下运行的版本
./build/builder.sh mkreleasearm64-linux-gnueabi
说明:
CockroachDB在builder容器中已经提供了交叉编译环境,支持的目标平台包括:
# - amd64-linux-gnu:amd64, Linux 2.6.32, dynamically linkglibc 2.12.2
# - arm64-linux-gnueabi: arm64,Linux 3.7.10, dynamically link glibc 2.12.2
# - amd64-windows: amd64, Windows 8, statically link all non-Windows libraries
编译成功后,会在/home/crdb/cockroach-master/src/github.com/cockroachdb/cockroach目录下生成编译好的二进制执行程序cockroach-linux-3.7.10-gnu-aarch64
在aarch64(arm-64)仿真环境下测试
这里假设用户的已经安装好Ubuntu 16.04 LTS操作系统。下面是具体的步骤:
一、安装Docker
具体方法参见前面的内容,这里从略。
二、安装QEMU
sudo apt-get install qemu-user-static
三、启动仿真环境容器
docker run -it ericvh/arm64-ubuntu-dev /bin/bash
四、启动成功后进入容器内部,执行测试:
#把编译好的ARM-64版本的可执行程序拷贝到仿真容器中,container-id是仿真容器的id
docker cp cockroach-linux-3.7.10-gnu-aarch64container-id:/usr/local/bin/cockroach
docker exec -it <container-id> /bin/bash
uname -m
cockroach sql –help
cockroach start –insecure #启动单节点cockroachdb
cockroach sql –insecure #启动crdb的sql命令行程序,执行一些语句进行测试。
多节点安装可参考前期文章和中文社区帮助。
银河麒麟的测试环境下运行概览
使用上面的第4节描述的交叉编译技术,把编译好的ARM-64版本的CockroachDB2.1部署在麒麟云环境下。下图为运行环境上操作系统的版本、CPU架构以及CockroachDB的版本信息以及执行Show Databases结果信息。


关于我们:我们是百度 DBA 团队,团队有两位 CockroachDB PMC Member 及一位 Contributor, 目前正积极推动 NewSQL 在百度内部以及外部的发展。除了NewSQL, 我们在MySQL, PostgreSQL, GreenPlum 有多年的内核开发经验及实践经验,对数据库和大数据领域有疑问或者需求欢迎联系我们,同时欢迎有志青年加入我们!
关注我们





