利用docker容器模拟搭建Trino集群

2022-05-12 00:00:00 集群 节点 配置 容器 配置文件

Trino是一个开源的分布式SQL查询引擎,它是为了高效查询不同系统的各种规模的数据源而从头开始设计和编写的一套系统。

虽然Trino官方给出了单机测试环境中,模拟运行三个Trino节点的代码,即通过testing模块中的DistributedQueryRunner 类,模拟了三个节点,一个作为coordinator,另外两个作为worker。但是这毕竟跑的是test的代码,而非正在部署时的代码,所运行的server也不是部署时的server,而是模拟运行的TestingTrinoServer,并且,倘若想要扩充节点,或者测试更加复杂的真实环境中场景,这种依靠testing模块的方式显然不太可靠。

可以利用docker容器技术实现环境隔离,通过容器集群模拟真实的机器集群。

容器集群规划

利用docker容器集群模拟真实的机器集群,理论上可以增加任意节点,这里还是以三节点为例,参考三节点的配置方式,可以轻松部署任意节点的容器集群。容器集群仍旧规划为一个coordinator节点,两个worker节点。节点发现服务采用Trino内置的节点发现服务,节点发现服务部署在coordinator上。

各节点的Dockerfile编写

在编写Dockerfile的时候要注意两个点:

  • trino-server的部署压缩包的名称应该设置成一个变量,以方便后续的升级
  • coordinator和worker使用不同的配置文件,所以在这两类node中,配置文件应该挂载在不同的宿主机目录上,宿主机的两个目录分别放置coordinator和worker的配置文件

考虑到以上两点,Dockerfile也就如下所示了:

FROM centos:centos8

RUN echo "trino soft nofile 131072" >> /etc/security/limits.d/trino.conf && \
    echo "trino hard nofile 131072" >> /etc/security/limits.d/trino.conf

RUN yum makecache && \
    yum install -y python3 && \
    yum install -y java-11-openjdk-devel && \
    ln -s /usr/bin/python3 /usr/bin/python

ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk
ENV PATH=$PATH:${JAVA_HOME}/bin

# must give the name of trino server package
ARG TRINO_SERVER_PACKAGE
ADD ${TRINO_SERVER_PACKAGE}.tar.gz /
RUN ln -s /${TRINO_SERVER_PACKAGE} /trino

# must mount /trino-etc when docker run
ENTRYPOINT ["/trino/bin/launcher", "--etc-dir=/trino-etc", "run"]

相关文章