Cassandra简介:Cassandra是一套开源分布式NoSQL数据库系统
Cassandra官方网站:http://cassandra.apache.org/
下载地址:
https://www.apache.org/dyn/closer.lua/cassandra/4.1.2/apache-cassandra-4.1.2-bin.tar.gz
https://dlcdn.apache.org/cassandra/4.1.2/apache-cassandra-4.1.2-bin.tar.gz
操作系统:3台服务器,CentOS-7.x系统
在所有节点服务器上操作
1、防火墙配置
7000:节点之间的通信端口,用于集群内部节点之间的数据传输和复制。
7001:节点之间的加密通信端口,如果启用了 SSL/TLS 加密通信,则使用该端口进行加密通信。
9042:CQL(Cassandra Query Language)客户端通信端口,用于与 Cassandra 集群进行数据查询和交互
7199:JMX(Java Management Extensions)远程管理端口,用于监控和管理 Cassandra 集群。
CentOS 7.x默认使用的是firewall作为防火墙,这里改为iptables防火墙。
1.1、关闭firewall:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
systemctl mask firewalld
systemctl stop firewalld
yum remove firewalld
1.2、安装iptables防火墙
yum install iptables-services #安装
vi /etc/sysconfig/iptables #编辑防火墙配置文件
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 9042 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 7000 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 7001 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 7199 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
:wq! #保存退出
systemctl restart iptables.service #最后重启防火墙使配置生效
systemctl enable iptables.service #设置防火墙开机启动
/usr/libexec/iptables/iptables.init restart #重启防火墙
2、关闭SELINUX
vi /etc/selinux/config
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! #保存退出
setenforce 0 #使配置立即生效
3、Cassandra依赖java,需要先安装jdk-1.8环境
下载openjdk:https://adoptium.net/zh-CN/temurin/releases
上传OpenJDK8U-jdk_x64_linux_hotspot_8u362b09.tar.gz到/data/soft目录下
安装JDK
#创建jdk安装路径
mkdir -p /data/server/java
#解压
tar -zxvf /data/soft/OpenJDK8U-jdk_x64_linux_hotspot_8u372b07.tar.gz -C /data/server/java
#进入安装目录
cd /data/server/java/jdk8u372-b07
#查看版本信息
./bin/java -version
openjdk version "1.8.0_372"
OpenJDK Runtime Environment (Temurin)(build 1.8.0_372-b07)
OpenJDK 64-Bit Server VM (Temurin)(build 25.372-b07, mixed mode)
#设置环境变量
vi /etc/profile #添加下面的信息
#set java environment
JAVA_HOME=/data/server/java/jdk8u372-b07
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
:wq! #保存退出
#让修改立即生效
source /etc/profile
#查看版本信息
java -version
[root@pgsql-master]# java -version
openjdk version "1.8.0_372"
OpenJDK Runtime Environment (Temurin)(build 1.8.0_372-b07)
OpenJDK 64-Bit Server VM (Temurin)(build 25.372-b07, mixed mode)
#其他版本的jdk安装方法相同
4、Cassandra需要python3才能正常运行
yum install python3 #安装python3
5、创建cassandra运行账号
cassandra进程不能以root用户启动,需要新建普通账号
#创建非特权用户并以该用户身份运行 Cassandra
sudo useradd -m cassandra #创建用户
sudo passwd cassandra #设置密码
6、安装cassandra
上传安装包到/data/soft目录
#新建安装目录
mkdir -p /data/server/cassandra
#解压安装包到安装目录
cd /data/soft
tar -zxvf /data/soft/apache-cassandra-4.1.2-bin.tar.gz -C /data/server/cassandra --strip-components 1
#配置环境变量
vi /etc/profile
#set cassandra environment
export CASSANDRA_HOME=/data/server/cassandra
export PATH=$PATH:$CASSANDRA_HOME/bin
:wq! #保存退出
source /etc/profile #使配置立即生效
#设置目录权限
sudo chown -R cassandra:cassandra /data/server/cassandra
sudo chmod 755 -R /data/server/cassandra
#切换到cassandra用户
su - cassandra
7、编辑配置文件
cp /data/server/cassandra/conf/cassandra.yaml /data/server/cassandra/conf/cassandra.yaml.bak
vi /data/server/cassandra/conf/cassandra.yaml
ssl_storage_port: 7001
storage_port: 7000
native_transport_port: 9042
cluster_name: 'Test Cluster' #集群名称
authenticator: PasswordAuthenticator #启用用户名和密码验证
authorizer: CassandraAuthorizer
listen_address: 192.168.21.100 #修改为各节点的ip地址192.168.21.101、192.168.21.128
rpc_address: 0.0.0.0 #用于接受远程过程调用(RPC)请求的地址,各节点都设置为0.0.0.0
broadcast_rpc_address: 192.168.21.100 #定节点之间进行远程过程调用(RPC)通信时使用的广播地址,修改为各节点的ip地址192.168.21.101、192.168.21.128
- seeds: "192.168.21.100,192.168.21.101,127.0.0.1" #种子节点的地址,3节点集群建议设置2个种子节点,设置为节点1和节点2的ip:192.168.21.100,192.168.21.101
native_transport_max_concurrent_connections: -1 #最大连接数,默认是-1没有限制
read_consistency_level: QUORUM #读操作的默认一致性级别
write_consistency_level: QUORUM #写操作的默认一致性级别
:wq! #保存退出
/data/server/cassandra/bin/cassandra #启动 Cassandra 服务,在每个节点都执行
/data/server/cassandra/bin/nodetool status #查看 Cassandra 集群状态
参数说明:
"UN" (Up and Normal): 表示节点正常运行,并参与数据读写操作。
"DN" (Down): 表示节点处于停机状态,无法参与数据读写操作。
"UL" (Up and Leaving): 表示节点正在离开集群。
"UJ" (Up and Joining): 表示节点正在加入集群。
"UM" (Up and Moving): 表示节点正在移动到新的位置。
"NR" (Non-Responsing): 表示节点无响应,可能由于网络或其他问题导致无法与节点通信。
#测试cassandra服务
telnet 127.0.0.1 9042
telnet locahost 9042
telnet 192.168.21.100 9042
#进入控制台
cd /data/server/cassandra/bin
./cqlsh -u cassandra -p cassandra
./cqlsh 127.0.0.1 -u cassandra -p cassandra
./cqlsh localhost -u cassandra -p cassandra
./cqlsh 192.168.21.100 -u cassandra -p cassandra
exit #退出控制台
/data/server/cassandra/bin/nodetool stopdaemon #停止 Cassandra 服务
8、添加cassandra启动脚本
vi /data/server/cassandra/cassandra.sh
#!/bin/bash
# Cassandra 安装路径
CASSANDRA_HOME=/data/server/cassandra
start() {
# 启动 Cassandra
$CASSANDRA_HOME/bin/cassandra -R
echo "Cassandra started."
}
stop() {
# 停止 Cassandra
$CASSANDRA_HOME/bin/nodetool stopdaemon
echo "Cassandra stopped."
}
status() {
# 查看 Cassandra 状态
$CASSANDRA_HOME/bin/nodetool status
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
:wq! #保存退出
#添加执行权限
chmod +x /data/server/cassandra/cassandra.sh
#启动 Cassandra
/data/server/cassandra/cassandra.sh start
#关闭 Cassandra
/data/server/cassandra/cassandra.sh stop
#重启 Cassandra
/data/server/cassandra/cassandra.sh restart
#查看 Cassandra 状态
/data/server/cassandra/cassandra.sh status
9、修改cassandra默认账号登录密码、创建新账号、创建键空间、创建表
#在一个节点执行即可
#登录控制台,默认账号和密码都是cassandra
cd /data/server/cassandra/bin
./cqlsh -u cassandra -p cassandra
#修改默认用户密码
ALTER USER cassandra WITH PASSWORD '123456';
#创建用户,一个是超级管理员权限superuser,一种是普通账号nosuperuser
CREATE USER autoops WITH PASSWORD '123456' NOSUPERUSER ;
#在 Cassandra 集群中创建键空间时,只需要在集群中的一个节点上执行创建键空间的命令即可。创建键空间的操作会自动将键空间的元数据同步到整个集群中的所有节点。
#创建键空间,建议设置的副本数应该大于等于节点的数量。这样可以确保数据在整个集群中都有多个副本,增强数据的冗余和可用性。
CREATE KEYSPACE autoops_workbench WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor': 3} AND DURABLE_WRITES = true;
键空间名称: autoops_workbench
SimpleStrategy: 是一种简单的复制策略
replication_factor 设置为 1: 表示只在一个节点上进行复制。
DURABLE_WRITES 参数设置为 true:表示将启用持久化写入
#授予 "autoops" 用户在 "autoops_workbench" 键空间中的所有表和权限,包括创建、读取、更新和删除等操作的权限。
GRANT ALL PERMISSIONS ON KEYSPACE autoops_workbench TO autoops;
#查看键空间
DESCRIBE KEYSPACES;
DESCRIBE KEYSPACE autoops_workbench;
#删除用户
DROP USER autoops ;
#删除键空空间
DROP KEYSPACE autoops_workbench;
#创建表
cd /data/server/cassandra/bin
./cqlsh -u cassandra -p 123456
CREATE TABLE autoops_workbench.table_users (id UUID PRIMARY KEY,name text,age int);
#删除表
DROP TABLE autoops_workbench.table_users;
#删除表中的所有数据,但保留表结构
TRUNCATE TABLE autoops_workbench.table_users;
#插入数据
INSERT INTO autoops_workbench.table_users (id, name, age) VALUES (uuid(), 'John Doe', 30);
INSERT INTO autoops_workbench.table_users (id, name, age) VALUES (uuid(), 'smith Doe', 32);
#删除一条数据
DELETE FROM autoops_workbench.table_users WHERE id = 1c292d58-a429-459f-b19e-adee4ab9bd63;
my_keyspace:键空间的
table_users:表
id、name 、 age:列
1, John Doe,30:对应的列值
10、测试cassandra集群
#在一个 3 节点集群中,最多可以容忍一个节点的故障,即一个节点失效时集群仍然能够正常运行。当超过一个节点发生故障时,集群将无法提供完整的数据服务。
#如果同时有两个节点(包括两个种子节点)发生故障,集群将无法正常工作,因为没有足够的节点来提供数据的一致性和可用性。
#在 Cassandra 3 节点集群中,通常不建议设置所有节点都作为种子节点。种子节点的作用是引导新加入的节点,并帮助它们发现集群中的其他节点。设置太多的种子节点可能会导致节点之间的通信负担过重,从而影响集群性能。
#5节点集群中,建议设置3个节点作为种子节点
10.1登录其中一台节点192.168.21.100
cd /data/server/cassandra/bin
./cqlsh -u cassandra -p 123456
#插入数据
INSERT INTO autoops_workbench.table_users (id, name, age) VALUES (uuid(), 'test1', 30);
10.2在其他节点查看数据
SELECT * FROM autoops_workbench.table_users;
10.3关闭192.168.21.100上的Cassandra
/data/server/cassandra/cassandra.sh stop
10.4继续在其他节点插入数据
INSERT INTO autoops_workbench.table_users (id, name, age) VALUES (uuid(), 'test2', 30);
10.5启动192.168.21.100上的Cassandra
/data/server/cassandra/cassandra.sh start
10.6在192.168.21.100节点查看数据
cd /data/server/cassandra/bin
./cqlsh -u cassandra -p 123456
SELECT * FROM autoops_workbench.table_users;
10.7相关命令
nodetool repair #修复 Cassandra 集群中的数据不一致
nodetool status #检查修复后的集群状态
nodetool describecluster #查看Cassandra集群中有几个数据中心
11、使用客户端登录数据库
Windows下可以使用DBeaver客户端进行登录
注意:DBeaver默认没有cassandra驱动,需要先导入驱动才能连接cassandra数据库
驱动下载:
https://downloads.datastax.com/jdbc/cql/2.0.12.1013/SimbaCassandraJDBC42-2.0.12.1013.zip
ip:192.168.21.100
端口:9042
用户名:cassandra
密码:123456
至此,Linux下Cassandra集群安装部署完成。