单机
首先docker镜像拥有jdk8与python2.7,这里不再赘述。
进入容器中安装:
解压:
tar -zxvf apache-cassandra-3.9-bin.tar.gz
增加新用户cassandra:
adduser cassandra
修改密码:
passwd cassandra
修改配置文件cassandra.yaml:
vim /home/apache-cassandra-3.9/conf/cassandra.yaml
修改如下(170.17.0.2为当前docker容器的ip地址):
Seeds:170.17.0.2
Listen_address: 170.17.0.2
rpc_address: 0.0.0.0
broadcast_rpc_address: 170.17.0.2
运行:
cd apache-cassandra-3.9
nohup ./cassandra -f
测试启动是否成功:
./cqlsh localhost
cqlsh>
进入cql的shell表示启动成功
退出容器保存为新镜像:
docker commit [containerid] [new image name]
使用新镜像启动容器:
docker run --name cassandra -it -d -p 10022:22 -p 9042:9042 cassandra:3.9 /usr/sbin/sshd -D
集群
如果要做集群,可使用该镜像开启其他容器,修改的地方:
1. Seeds IP、Listen_address、broadcast_rpc_address、cluster_name
参考资料:
http://eric100.blog.51cto.com/2535573/1770036
2. 修改seeds ip时,种子节点需要配置集群内所有机器的IP,而其他节点只需配置自己的IP监听自己即可,种子节点是用来处理新增节点的
3. 清除cassandra/data/data/system下的文件(由于是基于上个容器的镜像创建的容器,系统库中记录着本容器的IP,如果重新创建一个新的容器,不删除这个数据将导致主机ID混乱而无法开启服务)
rm cassandra/data/data/system/*
之后使用./nodetool status &查看节点状态:
./nodetool status &
如图所示:
这是两个节点的情况,当一个节点宕机了,由于Replication factory(副本因子或复制因子)为1,无法将数据复制到另一个节点上,那么会出现R(0)+W(0)>N(副本因子)1公式不成立,所以两台节点时必须都正常运行,否则在执行CQL语句时出现下面的情况
安装遇到的问题:
在启动容器后发现无法访问9042端口,进入到容器之后发现是启动cassandra之后守护的IP是127.0.0.1这个回环地址,只允许容器内通信,这样docker映射后的端口是无法访问的,所以应该将cassandra的监听地址修改为本地地址(容器的地址),rpc地址修改为全网地址0.0.0.0
推荐CQL可视化工具:Datastax DevCenter
管理与监控管理工具:DataStax OpsCenter(安装步骤参照官网:http://docs.datastax.com/en/datastax_enterprise/5.0/datastax_enterprise/install/installNoSudoDse.html)