如何在Ubuntu14.04上使用Cassandra运行多节点集群数据库
介绍
Apache Cassandra 是一个高度可扩展的开源数据库系统,在多节点设置上实现了出色的性能。
之前,我们讨论了如何运行单节点Cassandra集群。 在本教程中,您将学习如何安装和使用 Cassandra 在 Ubuntu 14.04 上运行多节点集群。
先决条件
因为您将要构建一个多节点 Cassandra 集群,所以您必须确定您希望在集群中拥有多少台服务器并配置每台服务器。 建议但不要求它们具有相同或相似的规格。
要完成本教程,您需要以下内容:
- 使用 this initial setup guide 配置至少两台 Ubuntu 14.04 服务器。
- 必须使用 this IPTables guide 使用防火墙保护每台服务器。
- 每台服务器还必须按照 这个 Cassandra 安装指南 安装 Cassandra。
第 1 步 — 删除默认数据
Cassandra 集群中的服务器称为 节点 。 您现在在每台服务器上拥有的是一个单节点 Cassandra 集群。 在这一步中,我们将设置节点以充当多节点 Cassandra 集群。
必须在集群中的每个节点上重复此步骤和后续步骤中的所有命令,因此请确保打开与集群中的节点一样多的终端。
您将在每个节点上运行的第一个命令将停止 Cassandra 守护程序。
sudo service cassandra stop
完成后,删除默认数据集。
sudo rm -rf /var/lib/cassandra/data/system/*
第 2 步 — 配置集群
Cassandra 的配置文件位于 /etc/cassandra
目录中。 该配置文件 cassandra.yaml
包含许多指令并且注释很好。 在这一步中,我们将修改该文件以设置集群。
只需修改以下指令即可设置多节点 Cassandra 集群:
cluster_name
:这是您的集群的名称。-seeds
:这是集群中每个节点的 IP 地址的逗号分隔列表。listen_address
:这是集群中其他节点将用来连接到此节点的 IP 地址。 默认为localhost,需要改成节点的IP地址。rpc_address
:这是远程过程调用的 IP 地址。 默认为 localhost。 如果服务器的主机名配置正确,请保持原样。 否则,更改为服务器的 IP 地址或环回地址(127.0.0.1
)。endpoint_snitch
:告密者的名字,它告诉 Cassandra 它的网络是什么样的。 默认为 SimpleSnitch,用于一个数据中心的网络。 在我们的例子中,我们将其更改为 GossipingPropertyFileSnitch,这是生产设置的首选。auto_bootstrap
:该指令不在配置文件中,所以必须添加并设置为false。 这使得新节点自动使用正确的数据。 如果您要向现有集群添加节点,则它是可选的,但在初始化新集群(即没有数据的集群)时是必需的。
使用 nano
或您喜欢的文本编辑器打开配置文件进行编辑。
sudo nano /etc/cassandra/cassandra.yaml
在文件中搜索以下指令并按如下方式修改它们以匹配您的集群。 将 your_server_ip
替换为您当前正在使用的服务器的 IP 地址。 - seeds:
列表在每台服务器上都应该相同,并且将包含用逗号分隔的每台服务器的 IP 地址。
/etc/cassandra/cassandra.yaml
. . . cluster_name: 'CassandraDOCluster' . . . seed_provider: - class_name: org.apache.cassandra.locator.SimpleSeedProvider parameters: - seeds: "your_server_ip,your_server_ip_2,...your_server_ip_n" . . . listen_address: your_server_ip . . . rpc_address: your_server_ip . . . endpoint_snitch: GossipingPropertyFileSnitch . . .
在文件的底部,通过粘贴以下行添加 auto_bootstrap
指令:
/etc/cassandra/cassandra.yaml
auto_bootstrap: false
完成文件修改后,保存并关闭它。 对要包含在集群中的所有服务器重复此步骤。
第 3 步 — 配置防火墙
至此,集群已经配置完成,但是节点没有通信。 在这一步中,我们将配置防火墙以允许 Cassandra 流量。
首先,在每个设备上重新启动 Cassandra 守护程序。
sudo service cassandra start
如果您检查集群的状态,您会发现只列出了本地节点,因为它还不能与其他节点通信。
sudo nodetool status
输出
Datacenter: datacenter1 ======================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 192.168.1.4 147.48 KB 256 ? f50799ee-8589-4eb8-a0c8-241cd254e424 rack1 Note: Non-system keyspaces don't have the same replication settings, effective ownership information is meaningless
为了允许通信,我们需要为每个节点打开以下网络端口:
7000
,是命令和数据的 TCP 端口。9042
,这是本机传输服务器的 TCP 端口。 Cassandra 命令行实用程序cqlsh
将通过此端口连接到集群。
要修改防火墙规则,请打开 IPv4 的规则文件。
sudo nano /etc/iptables/rules.v4
在 INPUT 链中复制并粘贴以下行,这将允许上述端口上的流量。 如果您使用的是防火墙教程中的 rules.v4
文件,您可以在 # Reject anything that's fallen through to this point
注释之前插入以下行。
-s
指定的IP地址应该是集群中另一个节点的IP地址。 如果您有两个 IP 地址为 111.111.111.111
和 222.222.222.222
的节点,则 111.111.111.111
机器上的规则应使用 IP 地址 222.222.222.222
。
新的防火墙规则
-A INPUT -p tcp -s your_other_server_ip -m multiport --dports 7000,9042 -m state --state NEW,ESTABLISHED -j ACCEPT
添加规则后,保存并关闭文件,然后重新启动 IPTables。
sudo service iptables-persistent restart
第 4 步 — 检查集群状态
我们现在已经完成了将节点变成多节点集群所需的所有步骤。 您可以通过检查它们的状态来验证它们是否都在进行通信。
sudo nodetool status
输出
Datacenter: datacenter1 ======================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 192.168.1.4 147.48 KB 256 ? f50799ee-8589-4eb8-a0c8-241cd254e424 rack1 UN 192.168.1.6 139.04 KB 256 ? 54b16af1-ad0a-4288-b34e-cacab39caeec rack1 Note: Non-system keyspaces don't have the same replication settings, effective ownership information is meaningless
如果您可以看到您配置的所有节点,那么您刚刚成功设置了一个多节点 Cassandra 集群。
您还可以检查是否可以使用 Cassandra 命令行客户端 cqlsh
连接到集群。 请注意,您可以为此命令指定集群中任何节点的 IP 地址。
cqlsh your_server_ip 9042
你会看到它连接:
输出
Connected to My DO Cluster at 192.168.1.6:9042. [cqlsh 5.0.1 | Cassandra 2.2.3 | CQL spec 3.3.1 | Native protocol v4] Use HELP for help. cqlsh>
然后您可以退出 CQL 终端。
exit
结论
恭喜! 您现在有一个在 Ubuntu 14.04 上运行的多节点 Cassandra 集群。 有关 Cassandra 的更多信息,请访问 项目的网站 。 如果需要对集群进行故障排除,首先要寻找线索的地方是日志文件,日志文件位于/var/log/cassandra
目录下。