12.6 Cassandra
Cassandra是个开源(Apache License 2.0)的分布式数据库,支持分散的数据存储,可以实现容错以及无单点故障等。Cassandra在设计上引入了P2P技术,具备大规模可分区行存储能力,并支持Spark、Storm、Hadoop的集成。目前Facebook、Twitter、Instagram、eBay、Github、Reddit、Netflix等多家公司都在使用Cassandra。类似工具还有HBase等。

1.使用官方镜像
首先可以使用docker run指令基于Cassandra官方镜像启动容器:
- $ docker run --name my-cassandra -d cassandra:latest
- 1dde81cddc53322817f8c6e67022c501759d8d187a2de40f1a25710a5f2dfa53
这里的—name标签指定容器名称。cassandra:tag中的标签指定版本号。标签名称可以参考官方仓库的标签说明:https://hub.docker.com/r/library/cassandra/tags/。
之后用户可以将另一个容器中的应用与Cassandra容器连接起来。此应用容器要暴露Cassandra需要使用的端口(Cassandra默认服务端口为rpc_port:9160;CQL默认本地服务端口为native_transport_port:9042),这样就可以通过容器link功能来连接Cassandra容器与应用容器:
- $ docker run --name my-app --link my-cassandra:cassandra -d app-that-uses-cassandra
2.搭建Cassandra集群
Cassandra有两种集群模式:单机模式(所有实例集中于一台机器)和多机模式(实例分布于多台机器)。单机模式下,可以按照上面描述的方法启动容器即可。如果需要启动更多实例,则需要在指令中配置首个实例信息:
- $ docker run --name my-cassandra2 -d -e CASSANDRA_SEEDS="$(docker inspect --
- format='{{ .NetworkSettings.IPAddress }}' my-cassandra)" cassandra:latest
其中my-cassandra就是首个Cassandra Server的实例名称。在这里使用了docker inspect指令,以获取首个实例的IP地址信息。还可以使用docker run的—link标签来连接这两个Cassandra实例:
- $ docker run --name my-cassandra2 -d --link my-cassandra:cassandra cassandra:latest
多机模式下,由于容器网络基于Docker bridge,所以需要通过环境变量配置Cassandra Server容器的IP广播地址(即使用-e标签)。假设第一台虚拟机的IP是10.22.22.22,第二台虚拟机的IP是10.23.23.23,Gossip端口是7000,那么启动第一台虚拟机中的Cassandra容器时的指令如下:
- $ docker run --name my-cassandra -d -e CASSANDRA_BROADCAST_ADDRESS=10.42.42.42
- -p 7000:7000 cassandra:latest
启动第二台虚拟机的Cassandra容器时,同样需要暴露Gossip端口,并通过环境变量声明第一台Cassandra容器的IP地址:
- $ docker run --name my-cassandra -d -e CASSANDRA_BROADCAST_ADDRESS=10.43.43.43
- -p 7000:7000 -e CASSANDRA_SEEDS=10.42.42.42 cassandra:latest
