Cassandra集群环境搭建

Cassandra是去中心化的集群架构,所以没有master节点的概念,但是会有一个seed节点来收集其他节点的信息

环境准备

  • tlinux 192.168.0.1(seed) 192.168.0.2 192.168.0.3
  • JDK 1.8
  • cassandra 3.7 官网下载

1.Server环境准备

之前配置Spark时已经配置好server的基础环境了,如需配置hostname、SSH免密登录可以参考Spark On YARN集群环境搭建.md

2.Java安装与配置

过程略。注意cassandra 3.0以上的版本需要JDK1.8及以上版本。

3.Cassandra安装与配置

3.1下载解压cassandra

tar -zvxf apache-cassandra-3.7-bin.tar.gz

3.2修改配置文件

主要的配置文件为cassandra.yamljvm.optionscassandra-env.sh

  • cd /data2/cassandra/apache-cassandra-3.7/conf修改cassandra.yaml
# 按文件顺序修改的地方
# !!!注意冒号后面一定要有一个空格,这是yaml的格式要求,不然无法解析
data_file_directories:
- /data2/cassandra/apache-cassandra-3.7/data/data

commitlog_directory: /data2/cassandra/apache-cassandra-3.7/data/commitlog

saved_caches_directory: /data2/cassandra/apache-cassandra-3.7/data/saved_caches

# 网上的教程大多都将三个路径配置为/var/lib/cassandra/data /var/lib/cassandra/commitlog /var/lib/cassandra/saved_caches
# 这里为了方便后续分发整个文件夹,直接放到$CASSANDRA_HOME目录下了,这也是默认的配置

seed_provider:
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
  parameters:
      - seeds: "192.168.0.1"
# 集群环境下这里一定要设置本机的IP地址,不能使用localhost,下同

#listen_address: localhost
listen_address:192.168.0.1

#rpc_address: localhost
rpc_address:192.168.0.1
  • 修改jvm.options
    Cassandra默认启动时会创建heap_size为1/4内存的JVM,我们机器的内存32G,也就是会启动8G左右的heap,而JVM默认的heap是256m,所以在不修改jvm.options的情况下会报invalid heap size的错误。解决办法是调小cassandra需要的heap_size或适当调大jvm的heap_size。因为我们这里是服务器环境,所以我们将jvm的heap_size调到了4g,同时因为还有spark需要内存,所以将cassandra需要的heap_size调小到2g。

vim jvm.options找到HEAP SETTINGS部分

#################
# HEAP SETTINGS #
#################

# Heap size is automatically calculated by cassandra-env based on this
# formula: max(min(1/2 ram, 1024MB), min(1/4 ram, 8GB))
# That is:
# - calculate 1/2 ram and cap to 1024MB
# - calculate 1/4 ram and cap to 8192MB
# - pick the max
#
# For production use you may wish to adjust this for your environment.
# If that's the case, uncomment the -Xmx and Xms options below to override the
# automatic calculation of JVM heap memory.
#
# It is recommended to set min (-Xms) and max (-Xmx) heap sizes to
# the same value to avoid stop-the-world GC pauses during resize, and
# so that we can lock the heap in memory on startup to prevent any
# of it from being swapped out.
-Xms2048m
-Xmx2048m

比较坑的是,这里修改之后只对bin/cassandra命令有效,bin/nodetool status时,还是报invalid heap size的错误,所以还得修改cassandra-env.sh

MAX_HEAP_SIZE="2G"
HEAP_NEWSIZE="800M"
# 这里脚本好像写的是默认没设置的情况下就直接读jvm.options里的配置
# 搞不懂为什么还要再配置一次
  • /etc/profile加上一行JVM_OPTS的配置
export JAVA_OPTS="-server -Xms4096m -Xmx4096m"

3.3启动cassandra

bin/cassandra -Rf
# cassandra不推荐使用root用户启动,所以这里坚持要用root用户的话,需要加上R参数
# -f表示以前端模式运行,也就是会交互式的输出启动过程中的日志
# 不过发现不加-f参数也会输出日志信息,到日志不再增加的时候Ctrl + c退出日志窗口,cassandra会继续在后台

3.4查看节点运行状态

bin/nodetool status

#输出
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address         Load       Tokens       Owns (effective)  Host ID                               Rack
UN  192.168.0.1  272.23 KiB  256          100.0%             c2db75d1-cf12-4bd8-a588-681c4baea389  rack1

3.5分发cassandra文件夹到其他节点并做同样的配置

  • 使用scp将配置好的cassandra文件夹整个分发到另外两个节点
# 在data2目录下
scp -r cassandra root@slave1:/data2
scp -r cassandra root@slave2:/data2

如果出现文件占用不能复制,可以先将当前节点停掉

user=`whoami`
pgrep -u $user -f cassandra | xargs kill -9
  • 将slave节点下cassandra.yaml中listen_address和rpc_address修改为相应slave节点的IP,seeds不用变,注意在slave节点/etc/profile中添加JAVA_OPTS

  • !!! 注意清理掉slave节点里cassandra/data目录下的内容,因为master上启动过一次会在data目录下保存节点的host_id信息,导致slave节点搞错自己的host_id

  • 配置完成后,可以bin/cassandra -R启动节点,因为cassandra没有中心节点负责启动slave节点,所以每个节点都需要自己手动启动

3.6验证集群状态

bin/nodetool status

#输出
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address         Load       Tokens       Owns (effective)  Host ID                               Rack
UN  192.168.0.3  190.4 KiB  256          66.6%             ae4d11d9-0ceb-49d0-a7cb-88c3cfc918e4  rack1
UN  192.168.0.2  280.26 KiB  256          68.5%             e3a29787-8311-44ca-92dd-3f5decdad0f5  rack1
UN  192.168.0.1  272.23 KiB  256          64.9%             c2db75d1-cf12-4bd8-a588-681c4baea389  rack1
本文总阅读量