跳至主要内容

Apache Cassandra 0.7 的集群配置

Hadoop/HBase 一样,Apache Cassandra 也是 NoSQL 产品中最为重要的成员之一,跟 HBase 相比,因为 Cassandra 使用了一种去中心化的模式(类似memcached集群), 使用 Cassandra 搭建 NoSQL 集群更为简单容易,特别是在 0.7 版本之后,下面简述使用 Cassandra 0.7 搭建一个集群。@ivarptr

前提条件
a、准备3台或以上的计算机。下面假设有3台运行Linux操作系统的计算机,局域网的IP地址分别为 192.168.0.100, 192.168.0.101 和 192.168.0.102。
b、Java 1.6。
c、到这里下载 0.7.x 版本的Cassandra 二进制发行包。

1、基本配置

挑选其中的一台机开始配置,先展开 cassandra 发行包:
$ tar -zxvf apache-cassandra-$VERSION.tar.gz
$ cd apache-cassandra-$VERSION

其中的 conf/cassandra.yaml 文件为主要配置文件,由于 0.7 版不再采用XML格式配置文件,如果对 YAML 格式不熟悉的话最好先到这里了解一下。

Cassandra 在配置文件里默认设定了几个目录:

data_file_directories: /var/lib/cassandra/data
commitlog_directory: /var/lib/cassandra/commitlog
saved_caches_directory: /var/lib/cassandra/saved_caches


data_file_directories 可以一次同时设置几个不同目录,cassandra 会自动同步所有目录。另外在日志配置文件 log4j-server.properties 也有一个默认设定日志文件的目录:
log4j.appender.R.File=/var/log/cassandra/system.log

一般情况下采用默认的配置即可,除非你有特殊的数据储存要求,所以现在有两种方案:一是按照默认配置创建相关的目录,二是修改配置文件采用自己指定的目录。
下面为了简单起见采用第一种方案:

$ 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


上面的 `whoami` 是 Linux 指令用于获取当前登录的用户名,如果你不准备用当前登录用户运行 Cassandra,那么需要把 `whoami` 替换成具体的用户名。

2、有关集群的配置

由于 Cassandra 采用去中心化结构,所以当集群里的一台机器(节点)启动之后需要一个途径通知当前集群,Cassandra 的配置文件里有一个 seeds 的设置项,所谓的 seeds 就是能够联系集群中所有节点的一台机器,假如集群中所有的节点位于同一个机房同一个子网,那么只要随意挑选几台运行比较稳定的机器即可。在当前的例子中因为只有3台机器,所以我挑选第一台作为种子节点,配置如下:

seeds:
    - 192.168.0.100

然后配置节点之前通信的IP地址:
listen_address: 192.168.0.100

需要注意的是这里必须使用具体的IP地址,而不能使用 0.0.0.0 这样的地址。

配置 Cassandra Thrift 客户端(应用程序)访问的IP地址:
rpc_address: 192.168.0.100

这项可以使用 0.0.0.0 监听一台机器所有的网络接口,不过为了明确起见,这里仍然指定具体的IP地址。Cassandra 的 Keyspaces 和 ColumnFamilies 不再需要配置了,他们需要在运行时创建和维护。
把配置好的 Cassandra 复制到第2和第3台机器,同时创建相关的目录,还需要修改 listen_address 和 rpc_address 为实际机器的IP地址。至此所有的配置完成了。

3、启动 Cassandra 各个节点以及集群管理

启动顺序没什么所谓,只要保证最终种子节点启动就可以了:
$ bin/cassandra -f

参数 -f 的作用是让 Cassandra 以前端程序方式运行,这样有利于调试和观察日志信息,而在实际生产环境中这个参数是不需要的(即 Cassandra 会以 daemon 方式运行)。

所有节点启动后可以通过 bin/nodetool 工具管理集群,比如查看所有节点运行情况:


$ bin/nodetool -host 192.168.0.101 ring
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...


命令中 -host 参数用于指定 nodetool 跟哪一个节点通信,对于 nodetool ring 命令来说,跟哪个节点通信都没有区别,所以可以随意指定其中一个节点。
从上表可以看到运行中的节点是否在线、State、数据负载量以及节点Token(可以理解为节点名称,这个是节点第一次启动时自动产生的)。我们可以使用 nodetool 组合 token 对具体节点进行管理,比如查看指定节点的详细信息:


