本文所使用的Cassandra版本为1.2.0版。
这几天一直在一边学习Cassandra一边做测试。前天做了个集群压力测试,测了1个晚上,但因为有些概念不清晰,配置错误,最后白做了,今晚上调整了配置重新开始做。
错误的原因是把数据中心、机架的概念弄混了,多个数据中心的placement_strategy配成了SimpleStrategy,这肯定是不行了。下面说说我整理的内容和正确理解。
数据中心:
顾名思义就是存放数据的地方,百度百科的解释就不说了。我的理解是数据中心可以是一个机房或者一个区域的设备组合。其实这个概念也不太准确,主要还是看你自己的业务情况。如果业务量小,为了做个简单的灾备或可用性,一台服务器也可以是一个数据中心,如果业务量很大,并且需要考虑到网络的可用性问题,有时可能需要备移动、联通和电信的网络和机房,那就比较复杂了。据我了解的某银行的业务,就是以一个地区作为一个数据中心来互备的。如下图(不一定准确哦,嘿嘿,大体是这样的)。
下面再说一下机架,刚开始我把它和snitch搞混淆了。其实机架可简单的理解为存放服务器的机柜。
那数据中心与机架是什么关系呢?N:1,1:N,M:N。如果只需要几台服务器就能满足业务需求,这些服务器至少有2个数据中心,那这种情况下多个数据中心可以放在1个机架上,不过这种情况对数据灾备来说是不太保险的。第2种情况是1个数据中心相当于1个机房,那机房里会有多个机架。第3种情况M:N为多个机房的多个数据中心置于多个机架上。
而在Cassandra1.2.0中数据中心和机架的配置位于apache-cassandra-1.2.0\conf\cassandra-topology.properties文件中,如:
# Cassandra Node IP=Data Center:Rack
192.168.1.100=DC1:RAC1
192.168.2.200=DC2:RAC2
10.0.0.10=DC1:RAC1
10.0.0.11=DC1:RAC1
10.0.0.12=DC1:RAC2
10.20.114.10=DC2:RAC1
10.20.114.11=DC2:RAC1
10.21.119.13=DC3:RAC1
10.21.119.10=DC3:RAC1
10.0.0.13=DC1:RAC2
10.21.119.14=DC3:RAC2
10.20.114.15=DC2:RAC2
# default for unknown nodes
default=DC1:RAC1
上面这段有3个数据中心DC1,DC2,DC3。DC1有两个机架RAC1,RAC2总共5个node,DC2有两个机架RAC1,RAC2总共4个node,DC3有两个机架RAC1,RAC2总共3个node。如果有新加入的node则把节点放于DC1:RAC1。数据中心和机架的关系就是我们上面说的M:N的关系了。(这个配置的生效需要在cassandra.yaml配置endpoint_snitch=PropertyFileSnitch或RackInferringSnitch。这个下篇写,呵呵。)
不过在官方文档中说:在整个集群中最简单和最常见的实现是只定义一个机架。多个机架应避免使用,原因如下:
- 大部分用户忽略或忘记了机架(RACK) 的要求,那就是为了使数据得到安全和适当的分布,机架应以交替顺序组织。
- 许多用户不能有效使用机架信息。例如,设立尽可能多的节点(或类似的有益的情况)机架。
- 使用机架扩展集群可以是很乏味的。该过程通常涉及多个节点移动,并且必须确保机架分布数据正确和均匀。当集群需要即时扩展时,机架应该是最后再考虑的。
正确使用机架(RACK):
参考:Multi-datacenter Replication in Cassandra,Cassandra权威指南,Deploying Cassandra across Multiple Data Centers,cassandra-s-rack-feature
Cassandra数据分布系列文章: