注 :由于Cassandra的内存要求,Cassandra一键应用镜像只能在拥有1GB或Droplet更多的RAM使用。
介绍
Apache的Cassandra是一个开源分布式NoSQL数据库系统,它可以在很多节点处理海量数据集。 本教程将指导您在使用DigitalOceanCassandra一键应用镜像创建一个单个或多个节点的群集以及方法来自动缩放使用Cassandra的集群用户数据 。
创建Cassandra Droplet
要创建第一个CassandraDroplet导航到控制面板中创建快捷批处理页面,选择您的Droplet大小,名称,区域,然后选择Cassandra on 14.04
单击创建快捷批处理之前从应用程序选项卡图像
一旦你的Droplet已经创建,你将有一个单节点Cassandra集群准备在你的Droplet上使用本地。
配置Cassandra
此本地单节点群集有一些限制。 当它第一次推出的Cassandra服务将只监听localhost上的含义,该服务将不会在你CassandraDroplet外部客户端访问。 此外,默认情况下没有启用身份验证服务,这意味着该服务不会提示输入用户名和密码。 我们要做的第一件事是将一些配置设置调整到更理想的状态。
首先,停止Cassandra服务。
service cassandra stop
然后我们将清除Cassandra服务在第一次启动时生成的任何数据,因此我们可以开始一个干净的设置。
rm -rf /var/lib/cassandra/*;
现在我们准备开始修改Cassandra配置文件。 打开文件/etc/cassandra/cassandra.yaml
使用你选择的编辑器。
首先,我们将给我们的集群一个名字。 找到行
cluster_name: 'Test Cluster'
在cassandra.yaml并更改测试集群到您选择的名称。 注意:您在此处选择的名称必须包含在集群中每个节点的配置中。
接下来,我们将允许cassandra在公共网络上监听。 为此,请找到以下行:
listen_address: localhost
和localhost更改您的Droplet的IP地址。
listen_address: 12.34.56.78
我们不能让数据库在公共接口上侦听请求,而不确保我们有一些安全设置,所以接下来我们将启用密码身份验证。 为此,请找到以下行:
authenticator: AllowAllAuthenticator
并将其更改为:
authenticator: PasswordAuthenticator
最后,我们需要指定种子IP地址。 因为这是我们集群中的唯一节点,我们将在这里使用我们的公共IP地址。 查找行:
seeds: "127.0.0.1"
并将其更改为您的Droplet的IP地址。
seeds: "12.34.56.78"
现在我们已经完成了对Cassandra配置的更改,您可以保存更改并退出编辑器。
我们现在可以使用以下命令启动cassandra服务:
service cassandra start
经过我们允许一两分钟的服务来完成它的启动程序,我们可以连接到我们的使用Cassandra服务cqlsh
的CQL外壳。 既然我们已经启用密码认证,但尚未创建,我们将使用默认的用户一个新的用户帐户cassandra
,密码cassandra
。
cqlsh -u cassandra -p cassandra
您应该看到如下所示的内容:
Connected to testCluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 2.1.3 | CQL spec 3.2.0 | Native protocol v3]
Use HELP for help.
cassandra@cqlsh>
显然,我们目前的用户名和密码都不是很安全的,所以我们将创建一个新的用户帐户管理我们的集群,从默认的删除权限cassandra
用户。 首先创建一个新用户作为SUPERUSER:
CREATE USER newadminuser WITH PASSWORD 'mypassword' SUPERUSER;
接下来,我们将cassandra用户的密码更改为难以猜测,并删除它的超级用户状态:
ALTER USER cassandra WITH PASSWORD '89asd9f87as9f879sf' NOSUPERUSER;
现在我们使单节点集群启动并运行,我们创建了一个用户帐户,以便我们对其进行管理。 接下来,我们向集群中添加一些数据。
我们将通过创建一个密钥空间开始。 如果您熟悉其他数据库平台,Cassandra中的键空间与MySQL中的数据库具有相同的作用。 每个键空间可以包括许多数据表。 选项可以创建一个新的密钥空间,在这个例子中,我们将使用一个非常基本的选项来创建一个名为密钥空间时传递Test
:
CREATE KEYSPACE Test WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 3 };
下一步,我们将增加一个非常基本的表称为users
到我们新的密钥空间。
CREATE TABLE Test.users (user_name varchar PRIMARY KEY,password varchar,info varchar);
这将创建3 VARCHAR列可以接受的文本表user_name
设置为PRIMARY KEY。
接下来,让我们向这个新表添加一条记录。
INSERT INTO Test.users (user_name,password,info) VALUES ('JohnDoe','1234','user information goes here');
现在我们可以使用CQL查询查询此信息:
SELECT * from Test.users;
我们应该看到我们的记录返回:
user_name | info | password
-----------+----------------------------+----------
JohnDoe | user information goes here | 1234
(1 rows)
多节点集群
现在我们有Cassanrda作为单节点集群运行允许添加一些更多的节点。 与我们的第一个节点一样,我们将使用Cassandra单击图像创建一个新的Droplet。
一旦我们的新节点被创建,我们可以通过ssh连接到它并执行我们的初始设置。
首先,停止Cassandra服务:
service cassandra stop;
并清除此新节点上迄今为止创建的任何数据:
rm -rf /var/lib/cassandra/*;
现在我们准备开始编辑我们的配置。 打开/etc/cassandra/cassandra.yaml
在您选择的编辑器。
找到cluster_name行,并将其设置为您用于第一个节点的相同值。
cluster_name: 'myCluster'
下一步,我们将确保这个新节点是通过改变公共网络接口上监听listen_address
我们Droplet的IP地址。
listen_address: 12.34.56.90
现在我们将更新种子IP。 我们将其设置为我们的第一个节点的IP地址,以便我们的新节点可以与其同步并加入群集。
seeds: "12.34.56.78"
现在保存并关闭配置文件。
现在我们已经配置了我们的新Droplet加入我们的集群,我们可以启动Cassandra服务。
service cassandra start
这个新节点将需要几分钟的时间才能联机并加入我们的群集。 5分钟左右后,我们可以尝试使用我们的新节点。
cqlsh -u newadminuser -p mypassword
与我们的第一个节点一样,我们现在应该看到一个成功的连接报告:
Connected to testCluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 2.1.3 | CQL spec 3.2.0 | Native protocol v3]
Use HELP for help.
cassandra@cqlsh>
如果你看到一个错误messsage说cqlsh不能连接你可能需要允许一点时间新节点上线。
现在我们连接到我们的新节点,让我们通过对我们在第一个节点上添加的数据运行查询来测试它。
SELECT * from Test.users;
我们应该看到我们的记录返回,就像在我们的第一个节点。
user_name | info | password
-----------+----------------------------+----------
JohnDoe | user information goes here | 1234
(1 rows)
我们现在有一个功能多节点Cassandra集群。
使用用户数据部署节点
对于我们想要添加到我们的簇中的每个Droplet,执行这些步骤中的每一个将是相当耗时的。 幸运的是用户数据,我们可以自动化这个过程。 通过将重要变量传递给我们的Droplet,当它被创建,我们可以让它立即加入我们的群集。 对于这个例子,我们将检查Droplet创建页面上的用户数据复选框,并在下面的脚本中(将红色的值修改为我们的集群和第一个节点的值)。
#!/bin/bash
export CLUSTER_NAME='myCluster';
export SEED_ADDRESS='12.34.56.78';
export IP_ADDRESS=$(curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/ipv4/address);
service cassandra stop;
rm -rf /var/lib/cassandra/*;
sed -i.bak "s/cluster\_name\:\ 'Test Cluster'/cluster\_name\:\ '${CLUSTER_NAME}'/g" /etc/cassandra/cassandra.yaml
sed -i.bak s/authenticator\:\ AllowAllAuthenticator/authenticator\:\ PasswordAuthenticator/g /etc/cassandra/cassandra.yaml;
sed -i.bak s/listen\_address\:\ localhost/listen_address\:\ ${IP_ADDRESS}/g /etc/cassandra/cassandra.yaml;
sed -i.bak s/\-\ seeds\:\ \"127.0.0.1\"/\-\ seeds\:\ \"${SEED_ADDRESS}\"/g /etc/cassandra/cassandra.yaml;
service cassandra start;
让我们分解这个用户数据脚本的作用。 大多数应该是熟悉的。
首先,我们有两个变量,我们需要为我们的新的Droplet,集群名称和种子IP地址(我们的第一个节点的IP)设置。
export CLUSTER_NAME='myCluster';
export SEED_ADDRESS='12.34.56.78';
然后,我们可以使用Droplet元数据获取我们新创建的Droplet的IP地址,并将其分配给一个变量。
export IP_ADDRESS=$(curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/ipv4/address);
接下来,我们将停止Cassandra服务并清除我们的任何现有数据。
service cassandra stop;
rm -rf /var/lib/cassandra/*;
然后我们使用sed命令来查找和替换我们需要改变的配置值。
sed -i.bak "s/cluster\_name\:\ 'Test Cluster'/cluster\_name\:\ '${cluster_name}'/g" /etc/cassandra/cassandra.yaml
sed -i.bak s/authenticator\:\ AllowAllAuthenticator/authenticator\:\ PasswordAuthenticator/g /etc/cassandra/cassandra.yaml;
sed -i.bak s/listen\_address\:\ localhost/listen_address\:\ ${IP_ADDRESS}/g /etc/cassandra/cassandra.yaml;
sed -i.bak s/\-\ seeds\:\ \"127.0.0.1\"/\-\ seeds\:\ \"${SEED_ADDRESS}\"/g /etc/cassandra/cassandra.yaml;
最后,我们用我们的新配置启动Cassandra服务。
service cassandra start;
与手动设置一个附加节点一样,cql服务可能需要几分钟的时间才能在我们的新的Droplet上,但一旦它启动和运行,这个新的节点应该允许我们查询我们的测试键空间和表就像一个手动配置了。
下一步
我们可以将本教程进一步,并使整个过程自动化。 我们创建了一个Ruby脚本, 做-CCC根据本教程中,它利用DigitalOcean API与用户数据一起和Droplet的元数据来自动地部署一个完整的Cassandra集群的步骤。 该脚本将提示您输入集群名称,要部署小组的区域,要创建的节点数以及每个节点的大小,然后为您创建集群。
本指南提供了创建非常基本的Cassandra集群的步骤。 有迹象表明,你的配置可以进行调整和优化许多方面,它是强烈建议审查的Apache Cassandra的文档和其他来源获取有关如何调整你的集群最符合您需求的更多信息。