在 Red Hat 8 中安装和配置 Cassandra

本文将介绍如何在 Red Hat 8 的系统中安装和配置 Cassandra,以及如何使用基本的命令和 CQL 操作数据库。

发布于

Cassandra 是一个分布式的 NoSQL 数据库,它可以提供高可用性,高扩展性,高性能和一致性的数据存储服务。Cassandra 的主要特点是:

  • 使用环形架构,没有单点故障
  • 支持多数据中心和云平台的部署
  • 提供灵活的数据模型,支持动态列和多种数据类型
  • 提供 CQL (Cassandra Query Language) 作为 SQL 的变体,方便用户操作数据
  • 提供多种客户端驱动,支持多种编程语言

本文将介绍如何在 Red Hat 8 的系统中安装和配置 Cassandra,以及如何使用基本的命令和 CQL 操作数据库。

先决条件

在开始安装和配置 Cassandra 之前,您需要准备以下内容:

  • 一台或多台运行 Red Hat 8 的服务器,具有 root 权限或 sudo 权限
  • 确保服务器之间可以通过网络互相访问,如果使用防火墙,需要开放以下端口:
    • TCP 端口 7000:用于节点之间的通信
    • TCP 端口 7001:用于节点之间的加密通信
    • TCP 端口 7199:用于 JMX 监控
    • TCP 端口 9042:用于 CQL 客户端连接
    • TCP 端口 9160:用于 Thrift 客户端连接
  • 安装 Java 8 或更高版本,可以使用 java -version 命令检查 Java 的版本
  • 下载 Cassandra 的二进制包,可以从 官网 或者 镜像站点 获取最新的版本,本文使用的是 4.0.1 版本

安装 Cassandra

在每台服务器上执行以下步骤,安装 Cassandra:

解压下载的 Cassandra 的二进制包,可以使用以下命令:

tar -xzvf apache-cassandra-4.0.1-bin.tar.gz

将解压后的目录移动到 /opt 目录下,可以使用以下命令:

sudo mv apache-cassandra-4.0.1 /opt/cassandra

创建一个名为 cassandra 的用户和用户组,用于运行 Cassandra,可以使用以下命令:

sudo groupadd cassandra
sudo useradd -g cassandra -d /opt/cassandra cassandra

更改 Cassandra 目录和子目录的所有者和权限,可以使用以下命令:

sudo chown -R cassandra:cassandra /opt/cassandra
sudo chmod -R 755 /opt/cassandra

创建 Cassandra 的数据目录,日志目录,缓存目录,可以使用以下命令:

sudo mkdir -p /var/lib/cassandra/data
sudo mkdir -p /var/lib/cassandra/commitlog
sudo mkdir -p /var/lib/cassandra/saved_caches
sudo mkdir -p /var/log/cassandra

更改这些目录的所有者和权限,可以使用以下命令:

sudo chown -R cassandra:cassandra /var/lib/cassandra
sudo chown -R cassandra:cassandra /var/log/cassandra
sudo chmod -R 755 /var/lib/cassandra
sudo chmod -R 755 /var/log/cassandra

配置 Cassandra

在每台服务器上执行以下步骤,配置 Cassandra:

编辑 Cassandra 的配置文件 /opt/cassandra/conf/cassandra.yaml,可以使用以下命令:

sudo vi /opt/cassandra/conf/cassandra.yaml

在配置文件中,修改以下参数,根据您的实际情况进行调整:

cluster_name: "MyCassandraCluster" # 集群的名称,需要保持一致
num_tokens: 256 # 每个节点分配的令牌数量,建议使用 256
seed_provider: # 种子节点的提供者,需要包含至少一个种子节点的地址
  - class_name: org.apache.cassandra.locator.SimpleSeedProvider
    parameters:
      - seeds: "192.168.1.10" # 种子节点的地址,用逗号分隔,建议使用至少两个种子节点
listen_address: 192.168.1.10 # 本地节点的地址,用于节点之间的通信,不能使用 0.0.0.0 或 127.0.0.1
rpc_address: 192.168.1.10 # 本地节点的地址,用于客户端连接,不能使用 0.0.0.0,可以使用 127.0.0.1
endpoint_snitch: GossipingPropertyFileSnitch # 节点的信息提供者,建议使用 GossipingPropertyFileSnitch

编辑 Cassandra 的环境变量文件 /opt/cassandra/conf/cassandra-env.sh,可以使用以下命令:

sudo vi /opt/cassandra/conf/cassandra-env.sh

