尝试使用Docker构建一个VoltDB 8.3.1的集群(2台)
首先
在安装最新版本(v8.3.1)的内存数据库VoltDB(以集群配置)时,我们成功地构建了VoltDB的集群。
这次我将尝试在Docker上进行构建。
VoltDB是什么?
VoltDB是由参与PostgreSQL项目的迈克尔·斯通布雷克创立的内存关系数据库。
它比NoSQL更快速,并且支持使用SQL进行事务处理。
VoltDB社在2017年进行了与Cassandra的性能比较,结果表明VoltDB在性能和成本方面优于Cassandra。
比较快速数据性能:VoltDB和Cassandra基准测试的对比
环境和前提条件
・已经安装了Docker。
・将使用前面帖子中提到的VoltDB配置和模块。
・服务器将以2台的形式启动。
・使用VoltDB的版本为8.3.1。
创建Docker镜像
VoltDB已经发布了官方的Docker镜像。
但是,由于VoltDB 6.6版本太旧,我们需要修改官方的Dockerfile来创建8.3.1版本的镜像。
由于Ubuntu 14.04作为基础,因此本次不进行更改,但考虑改用18.04可能更好。
Dockerfile的格式如下所示。
查看设定文件(deployment.xml),默认情况下没有冗余(kfactor=0)。
虽然在容器启动时可以加载其他设定文件,但这次我们将使用这个。
<?xml version="1.0"?>
<deployment>
<cluster sitesperhost="2" kfactor="0" />
<httpd enabled="true">
<jsonapi enabled="true" />
</httpd>
</deployment>
从VoltDB的网站上下载voltdb-community-8.3.1.tar.gz文件,并将其存放在与Dockerfile相同的目录中。
只需更改Docker文件中的时区。
※由于写了时区,我不禁想要重新编写,但只需在docker run时指定”-e TZ=Asia/Tokyo”即可。
# Set timezone
ENV TZ=Asia/Tokyo
以Docker(voltdb8.3.1)映像进行构建。
重点是使用“–build-arg VOLT_KIT_VERSION=8.3.1”来指定版本。
docker build --build-arg VOLT_KIT_VERSION=8.3.1 -t voltdb8.3.1 .
启动容器
使用以下命令启动两个容器。
电压1:192.168.100.11
电压2:192.168.100.12
我正在这样做。
docker network create -d bridge --gateway=192.168.100.254 --subnet 192.168.100.0/24 testnet01
docker network ls
docker network inspect testnet01
docker run --name volt1 --rm -p 18080:8080 -p 21212:21212 -h volt1 --ip 192.168.100.11 --net=testnet01 -e HOST_COUNT=2 -e HOSTS=192.168.100.11,192.168.100.12 voltdb8.3.1
docker run --name volt2 --rm -p 28080:8080 -p 22212:21212 -h volt2 --ip=192.168.100.12 --net=testnet01 -e HOST_COUNT=2 -e HOSTS=192.168.100.11,192.168.100.12 voltdb8.3.1
Dockerfile中暴露的端口如下:
只需要开放Client Port(21212)和Web Interface Port (httpd)(8080)应该就可以了(大概)
其他端口是用于VoltDB服务器之间通讯的。
# Expose the following ports
# Client Port 21212
# Admin Port 21211
# Web Interface Port (httpd) 8080
# Internal Server Port 3021
# Replication Port 5555
# Zookeeper port 7181
# SSH 22
EXPOSE 22 3021 5555 7181 8080 8081 9000 21211 21212
确认VoltDB的运行情况
为了确认VoltDB正在运行,我们将创建表并插入记录。
# docker exec -it volt1 /bin/bash
# sqlcmd
> CREATE TABLE TEST_DATA_TTL (
NAME varchar(50) NOT NULL,
DATA smallint,
CREATED_TIMESTAMP TIMESTAMP DEFAULT NOW NOT NULL,
UNIQUE (NAME),
PRIMARY KEY (NAME)
);
Command succeeded.
> PARTITION TABLE TEST_DATA_TTL ON COLUMN NAME;
Command succeeded.
> insert into test_data_ttl(name, data) values('test001', 1);
(Returned 1 rows in 0.06s)
> select * from test_data_ttl where name = 'test001';
NAME DATA CREATED_TIMESTAMP
-------- ----- ---------------------------
test001 1 2018-09-08 07:11:00.598000
(Returned 1 rows in 0.02s)
修改配置文件(deployment.xml)并启动。
如果要更改设置文件(deployment.xml),请添加”-v /tmp/deployment-kfactor1.xml:/tmp/deployment.xml”,然后启动容器。
“/tmp/deployment-kfactor1.xml” 指定了希望替换的本地配置文件。
docker run --name volt1 --rm -p 18080:8080 -p 21212:21212 -h volt1 --ip 192.168.100.11 --net=testnet01 -e HOST_COUNT=2 -e HOSTS=192.168.100.11,192.168.100.12 -v /tmp/deployment-kfactor1.xml:/tmp/deployment.xml voltdb8.3.1
docker run --name volt2 --rm -p 28080:8080 -p 22212:21212 -h volt2 --ip=192.168.100.12 --net=testnet01 -e HOST_COUNT=2 -e HOSTS=192.168.100.11,192.168.100.12 -v /tmp/deployment-kfactor1.xml:/tmp/deployment.xml voltdb8.3.1
最后
由于有现成的Docker镜像,搭建过程相对轻松。虽然在启动之后创建了表格,但实际上在创建Docker镜像时就应该提前创建好表格和存储过程,这样只需启动即可使用数据库,更为便利。