我应该如何纠正MariaDB Columnstore在Docker中运行失败?

重要的澄清

  • 这不是关于MariaDB服务器的问题,而是关于MariaDB Columnstore的一个问题 – 一个截然不同的软件。
  • 对于使用x86架构的Ubuntu 16.0.4,使用的MariDB Columnstore版本是1.0.9。
  • 我成功地让MariaDB Columnstore Multi-Node在没有使用Docker的情况下正常工作,但是(可惜)这不是一个解决方案,因为这不是我的任务。

问题摘要

鉴于下面的上下文,我需要帮助弄清楚如何让MariaDB Columnstore多节点在Docker容器中运行。 在这一点上,任何从小洞见到更好的做事方式都会有所帮助。 有些可能解决问题的事情是:

  • 如何让syslog-ng和MariaDB Columnstore一起正常工作
  • 如何停止MariaDB Columnstore使用systemctl
  • 如何让Docker运行Systemctl

上下文

为了使MariaDB Columnstore具有更高的可扩展性,我的任务是强制它在Docker容器中运行。 对于上下文,这个Columnstore数据库将被用于IIS分析(很多)。 我首先尝试使用单节点配置设置来运行软件:

FROM ubuntu RUN apt-get update && apt-get install -y \ openssh-server \ wget \ tar \ expect \ perl \ openssl \ file \ sudo \ libdbi-perl \ libboost-all-dev \ libreadline-dev \ rsync \ snappy \ net-tools \ libdbd-mysql-perl \ inetutils-ping ADD columnstore-packages /root/ RUN dpkg -i /root/*.deb EXPOSE 3306 8600-8622 8700 8800 CMD bash 

然后,我会输入图像,并使用默认设置为单台服务器设置配置。 这将工作完美无瑕。 但是,当我尝试将其配置为多服务器时,会遇到各种问题。 配置将运行得很好,并且安装将在所有相关的机器上发生,而不会出现问题。 但是,每当我尝试启动系统,我会收到此错误:

 **** startSystem Failed : check log files 

发现日志文件不存在后,我查看了源代码,发现当Columnstore运行此代码时发生此错误的来源:

 cmd = startup::StartUp::installDir() + "/bin/columnstore restart > /tmp/start.log 2>&1"; int rtnCode = system(cmd.c_str()); 

哪个会运行程序%INSTALLDIRECTORY%/bin/columnstore restart 。 我试图手动运行这个程序,看看能不能收到更多的见解,但是没有错误地迎接,但是系统还没有启动。 为什么会发生这种混淆,我进一步研究了源代码。 尽管我不太了解Columnstores的所有内部工作,但是我发现Columnstore在源码中定期使用systemctl,比如:

 if (user == 0) cmd = "systemctl " + action + " " + systemlog + ".service > /dev/null 2>&1"; else cmd = "sudo systemctl " + action + " " + systemlog + ".service > /dev/null 2>&1"; system(cmd.c_str()); 

我认为这是个问题,因为docker无法运行systemctl,所以我从使用ubuntu docker镜像切换到了phusion baseimage ,因为这样可以解决运行systemctl的问题。 我使用的新Dockerfile是:

 FROM phusion/baseimage:0.9.22 RUN apt-get update && apt-get install -y --fixmissing \ openssh-server \ wget \ tar \ expect \ perl \ openssl \ file \ sudo \ libdbi-perl \ libboost-all-dev \ libreadline-dev \ rsync \ snappy \ net-tools \ libdbd-mysql-perl \ inetutils-ping ADD columnstore-packages /root/packages RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* EXPOSE 3306 8600-8622 8700 8800 CMD ["/sbin/my_init"] 

构建顺利,但是当我尝试运行该映像时,我遇到了syslog-ng的问题

 **** Running /etc/my_init.d/00_regen_ssh_host_keys.sh... **** Running /etc/rc.local... **** Booting runit daemon... **** Runit started as PID 7 Jul 24 17:48:49 319ee8941936 syslog-ng[14]: syslog-ng starting up; version='3.5.6' 

Sylog-ng会在启动时挂起,而不会实际初始化。 如果我试图删除Dockerfile中的syslog-ng,那么在启动时,容器会不断抱怨syslog-ng丢失。 如果我尝试在基本phusion容器内手动安装所有东西,那么当运行docker文件中的ADD columnstore-packages /root/ line中包含的mariadb-columnstore .deb文件时,并在这里可用)。