尝试使用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镜像时就应该提前创建好表格和存储过程,这样只需启动即可使用数据库,更为便利。

广告
将在 10 秒后关闭
bannerAds