让我们使用Docker在intra-mart IMBox上搭建Cassandra

概述

使用 intra-mart 的 IMBox 时,需要创建 Cassandra 服务器,而使用 Docker 来实现这一点。

为什么要尝试自己制作?

https hub.docker.com _ cassandra .png

根据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,其環境如下所列。

applicationversion説明Cassandra1.1.12Apache公式サイトから入手JavaOpenJDK1.8.java:8-jdk-alpineイメージ付属のもの

暂且依据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连接信息页面上,按照以下方式输入。

ラベル値説明クラスタ名TestClusterCassandraコンテナ起動時に渡した CLUSTER_NAMEの文字列の値キースペースimbox_keyspaceコンテナ起動時に生成されるキースペース名。接続先cassandra:9160–link cassandra:cassandraでCassandraコンテナにこの名前でアクセスできるようになっているはず。レプリケーションファクタ1デフォルト値認証情報設定checked認証情報設定を行っているので、チェックします。認証ユーザ名aoyagiaoyagiユーザを作成しているので、これを利用します。認証パスワードaoyagi_pwdaoyagiユーザを作成しているので、これを利用します。

点击“测试连接”按钮,确认是否能够进行连接。

如果将RPC的ListernAddress配置为localhost或127.0.0.1等,则会出现无法连接到Cassandra的错误。

tenantSetting.png

对于IMBox的设置和操作验证

要从菜单中打开IMBox,至少需要进行以下设置。

    • 対象ユーザがIMBoxを使える会社の組織に主所属として所属していること

 

    ログインユーザの所属組織に認可の参照権限が付与されていること

如果设备没有运行,可以通过故障排除,并找出原因。

在登录后,通过全局菜单中的“Top”->“IMBox”来选择并打开IMBox的页面进行动作确认。

CompanyBox.png

哦哦哦,我成功打开了森大辅郎先生(Usercd=U11110)在IMBox的页面。

赠品

有关已更改的内容以及entrypoint.sh的内容,请参阅以下内容以外的Dockerfile。

    imbox-cassandra
广告
将在 10 秒后关闭
bannerAds