在环境变量文件中,修改以下参数,根据您的实际情况进行调整:

MAX_HEAP_SIZE="4G" # Cassandra 的最大堆内存大小,建议使用物理内存的四分之一
HEAP_NEWSIZE="800M" # Cassandra 的新生代堆内存大小,建议使用最大堆内存大小的四分之一
JVM_OPTS="$JVM_OPTS -Dcassandra.ring_delay_ms=30000" # Cassandra 的环形延迟时间,建议使用 30000 毫秒

编辑 Cassandra 的拓扑文件 /opt/cassandra/conf/cassandra-rackdc.properties,可以使用以下命令:

sudo vi /opt/cassandra/conf/cassandra-rackdc.properties

在拓扑文件中,修改以下参数,根据您的实际情况进行调整:

dc=DC1 # 数据中心的名称,需要保持一致
rack=RAC1 # 机架的名称,可以根据不同的服务器进行区分

启动 Cassandra

在每台服务器上执行以下步骤,启动 Cassandra:

切换到 cassandra 用户,可以使用以下命令:

sudo su - cassandra

运行 Cassandra 的启动脚本,可以使用以下命令:

/opt/cassandra/bin/cassandra

检查 Cassandra 的运行状态,可以使用以下命令:

/opt/cassandra/bin/nodetool status

如果看到类似以下的输出,说明 Cassandra 已经成功启动,并且节点之间已经形成了集群:

Datacenter: DC1
================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address       Load       Tokens       Owns    Host ID                               Rack
UN  192.168.1.10  223.77 KiB  256          ?       3c9a7f6a-9c8d-4f0f-9a2c-4b4a0c1f0f0f  RAC1
UN  192.168.1.11  223.77 KiB  256          ?       5a9f7f6a-9c8d-4f0f-9a2c-4b4a0c1f0f0f  RAC1
UN  192.168.1.12  223.77 KiB  256          ?       6a9f7f6a-9c8d-4f0f-9a2c-4b4a0c1f0f0f  RAC1

操作 Cassandra

在任意一台服务器上执行以下步骤,操作 Cassandra:

运行 Cassandra 的命令行工具 cqlsh,可以使用以下命令:

/opt/cassandra/bin/cqlsh 192.168.1.10

如果看到类似以下的输出,说明已经成功连接到 Cassandra 的节点:

Connected to MyCassandraCluster at 192.168.1.10:9042.
[cqlsh 6.0.0 | Cassandra 4.0.1 | CQL spec 3.4.5 | Native protocol v5]
Use HELP for help.
cqlsh>

cqlsh 中,可以使用 CQL 语句操作数据库,比如创建键空间,创建表,插入数据,查询数据等。例如,可以使用以下语句创建一个名为 test 的键空间,使用 SimpleStrategy 作为复制策略,复制因子为 3:

CREATE KEYSPACE test WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};

可以使用以下语句切换到 test 键空间:

USE test;

可以使用以下语句创建一个名为 users 的表,包含 idnameageemail 四个字段,其中 id 作为主键:

CREATE TABLE users (
  id int PRIMARY KEY,
  name text,
  age int,
  email text
);

可以使用以下语句插入一些数据到 users 表中:

INSERT INTO users (id, name, age, email) VALUES (1, 'Alice', 25, '[email protected]');
INSERT INTO users (id, name, age, email) VALUES (2, 'Bob', 30, '[email protected]');
INSERT INTO users (id, name, age, email) VALUES (3, 'Charlie', 35, '[email protected]');

可以使用以下语句查询 users 表中的所有数据:

SELECT * FROM users;

如果看到类似以下的输出,说明数据已经成功插入和查询:

 id | name    | age | email
----+---------+-----+--------------------
  1 |   Alice |  25 | [email protected]
  2 |     Bob |  30 |   [email protected]
  3 | Charlie |  35 | [email protected]

可以使用以下语句更新 users 表中的某些数据,比如将 id 为 1 的用户的 age 改为 26:

UPDATE users SET age = 26 WHERE id = 1;

可以使用以下语句删除 users 表中的某些数据,比如将 id 为 3 的用户删除:

DELETE FROM users WHERE id = 3;

可以使用以下语句退出 cqlsh

EXIT;

结论

本文介绍了如何在 Red Hat 8 的系统中安装和配置 Cassandra,以及如何使用基本的命令和 CQL 操作数据库。Cassandra 是一个强大的分布式 NoSQL 数据库,可以满足大数据场景下的数据存储需求。