$ bin/nodetool -host 192.168.0.101 info
84929280487220726989221251643883950871
Load             : 54.42 KB
Generation No    : 1302057702
Uptime (seconds) : 591
Heap Memory (MB) : 212.14 / 1877.63

查看指定节点的数据结构信息:

$ bin/nodetool -host 192.168.0.101 cfstats
Keyspace: Keyspace1
Read Count: 0
Write Count: 0
Pending Tasks: 0
Column Family: CF1
SSTable count: 1
…………

移除一个已经下线的节点(比如第2台机器关机了或者坏掉了)

$ bin/nodetool -host 192.168.0.101 removetoken 84929280487220726989221251643883950871

下了线的节点如何重新上线呢?什么都不用做,再次运行 Cassandra 程序它就会自动加入集群了。

在实际运作中我们可能会需要隔一段时间备份一次数据(创建一个快照),这个操作在 Cassandra 里非常简单:
$ bin/nodetool -host 192.168.0.101 snapshot

4、测试数据的读写

使用客户端组件加单元测试是首选的,如果仅想知道集群是否正常读写数据,可以用cassandra-cli 作一个简单测试:

$ bin/cassandra-cli -host 192.168.0.101
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];

上面我们创建了一个名为“Keyspace1”的 keyspace,还创建了一个名为“Users”的 Column Family,最后向 Users 添加了一个 item。正常的话应该看到类似下面的结果:
=> (column=first, value=John, timestamp=1302059332540000)
=> (column=last, value=Smith, timestamp=1300874233834000)
Returned 2 results.

评论

此博客中的热门博文

一个人用的 Git

Git 是目前比较时髦的版本控制系统,虽然 linux 内核源码是使用它来管理的,但系统非常小巧而且使用简单,比起 svn (subversion) 系统,git 有一个明显的优势就是在不联网的情况下也可以查阅或者回滚历史版本,有时带着笔记本出外工作这个功能是非常有用的。下面介绍一下用 Git 管理个人电脑上的个人文档文件。(@ivarptr)

这篇文章有几个假设前提:
a、你从事的工作有很多文档需要书写或者整理,而且文档篇幅比较大需要经常修修改改,有时还可能需要回档(即恢复到历史的某个版本)。
b、你的文档具有关联性的,比如一个项目策划书,有多份文本文档、电子表格、图片,希望平时能整体记录一个版本(快照)。
c、你有多台工作用的电脑,为了简单起见,下文假设只有两台电脑。
d、你有一台能够在互联网上访问的服务器,最好是跑 linux 系统而且有 ssh 登录权限。
e、为了简明,省略了安全权限设置和Git最为突出的特性“分支”。

1、几个必须厘清的概念
a、svn只有一个远程仓库集中管理所有的版本,而Git分有“本地仓库”和“远程仓库”之分,在提交你的最新文档过程中,需要两层提交,一次是提交到本地仓库,然后才可以提交到远程仓库。
b、svn的远程仓库保存的总是全局最新的版本,各个支点(小组成员)必须对此仓库负责。而Git则没有集中远程仓库之说,理论上每个人的地位是平等的,同时每个人的本地仓库也可以配置为给他人访问的“远程仓库”。不过对于个人或者一个小团队来说,为了简便起见我们通常会协商好让某个远程服务器上的仓库保持最新并且集中管理,这点跟Svn类似。
c、svn的每次提交会产生一个递增的数字作为版本号码,而git每次提交会产生一个“快照”,快照不是用一个递增的数字作为名称的,而是一个hash值,当然用一个hash值来呼叫某一次提交也太累赘了,所以在实际应用过程中我们往往只用hash指的头4~6位就可以了(类似一个人的昵称)。

2、在服务器上创建 Git 仓库
关于在 linux 系统里如何安装 Git 程序可以参考这篇《在CentOS 5.5里安装Git以及搭建Git服务器最简单教程》,要记住 Git 程序是不区分服务端或客户端的。

首先我们要创建一个Git仓库,使用 ssh 登录到你的服务器,在用户home文件夹里创建一个文件夹,为了容易识别,最好在文件夹名字后面加一…

修改CentOS Linux 的 SSH服务默认设置,提高系统安全性

