Cassandra集群搭建

一、准备工作

1、准备三台以上服务器:

序号 ip 用途
1 192.168.56.31 种子节点
2 192.168.56.32 种子节点
3 192.168.56.33 普通节点
  • 种子节点的作用:

        一个新节点加入集群时,需要通过种子节点来发现集群中其它节点,需要至少一个活跃的种子节点可以连接,一旦节点加入这个集群,知道了集群中的其它节点,这个节点在下次启动的时候就不需要种子节点了。

        对于种子节点没有特殊要求,可以设置任何一个节点为种子。

2、安装jdk1.8+ 和 python2.7:

参考:https://www.jiguiquan.com/?p=273

[root@td1 local]# java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
[root@td1 local]# python -V
Python 2.7.5

3、下载Cassandra安装包:

我本次选择的版本为v3.11.8

https://www.apache.org/dyn/closer.lua/cassandra/3.11.8/apache-cassandra-3.11.8-bin.tar.gz


二、正式开始安装

1、解压并拷贝安装包文件到/usr/local/目录下:

[root@td1 ~]# tar -zxvf apache-cassandra-3.11.8-bin.tar.gz
[root@td1 ~]# mv apache-cassandra-3.11.8/ /usr/local/cassandra/

2、创建数据和日志存放目录:

mkdir -p /data/cassandra/data
mkdir -p /data/cassandra/commitlog
mkdir -p /data/cassandra/saved_caches

3、修改核心配置文件 cassandra.yaml:

[root@td1 cassandra]# cd /usr/local/cassandra/conf/


#集群名称
cluster_name: 'Jiguiquan Cluster'

seed_provider:
    - class_name: org.apache.cassandra.locator.SimpleSeedProvider
      parameters:
          - seeds: "192.168.56.31,192.168.56.32"

#数据存储的目录,默认为/var/lib/cassandra/data,这里按照自己的路径配置,这项可以有多个目录分行写
data_file_directories:
    - /data/cassandra/data
  
#提交日志存放目录,默认为/var/lib/cassandra/data。
commitlog_directory: /data/cassandra/commitlog

#缓存目录,默认为/var/lib/cassandra/saved_caches。
saved_caches_directory: /data/cassandra/saved_caches

#监听地址 这项配置当前服务器ip,rpc_address 和 listen_address一样填写当前服务器ip
listen_address:192.168.56.31
rpc_address:192.168.56.31
## 另外两台机器只有最后的listen_address与rpc_address不同。

4、启动每一个cassandra节点:

[root@td1 conf]# cd /usr/local/cassandra/bin/
[root@td1 bin]# ./cassandra
Running Cassandra as root user or group is not recommended - please start Cassandra using a different system user.
If you really want to force running Cassandra as root, use -R command line option.
## 那我们就 -R 启动:
[root@td1 bin]# ./cassandra -R

查看cassandra集群的状态:

[root@td1 bin]# ./nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address        Load       Tokens       Owns (effective)  Host ID                               Rack
UN  192.168.56.31  74.99 KiB  256          69.8%             28013391-9949-4ab7-aa40-55a8f64e3063  rack1
UN  192.168.56.32  75 KiB     256          67.9%             38306861-7888-449c-8b77-7d247ba600ed  rack1
UN  192.168.56.33  94.25 KiB  256          62.3%             13ca40cd-d961-4de0-8675-a87a2384d728  rack1

5、通过自带的客户端连接cassandra集群:

[root@td1 bin]# ./cqlsh 192.168.56.31  -u cassandra -p cassandra
Connected to Jiguiquan Cluster at 192.168.56.31:9042.
[cqlsh 5.0.1 | Cassandra 3.11.8 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
cassandra@cqlsh> SELECT * FROM thingsboard.ts_kv_latest_cf;

1670490488548487.png

6、Cassandra集群的相关接口:

7000:作为集群通信端口(如果开启了SSL就是7001端口)。
9042:用于native协议的客户端连接。(java开发也是使用该端口)
7199:用于JMX,
9160:用于废弃的Thrift接口

三、通过DBeaver可视化客户端连接Cassandra集群

1、下载DBeaver安装包:

https://dbeaver.io/download/

1670490754570771.png

安装过程就一路确认即可!

2、下载Cassandra的驱动文件:

https://downloads.datastax.com/jdbc/cql/2.0.12.1013/SimbaCassandraJDBC42-2.0.12.1013.zip

下载到本地后,解压;

3、顶部菜单—数据库—驱动管理器:

1670490966347563.png

新建驱动:设置内容如下:

驱动名称:Cassandra
驱动类型:Generic
类型:com.simba.cassandra.jdbc42.Driver
URL模板:jdbc:cassandra://{host}[:{port}];AuthMech=0 #如果开启验证AuthMech=1
默认端口:9042

1670492553311162.png

在“库”的地方,添加文件,找到CassandraJDBC42.jar,并找到我们前一步配置的类,最后保存!

1670492626495860.png

4、最后新建连接选择Cassandra进行配置:

1670493025350388.png

5、可视化客户端使用非常方便:

1670493163641412.png


四、开启登录认证并配置开机自启

1、开启登录认证:

修改核心配置文件cassandra.yaml:

authenticator: PasswordAuthenticator
authorizer: CassandraAuthorizer

重新启动:

2、以非root用户启动:

因为以root用户启动cassandra时,会提示:

[root@td2 bin]# ./cassandra
Running Cassandra as root user or group is not recommended - please start Cassandra using a different system user.
If you really want to force running Cassandra as root, use -R command line option.

当然,我们可以强行以root用户启动:

./cassandra -R

但是还是优雅一点好:

创建一个新的用户组和用户cassandra:

# 创建用户组
[root@td2 local]# groupadd cassandra

# 创建用户,-m自动在home目录下创建用户家目录
[root@td2 local]# useradd -m -g cassandra cassandra

## 查看所有用户
[root@td2 local]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
......
cassandra:x:1001:1001::/home/cassandra:/bin/bash

## 家目录
[root@td2 local]# ls /home/
cassandra  vagrant

为相关的目录给我们新创建的用户:

[root@td2 local]# chown -R cassandra:cassandra /usr/local/cassandra/
[root@td1 data]# chown -R cassandra:cassandra /data/cassandra/

以cassandra用户启动cassandra集群:

[root@td1 data]# su cassandra
[cassandra@td1 data]$ /usr/local/cassandra/bin/cassandra
# 可正常启动!

[cassandra@td1 data]$ /usr/local/cassandra/bin/nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address        Load       Tokens       Owns (effective)  Host ID                               Rack
UN  192.168.56.31  325.2 KiB  256          34.1%             28013391-9949-4ab7-aa40-55a8f64e3063  rack1
UN  192.168.56.32  333.71 KiB  256          34.5%             38306861-7888-449c-8b77-7d247ba600ed  rack1
UN  192.168.56.33  380.61 KiB  256          31.4%             13ca40cd-d961-4de0-8675-a87a2384d728  rack1

3、配置cassandra的开机自启:

配置cassandra命令脚本:

[root@td1 ~]# cd /etc/rc.d/init.d/

[root@td1 init.d]# vim cassandra

内容如下:

#!/bin/sh
# chkconfig: 2345 60 60
# description: service for cassandra 3.11.8, 2022-12-14
# processname: cassandra

CASSANDRA_DIR="/usr/local/cassandra"

case "$1" in
    start)
        echo "Starting cassandra"
        su - cassandra -c nohup -c "$CASSANDRA_DIR/bin/cassandra" >> $CASSANDRA_DIR/logs/system.log 2>&1 &
        echo "Cassandra started"
        ;;
    stop)
        echo "Stopping cassandra"
        PID_COUNT=`ps aux |grep CassandraDaemon |grep -v grep | wc -l`
        PID=`ps aux |grep CassandraDaemon |grep -v grep | awk {'print $2'}`
        if [ $PID_COUNT -gt 0 ];then
                echo "Try stop cassandra"
                kill -9 $PID
                echo "Kill cassandra SUCCESS!"
        else
                echo "There is no cassandra!"
        fi
        ;;
    restart)
        echo "Restarting cassandra"
        $0 stop
        $0 start
        ;;
    status)
        su - cassandra -c "$CASSANDRA_DIR/bin/nodetool status"
        ;;
    *)
        echo "Usage:$0 {start|stop|restart|status}"
        exit 1
esac

赋予执行权限:

[root@td1 init.d]# chmod 755 cassandra

加入系统服务:

[root@td1 init.d]# chkconfig --add cassandra

设置开机自启动:

[root@td1 init.d]# chkconfig cassandra on

最后,为了方便,我们将自定义的cassandra命令添加到/usr/bin/目录下:

# 通过软连接实现
[root@td1 ~]# ln -s /etc/rc.d/init.d/cassandra /usr/bin/cassandra

4、测试自定义命令及开机自启功能验证:

启动cassandra服务:

[root@master cassandra]# mkdir /usr/local/cassandra/logs
[root@td1 ~]# cassandra start
Starting cassandra
Cassandra started

重启机器,后查看服务状态:

# 服务自启,状态正常
[root@td1 ~]# cassandra status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address        Load       Tokens       Owns (effective)  Host ID                               Rack
UN  192.168.56.31  446.68 KiB  256          34.1%             28013391-9949-4ab7-aa40-55a8f64e3063  rack1
UN  192.168.56.32  542.04 KiB  256          34.5%             38306861-7888-449c-8b77-7d247ba600ed  rack1
UN  192.168.56.33  579.46 KiB  256          31.4%             13ca40cd-d961-4de0-8675-a87a2384d728  rack1

重启服务:

[root@td1 ~]# cassandra restart
Restarting cassandra
Stopping cassandra
Try stop cassandra
Kill cassandra SUCCESS!
Starting cassandra
Cassandra started

停止服务:

[root@td1 ~]# cassandra stop
Stopping cassandra
Try stop cassandra
Kill cassandra SUCCESS!

关闭开机自启:

[root@td1 ~]# chkconfig cassandra off

jiguiquan@163.com

文章作者信息...

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