- 背景
以Docker和Rocket为代表的容器技术现在正变得越来越流行,它改变着公司和用户创建、发布、运行分布式应用的方式,在未来5年将给云计算行业带来它应有的价值。它的诱人之处在于:
1)资源独立、隔离
资源隔离是云计算平台的最基本需求。Docker通过Linux namespace, cgroup限制了硬件资源与软件运行环境,与宿主机上的其他应用实现了隔离,做到了互不影响。不同应用或服务以“集装箱”(container)为单位装“船”或卸“船”,“集装箱船”(运行container的宿主机或集群 )上,数千数万个“集装箱”排列整齐,不同公司、不同种类的“货物”(运行应用所需的程序、组件、运行环境、依赖)保持独立。
2)环境的一致性
开发工程师完成应用开发后build一个docker image,基于这个image创建的container像是一个集装箱,里面打包了各种“散件货物”(运行应用所需的程序、组件、运行环境、依赖)。无论这个集装箱在哪里:开发环境、测试环境、生产环境,都可以确保集装箱里面的“货物”种类与个数完全相同,软件包不会在测试环境缺失,环境变量不会在生产环境忘记配置,开发环境与生产环境不会因为安装了不同版本的依赖导致应用运行异常。这样的一致性得益于“发货”(build docker image)时已经密封到“集装箱”中,而每一个环节都是在运输这个完整的、不需要拆分合并的“集装箱”。
3)轻量化
相比传统的虚拟化技术(VM),使用docker在cpu, memory, disk IO, network IO上的性能损耗都有同样水平甚至更优的表现。Container的快速创建、启动、销毁受到很多赞誉。
4)Build Once, Run Everywhere
这个特性着实吸引了很多人,“货物”(应用)在“汽车”、“火车”、“轮船”(私有云、公有云等服务)之间迁移交换时,只需要迁移符合标准规格和装卸方式的“集装箱”(docker container),削减了耗时费力的人工“装卸”(上线、下线应用),带来的是巨大的时间人力成本节约。这使未来仅有少数几个运维人员运维超大规模装载线上应用的容器集群成为可能,如同60年代后少数几个机器操作员即可在几小时内连装带卸完一艘万级集装箱船。
容器技术现在也被广泛应用于数据库领域。它的“Build Once, Run Everywhere”的特性大大减少了花在安装配置数据库环境上的时间,因为即使对于从事数据库多年的DBA而言,安装配置数据库环境依旧是一项看似简单但却经常不顺利的工作。当然,容器技术的其他优势也被很好的应用在数据库的使用中。
SequoiaDB作为一款优秀的国产分布式NewSQL数据库,已经得到了越来越多用户的认可。本文以Docker为例,着重介绍如何用Dockerfile快速构建SequoiaDB镜像,以及如何利用容器快速搭建和启动SequoiaDB集群供应用系统使用。
- 构建SequoiaDB镜像
如何安装docker以及配置镜像仓库不是本文的重点,网上有很多相关的技术文章。需要指出的是本文采用阿里云镜像仓库,因为将镜像上传到Docker官方仓库的速度实在不敢恭维。如何注册和使用阿里云镜像仓库,可以参考文章(http://www.jb51.net/article/123101.htm)。
STEP 1:创建Dockerfile,内容如下,只需要几行简单的指令即可
Sequoiadb DOCKERFILES PROJECT
This is the Dockerfile for Sequoiadb 2.8.4
REQUIRED FILES TO BUILD THIS IMAGE
(1) sequoiadb-2.8.4-linux_x86_64-enterprise-installer.run
(2) installSDB.sh
HOW TO BUILD THIS IMAGE
Put all downloaded files in the same directory as this Dockerfile
Run:
$ sudo docker build -t sequoiadb:2.8.4 .
Pull base image
FROM ubuntu
STEP 2:创建镜像
root用户执行:
docker build -t sequoiadb:2.8.4 .
如果是普通用户,需要使用sudo:
sudo docker build -t sequoiadb:2.8.4 .
STEP3:登陆阿里云镜像仓库
docker login --username=xxx registry.cn-hangzhou.aliyuncs.com
其中xxx为您在阿里云注册的账号。
STEP4:查看本地sequoiadb镜像id
docker images
STEP5:标记本地镜像,将其归入阿里云仓库
docker tag 04dc528f2a6f registry.cn-hangzhou.aliyuncs.com/508mars/sequoiadb:latest
其中04dc528f2a6f是笔者本地sequoiadb镜像id,新的标记格式有一定要求,registry.cn-hangzhou.aliyuncs.com为阿里云仓库地址,508mars是笔者在阿里云的用户名,sequoiadb是镜像名,latest是tag。
STEP6:提交sequoiadb镜像到镜像库
docker push registry.cn-hangzhou.aliyuncs.com/508mars/sequoiadb:latest
- 利用容器启动SequoiaDB集群
Docker的网络默认采用bridge模式,采用bridge模式的容器有如下特点:
1)同一宿主机的容器之间可以互相ping通
2)不同宿主机的容器之间互相ping不同
但是SequoiaDB集群要求所有节点之间是可以互通的,所以如果运行SequoiaDB的容器跑在不同宿主机上,docker的默认网络模式显然不合适。有很多种方法可以解决不同宿主机容器之间的连通性问题,本文只介绍weave虚拟网络这个解决方案,因为weave同时提供了一个DNS server的功能,有了该功能,在利用容器部署SequoiaDB集群时不再需要修改各个