最近登录一台CentOS Linux(5.5)服务器发现 /var/log/secure 文件出奇巨大,查看其中的记录发现原来不断有人试图穷举服务器的帐号密码,幸好当时 root 密码设置非常复杂,否则可能早就被人攻陷了。(ps:那台服务器平时只做对内的服务,从没在公网上暴露过,看来即使这样的服务器也不能掉以轻心啊)接着使用 netstat -nat 查看网络连接发现扫描器仍在乐此不彼地工作,所以决定还是更改 ssh 服务的默认设置。

步骤如下


1、禁用 root 的 ssh 远程登录
这步我觉得很有必要,因为扫描器一般都是冲着这个帐号过来的。修改 /etc/ssh/sshd_config 文件里的 PermitRootLogin 一行的值为 no 即可。不过要注意在禁用 root 的 ssh 登录之前一定要确定服务器内还有其他帐号可以远程登录,否则你的服务器自己也别想进去了。所以比较妥当的方法是建立一个普通的帐号,并把它加入到 wheel 组,
然后在 /etc/sudoers 里启用 wheel 组的 sudo 功能,再禁用 root 的远程登录。

2、设置登录密码输入的等待时间和最大重试次数
还是修改  /etc/ssh/sshd_config 文件,找到 LoginGraceTime 和 MaxAuthTries 两行,分别设置为 30 和 3,则表示打开ssh连接之后你要在30秒内输入正确的密码否则断开连接,以及密码最多给重试 3 次。

3、重启 sshd 服务,这次 secure log 终于平静下来了

一些对安全有益的心得

1、平时 ssh 登录尽量避免密码输入方式,应该采用验证钥匙方式登录,如果客户端也是 linux 系统,则这步骤很简单,先 ssh-keygen -C 'yang@home' 创建一个验证钥匙,然后使用 ssh-copy-id somebody@host.domain 把钥匙复制到服务器上,这样以后 ssh 登录就再也不用输入密码了。对于客户端是 windows 和 mac os 系统的估计也有相类似的工具,具体的操作不太清楚。

2、审视一下 /etc/passwd 文件,看看有没有平时不会直接登录帐号,比如有时安装某些软件会自动创建一些帐号,对于这类帐号赶快把最后一段 /bin/bash 改为 /sbin/nologin 吧…

在家用PC里体验 FreeBSD 8.1(上)

FreeBSD (http://www.freebsd.org/) 是一个开源免费的操作系统,最早接触FreeBSD是约7年前在 @hplcsz 挂bbs的服务器,后来很少关注了,最近接触到 Apple 的 MacOS 和 iOS (基于FreeBSD衍生出来的操作系统)联想起FreeBSD项目,才发现它已经更新到8.1版了。
恰好家里多出一台电脑暂时没有用,于是尝试用FreeBSD 8.1配置一台适合家用的电脑(用来看看新闻灌灌水的那种),于是有了如下一篇文章。
(注:这里假设读者已经有一定的Linux/BSD基础)

首先访问 FreeBSD 项目的官方网站,下载 FreeBSD 8.1的安装镜像文件(ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/8.1/),这里提供CD版、DVD版和U盘版,考虑到我有DVD刻录机,所以下载了DVD版。

下载过程是一个漫长的等待,期间强烈推荐阅读一下官方的《FreeBSD使用手册》(中文版,以下简称《使用手册》)(http://www.freebsd.org/doc/zh_CN.GB2312/books/handbook/index.html),如果对Linux/BSD不是很熟悉,前3章是很有必要阅读的,否则会被折腾到2012年。等待DVD镜像下载完,大概已经看到第10章了。

1、安装 FreeBSD 8.1
刻录下载回来的DVD镜像文件,从光驱启动然后选择“Quick模式”即开始安装过程。结合《使用手册》一般没有多大问题,因为这篇文章重点是如何搭建家用PC的环境,所以具体的安装过程这里就省略了。小技巧:

A、FreeBSD 必须安装在主分区,在安装之前你必须腾出一个至少10来GB的主分区。
B、当安装问你是否安装“Ports(相当于软件商店、软件中心)”时,要选择“YES”。
C、当安装接近完成时,程序会问你 “Would you like to browse the collection now?“,这一步是问你是否安装DVD上附带的软件,选择Yes,然后把下面这两个大块头选中,这样能避免从网络下载桌面环境的安装文件,节省时间和网络流量,减低碳排放:
+ X11/xorg-7.5
+ gnome/gnome2-2.30.1-1

2、基础网络设置
系统安装好之后,重…