Mongodb为了提高处理大数据量的性能,提供了分片集群的功能,sharding可以理解为传统数据库表分区的扩展,其实现架构图如下:
可见,这个架构由三部分进程组成:两组mongod进程(shard和config server)了一组mongos进程。
shard可以理解为每一个数据分片,也就是一个大数据量中的一部分分片数据。为了提高高可用性,一般在生产系统中每个shard分片都是一个replica set,也就是提供了主从复制的功能,同时一般有第三个节点作为仲裁。
config server顾名思义是配置服务,主要保存各个shard的元数据信息,为了实现高可用,config server一般也要配置多个,每个config server的数据完全一致,mongodb是通过两阶段提交来保证最终一致性的,并不是常用的日志同步或共享存储的方式。有点让人费解的是,在启用config server进程的时候并不需要指定其要管理的shard进程,而是通过下面要说的mongos进程将二者联系起来。
客户端和mongos进程进行交互,mongos提供了routing功能,它使得客户端以为是和一个单一简单的系统在打交道。在启动mongos的时候要指定config server,然后就可以把shard添加进来。
以下演示了建立一个三个shard的集群,同时每个shard由主、从、仲裁三部分组成一个replica set。
建立mongodb用户和组,安装mongdb程序,如果用源代码安装,可以参考我的另一篇文章:
[root@localhost software]# groupadd -g 20001 mongodb [root@localhost software]# useradd -u 20001 -g mongodb mongodb [root@localhost software]# passwd mongodb [root@localhost software]# su - mongodb [mongodb@localhost ~]$ tar xf mongodb-linux-x86_64-1.8.2.tgz [mongodb@localhost ~]$ tree mongodb-linux-x86_64-1.8.2 mongodb-linux-x86_64-1.8.2 |-- GNU-AGPL-3.0 |-- [...]
引言
本篇要评测的NoSQL产品是Tokyo Cabinet和Tokyo Tyrant,Tokyo Cabinet是一个性能优秀的数据存储引擎,而Tokyo Tyrant则提供了访问Tokyo Cabinet数据的网络接口。这是一个很成熟的产品,在国内外也有众多的成功案例。
介绍
Tokyo Cabinet(简称TC)和Tokyo Tyrant(简称TT),顾名思义,是源自日本的开源项目。由FAL Labs维护,主要的开发人员是Mikio Hirabayashi。最早应用在日本最大的SNS网站mixi.jp上成功后而声名鹊起。
TC是一个用C写的数据存储引擎,以key-value的方式存储数据,支持Hash、B+ tree、Hash Table等多种数据结构。同时提供了C、 Perl、 Ruby、Java和Lua等多种语言的API支持,但是如果通过网络来访问,就需要用TT。TT同样是用C写的,支持从网络端高并发、多线程的访问TC。另外TC/TT支持master/slave架构,可以通过配置实现高可用性,这也是很不错的一个特性。
TC因为支持灵活的数据结构而倍受欢迎,特别是Hash Table类型,很像传统的关系型数据库,只是每条存储记录的列是自由定义的,可以通过列作为条件来查询,十分方便。这是很多key-value结构的NoSQL产品所不具备的特性。当然,Hash Table类型和Hash、B+ tree相比存取效率会低一些,任何事物都是有两面性的,在带来高度灵活度的同时,必然要牺牲部分的效率。
TC/TT是一个久经考验的很稳定的产品,在千万及以下数据量级别表现出色。但是开发者由于种种原因,已经很长时间没有更新版本了,而是推出了对应升级产品,叫做Kyoto Cabinet和Kyoto Tycoon,这也给TC/TT的前景带来了不明朗的因素,很明显作者是鼓励人们使用升级的产品,但是由于新产品没有更多的成功案例,在业界的影响力反而不如TC/TT,因此在现阶段,TC/TT仍然是一个不错的NoSQL选择。
安装和使用
一、下载相关软件的最新版本(TC、TT和TC的lua扩展):
[root@localhost tctt]# wget http://fallabs.com/tokyocabinet/tokyocabinet-1.4.47.tar.gz
[root@localhost tctt]# wget http://fallabs.com/tokyotyrant/tokyotyrant-1.1.41.tar.gz
[root@localhost tctt]# wget http://fallabs.com/tokyocabinet/luapkg/tokyocabinet-lua-1.9.tar.gz
注意这里的lua扩展是可选的,如果不需要使用lua接口,可以不必安装。
二、安装lua脚本,注意这里不能通过yum的方式安装,否则后面装tt时会提示找不到lua.h文件:
wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
make linux
make install
安装过程中一般会报错如下:
luaconf.h:275:31: error: readline/readline.h: No such file or [...]
为了防止邮件被判定为垃圾邮件,可以给邮件系统增加DKIM(DomainKeys Identified Mail)功能,其主要的原理通俗的说,就是在发送邮件的时候通过私钥在邮件头写一段加密信息,然后公钥放到DNS服务器上,邮件的接收方通过邮件头的加密信息来和DNS上的公钥比对来判定邮件来源是否合法。这个计数貌似是雅虎提出的,被Yahoo! Mail和Gmail等厂商采用。
可以在http://sourceforge.net/projects/dkim-milter/ 下载源代码:
[root@mail dkim]# ll
total 736
-rw-r--r-- 1 root root 748415 Jul 13 2011 dkim-milter-2.8.3.tar.gz
[root@mail dkim]# tar zxvf dkim-milter-2.8.3.tar.gz
也可以通过下载RPM安装包安装,比较简单:
[root@mail dkim]# wget http://download.fedora.redhat.com/pub/epel/5/i386/dkim-milter-2.8.3-4.el5.i386.rpm
[root@mail dkim]# rpm -ivh dkim-milter-2.8.3-4.el5.i386.rpm
安装完成后,首先要生成公钥和私钥两个文件,可以使用源码包里的一个脚本,其路径在:
dkim-milter-2.8.3/dkim-filter/dkim-genkey.sh
参数为要使用发信的域名:
[root@mail dkim]# ./dkim-genkey.sh -r -d mail.banping.com
[root@mail dkim]# ll
total 1024
HBase是一个开源的NoSQL产品,它是实现了Google BigTable论文的一个开源产品,和Hadoop和HDFS一起,可用来存储和处理海量column family的数据。官方网址是:http://hbase.apache.org。Hbase的体系结构比较复杂,本文只探讨基本的安装测试问题,首先从镜像下载最新版的HBase:
[root@localhost hbase]# wget http://mirror.bjtu.edu.cn/apache/hbase/stable/hbase-0.90.3.tar.gz
[root@localhost hbase]# java -version java version "1.6.0_24"
Hbase是Java开发的,先检查下本地的JDK版本是否在1.6以上:
[root@localhost hbase]# java -version
java version "1.6.0_24"
解压并配置数据文件的路径:
[root@localhost hbase]# tar zxvf hbase-0.90.3.tar.gz
[root@localhost hbase]# cd hbase-0.90.3/conf
[root@localhost conf]# vi hbase-site.xml
</configuration>
<configuration>
<property>
<name>hbase.rootdir</name>
<value>/home/banping/hbase/data</value>
</property>
Hbase依赖于Hadoop来运行,它有两种配置方式,一种是比较简单的单实例方式,它已经内置了0.20版本的Hadoop包和一个本地Zookeeper,它们运行在同一个JVM之下,可以用本地文件系统而不用HDFS。另外一种比较复杂的分布式部署,需要在每一个节点替换自带的Hadoop包以免有版本问题,而且必须有一个HDFS实例,同时需要独立的ZooKeeper集群。为简单起见,我们选择单实例部署的方式,启动Hbase进程:
[root@localhost hbase-0.90.3]# bin/start-hbase.sh
starting master, logging to /home/banping/hbase/hbase-0.90.3/bin/../logs/hbase-root-master-localhost.localdomain.out
[root@localhost webtest]# [...]
HandlerSocket是通过socket和innodb通信的,但是网络通信如果双方连接没有按照规则正常关闭,可能导致wati_close状态的TCP连接大量存在,占用大量端口资源,需要慎重处理。
最近碰到这样的一个案例,检查一个服务器上的php fastcgi的连接情况,发现一些异常:
[root@mail ~]# netstat -anpo | grep php-fpm|wc -l 157
[root@banping~]# netstat -anpo | grep php-fpm|wc -l
517
而实际是没有这么多连接的,进一步检查详细信息,发现很多wati_close状态的TCP连接,占用了大量端口,而服务器端对应的是HandlerSocket插件的9998端口,初步判断是socket连接没有正常关闭导致的问题:
[root@banping ~]# netstat -anpo | grep php-fpm
tcp 1 0 10.0.0.1:43635 10.0.0.2:9998 CLOSE_WAIT 3592/php-fpm: pool off (0.00/0/0)
tcp [...]
技术组织
最近评论
- passenger 发表在《一个完整的Oracle建表的例子》
- tudou 发表在《Oracle增大redo log file的方法》
- Yousri 发表在《如何在mac下长期使用SecureCRT》
- Amazon SES筆記 « What's Going On 发表在《如何使用Amazon的邮件服务SES》
- 如何使用Amazon的邮件服务SES | 半瓶 发表在《为Postfix增加DKIM功能》
- pary 发表在《为Postfix增加DKIM功能》
历史归档
广告位

