<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>服务器安全维护工作室 &#187; Apache Cassandra 的集群配置</title>
	<atom:link href="https://www.fuwuqiok.com/tag/apache-cassandra-%e7%9a%84%e9%9b%86%e7%be%a4%e9%85%8d%e7%bd%ae/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.fuwuqiok.com</link>
	<description></description>
	<lastBuildDate>Sun, 01 Mar 2020 07:28:40 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.26</generator>
	<item>
		<title>Apache Cassandra 的集群配置</title>
		<link>https://www.fuwuqiok.com/apache-cassandra-%e7%9a%84%e9%9b%86%e7%be%a4%e9%85%8d%e7%bd%ae/</link>
		<comments>https://www.fuwuqiok.com/apache-cassandra-%e7%9a%84%e9%9b%86%e7%be%a4%e9%85%8d%e7%bd%ae/#comments</comments>
		<pubDate>Tue, 01 Dec 2015 14:32:23 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[网站代维]]></category>
		<category><![CDATA[Apache Cassandra 的集群配置]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=2794</guid>
		<description><![CDATA[<p>Apache Cassandra 是 NoSQL 阵营产品中重要的成员之一，因为 Cassandra 使用了去 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/apache-cassandra-%e7%9a%84%e9%9b%86%e7%be%a4%e9%85%8d%e7%bd%ae/">Apache Cassandra 的集群配置</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<div class="entry-content">
<p><a href="http://cassandra.apache.org/">Apache Cassandra</a> 是 <a href="http://nosql-database.org/">NoSQL</a> 阵营产品中重要的成员之一，因为 Cassandra 使用了去中心化的模式（类似 memcached）， 因此使用它搭建集群非常简单。下面简述使用 Cassandra 0.7 搭建集群的过程。</p>
<h2>1、基本配置</h2>
<p>首先需要准备3台或以上的计算机。下面假定有3台运行 Linux 操作系统的计算机，IP地址分别为 192.168.0.100, 192.168.0.101 和 192.168.0.102。 系统需要安装好 Java 运行时环境，然后到<a href="http://cassandra.apache.org/">这里下载</a> 0.7 版本的 Cassandra 二进制发行包。</p>
<p>挑选其中的一台机开始配置，先展开 cassandra 发行包：</p>
<pre lang="bash">$ tar -zxvf apache-cassandra-$VERSION.tar.gz
$ cd apache-cassandra-$VERSION</pre>
<p>其中的 conf/cassandra.yaml 文件为主要配置文件，0.7 版以后不再采用XML格式配置文件了，如果对 YAML 格式不熟悉的话最好先<a href="http://www.yaml.org/">到这里了解</a>一下。</p>
<p>Cassandra 在配置文件里默认设定了几个目录：</p>
<pre lang="config">data_file_directories: /var/lib/cassandra/data
commitlog_directory: /var/lib/cassandra/commitlog
saved_caches_directory: /var/lib/cassandra/saved_caches</pre>
<p>data_file_directories 可以一次同时设置几个不同目录，cassandra 会自动同步所有目录的数据。另外在日志配置文件 log4j-server.properties 也有一个默认设定日志文件的目录：</p>
<pre lang="config">log4j.appender.R.File=/var/log/cassandra/system.log</pre>
<p>一般情况下采用默认的配置即可，除非你有特殊的储存要求，所以现在有两种方案：一是按照默认配置创建相关的目录，二是修改配置文件采用自己指定的目录。</p>
<p>下面为了简单起见采用第一种方案：</p>
<pre lang="bash">$ sudo mkdir -p /var/log/cassandra
$ sudo chown -R `whoami` /var/log/cassandra
$ sudo mkdir -p /var/lib/cassandra
$ sudo chown -R `whoami` /var/lib/cassandra</pre>
<p>上面的 `whoami` 是 Linux 指令用于获取当前登录的用户名，如果你不准备用当前登录用户运行 Cassandra，那么需要把 `whoami` 替换成具体的用户名。</p>
<h2>2、有关集群的配置</h2>
<p>由于 Cassandra 采用去中心化结构，所以当集群里的一台机器（节点）启动之后需要一个途径通知当前集群（有新节点加入啦），Cassandra 的配置文件里有一个 seeds 的设置项，所谓的 seeds 就是能够联系集群中所有节点的一台计算机，假如集群中所有的节点位于同一个机房同一个子网，那么只要随意挑选几台比较稳定的计算机即可。在当前的例子中因 为只有3台机器，所以我挑选第一台作为种子节点，配置如下：</p>
<pre lang="config"> seeds:
- 192.168.0.100</pre>
<p>然后配置节点之前通信的IP地址：</p>
<pre lang="config">listen_address: 192.168.0.100</pre>
<p>需要注意的是这里必须使用具体的IP地址，而不能使用 0.0.0.0 这样的地址。</p>
<p>配置 Cassandra Thrift 客户端（应用程序）访问的IP地址：</p>
<pre lang="config">rpc_address: 192.168.0.100</pre>
<p>这项可以使用 0.0.0.0 监听一台机器所有的网络接口。</p>
<p>Cassandra 的 Keyspaces 和 ColumnFamilies 不再需要配置了，他们将在运行时创建和维护。</p>
<p>把配置好的 Cassandra 复制到第2和第3台机器，同时创建相关的目录，还需要修改 listen_address 和 rpc_address 为实际机器的IP地址。至此所有的配置完成了。</p>
<h2> 3、启动 Cassandra 各个节点以及集群管理</h2>
<p>启动顺序没什么所谓，只要保证种子节点启动就可以了：</p>
<pre lang="bash">$ bin/cassandra -f</pre>
<p>参数 -f 的作用是让 Cassandra 以前端程序方式运行，这样有利于调试和观察日志信息，而在实际生产环境中这个参数是不需要的（即 Cassandra 会以 daemon 方式运行）。</p>
<p>所有节点启动后可以通过 bin/nodetool 工具管理集群，比如查看所有节点运行情况：</p>
<p>&nbsp;</p>
<pre lang="bash">$ bin/nodetool -host 192.168.0.101 ring</pre>
<p>运行结果类似如下：</p>
<pre lang="">Address Status State Load Owns Token
159559...
192.168.0.100 Up Normal 49.27 KB 39.32% 563215...
192.168.0.101 Up Normal 54.42 KB 16.81% 849292...
192.168.0.102 Up Normal 73.14 KB 43.86% 159559...</pre>
<p>命令中 -host 参数用于指定 nodetool 跟哪一个节点通信，对于 nodetool ring 命令来说，跟哪个节点通信都没有区别，所以可以随意指定其中一个节点。</p>
<p>从上面结果列表可以看到运行中的节点是否在线、State、数据负载量以及节点Token（可以理解为节点名称，这个是节点第一次启动时自动产生的）。我们可以使用 nodetool 组合 token 对具体节点进行管理，比如查看指定节点的详细信息：</p>
<pre lang="bash">$ bin/nodetool -host 192.168.0.101 info</pre>
<p>运行的结果大致如下：</p>
<pre lang="">84929280487220726989221251643883950871
Load : 54.42 KB
Generation No : 1302057702
Uptime (seconds) : 591
Heap Memory (MB) : 212.14 / 1877.63</pre>
<p>查看指定节点的数据结构信息：</p>
<pre lang="bash"> $ bin/nodetool -host 192.168.0.101 cfstats</pre>
<p>运行结果：</p>
<pre lang="">Keyspace: Keyspace1
Read Count: 0
Write Count: 0
Pending Tasks: 0
Column Family: CF1
SSTable count: 1</pre>
<p>使用下面命令可以移除一个已经下线的节点（比如第2台机器关机了或者坏掉了）</p>
<pre lang="bash"> $ bin/nodetool -host 192.168.0.101 removetoken 84929280487220726989221251643883950871</pre>
<p>下了线的节点如何重新上线呢？什么都不用做，只需启动 Cassandra 程序它就会自动加入集群了。</p>
<p>在实际运作中我们可能会需要隔一段时间备份一次数据（创建一个快照），这个操作在 Cassandra 里非常简单：</p>
<pre lang="bash">$ bin/nodetool -host 192.168.0.101 snapshot</pre>
<h2> 4、测试数据的读写</h2>
<p>使用客户端组件加单元测试是首选的，如果仅想知道集群是否正常读写数据，可以用cassandra-cli 作一个简单测试：</p>
<pre lang="bash">$ bin/cassandra-cli -host 192.168.0.101</pre>
<p>接着输入如下语句：</p>
<pre lang="">create keyspace Keyspace1;
use Keyspace1;
create column family Users with comparator=UTF8Type and default_validation_class=UTF8Type;
set Users[jsmith][first] = 'John';
set Users[jsmith][last] = 'Smith';
get Users[jsmith];</pre>
<p>上面语句创建了一个名为“Keyspace1”的 keyspace，还创建了一个名为“Users”的 Column Family，最后向 Users 添加了一个 item。正常的话应该看到类似下面的结果：</p>
<pre lang="">=&gt; (column=first, value=John, timestamp=1302059332540000)
=&gt; (column=last, value=Smith, timestamp=1300874233834000)
Returned 2 results.</pre>
</div>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/apache-cassandra-%e7%9a%84%e9%9b%86%e7%be%a4%e9%85%8d%e7%bd%ae/">Apache Cassandra 的集群配置</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/apache-cassandra-%e7%9a%84%e9%9b%86%e7%be%a4%e9%85%8d%e7%bd%ae/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
