利用docker容器模拟搭建Trino集群
虽然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"]
相关文章