SSDB是一个C/C++语言开发的高性能NoSQL数据库,支持KV,list,map(hash),zset(sorted set)等数据结构,用来替代或者与Redis配合存储十亿级别列表的数据。与Redis相比,SSDB的存储基于文件,因此可以存储更多的数据,而不受限于内存的大小。在实际应用中,我们使用SSDB存储网站实时流量数据。本文主要介绍如何搭建SSDB双主,并使用Keepalived做IP漂移,使得双主对客户端透明。只要双主中有一个服务正常,客户端就可以正常读写,并保证数据不会丢失。其结构如图所示:
keepalived+ssdb

安装SSDB

在两台服务器上下载SSDB源码包master.zip(https://github.com/ideawu/ssdb/archive/master.zip),解压后先后执行“make”和“make install”完成安装:

SSDB默认安装至/usr/local/ssdb。

配置SSDB

修改/usr/local/ssdb中的配置文件ssdb.conf:

启动SSDB

启动两台服务器上的SSDB:

使用/usr/local/ssdb/ssdb-cli进入命令行,使用info命令查看SSDB信息:
1
从replication信息可以看到当前SSDB作为另一个SSDB的从,而在另一个SSDB中通过info命令也可以看到其是当前SSDB的从。而在某个SSDB使用set命令写入一个键值时,在另一个SSDB使用get命令可读出这个键值,说明SSDB双主搭建成功,这两个SSDB只要有一个服务正常,就可以正常对外提供读写,并保证数据不会丢失。

配置Keepalived

对于客户端,在访问SSDB双主时,需要知道各个SSDB的地址,并且自己实现fail-over机制,在无法读写某个SSDB时,重新尝试读写另一个SSDB。我们使用Keepalived监控SSDB,对外提供虚IP供客户端连接读写,虚IP初始映射到某个SSDB,当该SSDB不可用时,将虚IP漂移到另一个SSDB,这样,双主对于客户端是透明的,客户端只要连接虚IP即可。此处不再介绍Keepalived的安装和运行,可参见《Keepalived介绍》(http://magicwt.com/2013/06/30/keepalived%E4%BB%8B%E7%BB%8D/),Keepalived的主配置keepalived.conf如下:

其中每隔5秒执行一个脚本检查SSDB服务是否可用,如不可用,则将权重减小2至99,而Keepalived从配置中权重为100,因此,从切换为主,并配置虚IP,保证了虚IP所在的SSDB服务一直可用。ssdb_check.sh脚本如下所示:

由于SSDB兼容Redis部分协议,因此此处使用Redis的命令行工具PING SSDB检查服务是否可用。

Keepalived+Redis高可用主从虚IP经常漂移的问题

使用Keepalived+Redis搭建Redis高可用主从,其中Keepalived配置为每隔2秒执行脚本检查Redis服务是否可用: vrrp_script chk_r...

阅读全文

Docker简介与实践

Docker(http://www.docker.com/)是一个开源的应用容器引擎。Docker可以将应用程序及其依赖打包成镜像(Image),并在同一个服务器中启动多个容器(Containe...

阅读全文

使用iptables限制redis端口的访问

redis默认端口是6379,使用iptables限制该端口访问。 设置规则链 1)新建规则链: iptables -N RH-Firewall-1-INPUT 2)在规则链中添加可以访问6379端口的规...

阅读全文