使用 Apache Cassandra 构建分布式 NoSQL 数据库

从头开始设置一个基本的三节点 Cassandra 集群,并带有一些用于复制和未来扩展的额外配置。
123 位读者喜欢这篇文章。
Woman programming

WOCinTech Chat。由 Opensource.com 修改。CC BY-SA 4.0

最近,我收到一个紧急请求,需要为一个开发工作搭建一个复制因子为 2 的三节点 Apache Cassandra 集群。我对这意味着什么知之甚少,但需要快速弄清楚——这是系统管理员工作中典型的一天。

以下是如何从头开始设置一个基本的三节点 Cassandra 集群,并带有一些用于复制和未来节点扩展的额外配置。

所需的基本节点

首先,您需要一些基本的 Linux 机器。对于生产环境安装,您可能会将物理机器放置在机架、数据中心和不同的位置。对于开发,您只需要一些尺寸适合您的开发规模的东西。我使用了 VMware 上的三台 CentOS 7 虚拟机,它们具有 20GB 精简配置磁盘、两个处理器和 4GB 内存。这三台机器分别称为:CS1 (192.168.0.110)、CS2 (192.168.0.120) 和 CS3 (192.168.0.130)。

首先,在每台机器上进行 CentOS 7 的最小化操作系统安装。要在 CentOS 生产环境中使用它,请考虑调整您的 firewalldSELinux。由于此集群仅用于初始开发,我关闭了它们。

唯一其他的要求是 OpenJDK 1.8 安装,它可以从 CentOS 仓库获得。

安装

在每台机器上创建一个 cass 用户帐户。为了确保节点之间没有差异,强制在每个安装上使用相同的 UID

$ useradd --create-home \
--uid 1099 cass
$ passwd cass

下载当前版本的 Apache Cassandra(在我撰写本文时为 3.11.4)。将 Cassandra 归档文件解压到 cass 主目录中,如下所示

$ tar zfvx apache-cassandra-3.11.4-bin.tar.gz

完整的软件包含在 ~cass/apache-cassandra-3.11.4 中。对于快速开发试用,这很好。数据文件在那里,conf/ 目录包含将这些节点调整为真实集群所需的重要部分。

配置

开箱即用,Cassandra 作为本地主机单节点集群运行。这对于快速浏览很方便,但这里的目标是一个真正的集群,外部客户端可以访问它,并且可以选择在开发和测试需要扩展时添加额外的节点。需要查看的两个配置文件是 conf/cassandra.yamlconf/cassandra-rackdc.properties

首先,编辑 conf/cassandra.yaml 以设置集群名称、网络和远程过程调用 (RPC) 接口;定义对等节点;并更改路由请求和复制的策略。

在每个集群节点上编辑 conf/cassandra.yaml

更改集群名称,使其在每个节点上都相同: 

cluster_name: 'DevClust'

更改以下两个条目以匹配您正在处理的节点的primary IP 地址

listen_address: 192.168.0.110
rpc_address:  192.168.0.110

找到 seed_provider 条目并查找 - seeds: 配置行。编辑每个节点以包含所有节点

        - seeds: "192.168.0.110, 192.168.0.120, 192.168.0.130"

这使本地 Cassandra 实例能够看到其所有对等节点(包括自身)。

查找 endpoint_snitch 设置并将其更改为

endpoint_snitch: GossipingPropertyFileSnitch

endpoint_snitch 设置使以后需要加入新节点时具有灵活性。Cassandra 文档指出 GossipingPropertyFileSnitch 是生产环境使用的首选设置;它也是设置将在下面介绍的复制策略所必需的。

保存并关闭 cassandra.yaml 文件。

打开 conf/cassandra-rackdc.properties 文件并更改 dc=rack= 的默认值。它们可以是任何唯一的并且不与其他本地安装冲突的值。对于生产环境,您将更多地考虑如何组织您的机架和数据中心。对于此示例,我使用了通用名称,例如

dc=NJDC
rack=rack001

启动集群

在每个节点上,登录到安装了 Cassandra 的帐户(在此示例中为 cass),输入 cd apache-cassandra-3.11.4/bin,然后运行 ./cassandra。终端将打印一长串消息,Java 进程将在后台运行。

