让我们使用Docker在intra-mart IMBox上搭建Cassandra
概述
使用 intra-mart 的 IMBox 时,需要创建 Cassandra 服务器,而使用 Docker 来实现这一点。
为什么要尝试自己制作?
根据2016年4月1日发布的intra-mart Accel Platform Cassandra管理者指南第14版的描述如下:
请注意,截至2015年7月,Apache Cassandra的最新版本是2.1.8。然而,在intra-mart Accel平台中使用的Cassandra库不支持1.2~2.1版本。因此,建议您目前使用最新的1.1.12版本。如需了解有关Cassandra版本更新的信息,请参考Cassandra版本更新。
这真是太奇怪了!这款太古老,官方似乎没有提供任何形象。
作者注1:截止到2016年06月27日,Cassandra的最新版本是3.7。
作者注2:虽然打算参考《Cassandra管理员指南 第14版 2016-04-01》,但是发现它比文档发布日期的2015年7月要旧半年多,这让我有点担心。
因此,我不情愿地决定自己制作以使用1.1.12版本的Cassandra。最近我一直在思考,希望intra-mart的开发团队能够提供给我们,或者公开一些docker-compose.yml之类的东西。
环境
我們試用了Cassandra,其環境如下所列。
暂且依据intra-mart的管理员指南和设置指南来创建环境。暂且不考虑构建集群或数据持久化的事项。
根据iAP2015Summer Apache Cassandra的系统要求,JDK版本需为JDK8u51或以上,因此我尝试使用OpenJDK8。(据推测,Cassandra本身也可在JDK7上运行。)
在进行Docker化时
使用IMBox进行配置
对于IMBox的使用来说,连接认证设置和创建密钥空间的方法(如果有认证设置)是重点。
根据连接到Cassandra的身份验证设置,获取认证库并部署,然后添加认证配置。
同时,根据创建KeySpace的方式(如果有认证设置),我们进行access.properties文件的编写。
我使用了熟悉的aoyagi用户进行创建。
下面是 Dockerfile 的示例。
FROM java:7-jdk-alpine
ENV CASSANDRA_VER 1.1.12
# Install Cassandra
RUN apk add --no-cache libc6-compat bash && \
apk add --virtual=dependencies --no-cache wget unzip && \
wget http://archive.apache.org/dist/cassandra/${CASSANDRA_VER}/apache-cassandra-${CASSANDRA_VER}-bin.tar.gz && \
tar xvzf apache-cassandra-${CASSANDRA_VER}-bin.tar.gz -C /usr/local && \
ln -s /usr/local/apache-cassandra-1.1.12 /usr/local/cassandra && \
rm -f apache-cassandra-${CASSANDRA_VER}-bin.tar.gz
# Copy files
COPY ./config/* /usr/local/cassandra/conf/
COPY entrypoint.sh /usr/local/cassandra/
# Authentication Settings
RUN wget http://www.intra-mart.jp/download/product/iap/imbox/cassandra_simple_auth.zip && \
unzip cassandra_simple_auth.zip -d /tmp/cassandra && \
rm -f cassandra_simple_auth.zip && \
apk del dependencies && \
cp /tmp/cassandra/lib/*.jar /usr/local/cassandra/lib/ && \
cp /tmp/cassandra/conf/*.properties /usr/local/cassandra/conf/ && \
rm -rf /tmp/cassandra && \
echo "aoyagi=aoyagi_pwd" >> /usr/local/cassandra/conf/passwd.properties && \
echo "\n #IMBox settings" >> /usr/local/cassandra/conf/access.properties && \
echo "imbox_keyspace.<rw>=aoyagi" >> /usr/local/cassandra/conf/access.properties && \
echo "imbox_keyspace.<ro>=user" >> /usr/local/cassandra/conf/access.properties && \
echo "imbox_keyspace.*.<rw>=aoyagi" >> /usr/local/cassandra/conf/access.properties && \
echo "imbox_keyspace.*.<ro>=user" >> /usr/local/cassandra/conf/access.properties && \
chmod +x /usr/local/cassandra/entrypoint.sh
ENTRYPOINT ["/usr/local/cassandra/entrypoint.sh"]
# 7199: jmx port
# 9160: cassandra port
EXPOSE 7199 9160
设置等待接收端口
在conf/cassandra.yml中,将接受的ListenAddress设置为0.0.0.0。这样无论是从容器分配的172.17.0.x地址还是从主机来的,都可以。
# The address to bind the Thrift RPC service to -- clients connect
# here. Unlike ListenAddress above, you *can* specify 0.0.0.0 here if
# you want Thrift to listen on all interfaces.
#
# Leaving this blank has the same effect it does for ListenAddress,
# (i.e. it will be based on the configured hostname of the node).
rpc_address: 0.0.0.0
# port for Thrift to listen for clients on
rpc_port: 9160
启动Cassandra容器
我会使用-e CLUSTER_NAME参数传递集群名称。在启动容器时,如果imbox_keyspace键空间不存在,将创建它。
- intra-mart(resin)もコンテナで、コンテナ間のリンクでやる場合
根据内存设置,最大堆大小将自动进行配置。
docker run -d -it --name cassandra -e CLUSTER_NAME="TestCluster" tsgkadot/imbox-cassandra
- 使用メモリサイズも指定したい場合
MAX_HEAP_SIZE和HEAP_NEWSIZE需要一起设置,不能只设置其中一个,否则将出错。
docker run -d -it --name cassandra -e CLUSTER_NAME="TestCluster" -e MAX_HEAP_SIZE=1G -e HEAP_NEWSIZE=256
m tsgkadot/imbox-cassandra
- Dockerのホストで通信したい場合(port 9601で通信するものとする)
docker run -d -it --name cassandra -p 9601:9601 -e CLUSTER_NAME="TestCluster" tsgkadot/imbox-cassandra
启动后,我们将查看容器的日志。
docker logs cassandra | tail -n 10
以下是显示的日志:
在启动时检查imbox_keyspace是否存在,由于找不到,我们创建了一个keyspace。
检查keyspace…
已连接到:6359a19ac14b/9160上的“TestCluster”
第1行 => 未找到Keyspace ‘imbox_keyspace’。
已连接到:6359a19ac14b/9160上的“TestCluster”
bee71ee6-5310-3bcc-be67-99313e1b81b0
等待模式一致…
…集群中的模式已达成一致
创建imbox_keyspace
完成!
键空间和用户密码是希望在容器启动时作为设置传递的,但由于懒而尚未支持。
启动intra-mart容器。
如果要创建一个启动intra-mart的Docker容器,可以使用alpine制作。如果使用已创建的容器,可以按照以下方式进行。
–链接提供Cassandra容器。
docker run -it -d --name imart -p 8080:8080 --link cassandra:cassandra --link postgres:postgres -
v /home/intramart/war/:/opt/resin/webapps -v /home/intramart/lib/:/opt/resin/webapp-jars imart-base:4.0.48
租户设置
在租户设置页面上的Cassandra连接信息页面上,按照以下方式输入。
点击“测试连接”按钮,确认是否能够进行连接。
如果将RPC的ListernAddress配置为localhost或127.0.0.1等,则会出现无法连接到Cassandra的错误。
对于IMBox的设置和操作验证
要从菜单中打开IMBox,至少需要进行以下设置。
-
- 対象ユーザがIMBoxを使える会社の組織に主所属として所属していること
- ログインユーザの所属組織に認可の参照権限が付与されていること
如果设备没有运行,可以通过故障排除,并找出原因。
在登录后,通过全局菜单中的“Top”->“IMBox”来选择并打开IMBox的页面进行动作确认。
哦哦哦,我成功打开了森大辅郎先生(Usercd=U11110)在IMBox的页面。
赠品
有关已更改的内容以及entrypoint.sh的内容,请参阅以下内容以外的Dockerfile。
- imbox-cassandra