Cassandra 之旅 (四) 配置集群
cassandra配置集群还是比较简单的。步骤如下:
- 打开cassandra.yaml文件,
- 修改cluster_name:'Test Cluster'为你想要的集群名字
- 去掉屏蔽num_tokens:256,这个值是计算负载用的,比如你集群有2个节点,都配的是256,那么两台机子就是平分压力各为50%
- 修改seeds:"localhost"为本机IP,这个seeds是个什么东西呢?比方说,一个数据中心有很多机器,你需要一个或多个来做分配,统筹,与其它数据中心交互,这个就是seed。IP与IP之间用逗号隔开。
- 把listen_address等默认配置为localhost的全改为本机IP
- 修改endpoint_snith为PropertyFileSnith
- 打开conf\cassandra-topology.properties
配置IP与数据中心的关系,如我的两台机器为
16.158.81.54=dc1:rac1
16.158.83.70=dc2:rac1
#再把其它不需要的IP映射删除掉
这里为什么用小写呢!因为我在使用CQLSH与DRIVE的时候,发现在不支持大小写,全会被转成小写。如果你配成DC1:RAC1的形式,那么在查询数据、插入数据时是会找不到节点。
这里再说一下cassandra的一个数据模型与执行方式:
比如你创建一个keyspace test, 在没有创建表的时候,test这个文件夹并不会创建在data目录下面。当你创建第一个表testtable完成后,那么cassandra服务就会在Data目录下面创建一个叫test的文件夹,在test文件夹下创建一个testtable文件夹。这个过程是不依赖于什么snitch呀,什么replication呀。所以基本上无论怎么配,创建、删除keyspace或table都能成功的,但插入数据、查询数据就不一样了。比如,你用DC1:1的NetworkTopologyStrategy创建好一个keyspace与table之后,想要插入数据,那么cassandra是怎么操作的呢?首先取到keyspace创建时所设置的DC, 这里设置为DC1,然后用DC1去配置文件中找映射,而这个步骤是区分大小写的,于是就会找不到DC1的IP映射,从而产生:“一个或多个节点不可用”的错误信息。
- 确保所有cassandra节点配置都做了如上的更新操作,并删除所有节点中data目录, commitlog目录中的文件
这里我为什么会说要把commitlog里的文件也删除呢?主要是这些文件中存了当前节点的token。有的人贪快可能会想,既然配置一样,把cassandra整个文件夹COPY到另一台机器上,启动就建好集群了。这时你启动多个COPY的服务之后,会发现有节点加入不了的,并可以在运行窗口看到关于token相同的错误,原因就是commitlog中存了token而且好像不能更新,cassandra官方给出的结决办法就是把commitlog中的文件删除,之后当cassandra服务启动的时候就会重新生成token了。
- 逐一启动cassandra服务,节点就会自动加入集群了
- 使用BIN目录下的nodetool并加参数 status查看建立集群是否成功