确认集群

在登录到 Cassandra 用户帐户后,转到 bin 目录并运行 $ ./nodetool status。如果一切顺利,您将看到类似以下内容

$ ./nodetool status
INFO  [main] 2019-08-04 15:14:18,361 Gossiper.java:1715 - No gossip backlog; proceeding
Datacenter: NJDC
================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address       Load       Tokens       Owns (effective)  Host ID                               Rack
UN  192.168.0.110  195.26 KiB  256          69.2%             0abc7ad5-6409-4fe3-a4e5-c0a31bd73349  rack001
UN  192.168.0.120  195.18 KiB  256          63.0%             b7ae87e5-1eab-4eb9-bcf7-4d07e4d5bd71  rack001
UN  192.168.0.130  117.96 KiB  256          67.8%             b36bb943-8ba1-4f2e-a5f9-de1a54f8d703  rack001

这意味着集群可以看到所有节点并打印一些有趣的信息。

请注意,如果 cassandra.yaml 使用默认的 endpoint_snitch: SimpleSnitch,则上面的 nodetool 命令会将默认位置指示为 Datacenter: datacenter1,并将机架指示为 rack1。在上面的示例输出中,cassandra-racdc.properties 值是显而易见的。

运行一些 CQL

这是复制因子设置发挥作用的地方。

创建一个复制因子为 2 的键空间。从任何一个集群节点,转到 bin 目录并运行 ./cqlsh 192.168.0.130(替换为适当的集群节点 IP 地址)。您可以使用以下命令查看默认的管理键空间

cqlsh> SELECT * FROM system_schema.keyspaces;

 keyspace_name      | durable_writes | replication
--------------------+----------------+-------------------------------------------------------------------------------------
        system_auth |           True | {'class': 'org.apache.cassandra.locator.SimpleStrategy', 'replication_factor': '1'}
      system_schema |           True |                             {'class': 'org.apache.cassandra.locator.LocalStrategy'}
 system_distributed |           True | {'class': 'org.apache.cassandra.locator.SimpleStrategy', 'replication_factor': '3'}
             system |           True |                             {'class': 'org.apache.cassandra.locator.LocalStrategy'}
      system_traces |           True | {'class': 'org.apache.cassandra.locator.SimpleStrategy', 'replication_factor': '2'}

创建一个新的复制因子为 2 的键空间,插入一些行,然后回忆一些数据

cqlsh> CREATE KEYSPACE TestSpace WITH replication = {'class': 'NetworkTopologyStrategy', 'NJDC' : 2};
cqlsh> select * from system_schema.keyspaces where keyspace_name='testspace';

 keyspace_name | durable_writes | replication
---------------+----------------+--------------------------------------------------------------------------------
     testspace |           True | {'NJDC': '2', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}
cqlsh> use testspace;
cqlsh:testspace> create table users ( userid int PRIMARY KEY, email text, name text );
cqlsh:testspace> insert into users (userid, email, name) VALUES (1, 'jd@somedomain.com', 'John Doe');
cqlsh:testspace> select * from users;

 userid | email             | name
--------+-------------------+----------
      1 | jd@somedomain.com | John Doe

现在您已经有一个基本的三节点 Cassandra 集群正在运行,并已准备好进行一些开发和测试工作。CQL 语法类似于标准 SQL,正如您从熟悉的命令中看到的,可以创建表、插入和查询数据。

结论

Apache Cassandra 看起来像是一个有趣的 NoSQL 集群数据库,我期待着更深入地研究它的用途。这个简单的设置仅触及了可用选项的表面。我希望这个三节点入门指南也能帮助您开始使用它。

接下来阅读什么
James Farrell
我是一位长期的 UNIX 系统管理员和开源倡导者。近年来,我的主要重点一直是 Linux 和 FreeBSD 系统管理、网络、电信和 SAN/存储管理。我喜欢构建基础设施、将系统连接在一起、创建流程以及将人们聚集在一起以支持他们的技术努力。

评论已关闭。

© 2025 open-source.net.cn. All rights reserved.