Redis 替代品SSDB介绍及使用

SSDB是一个C/C++语言开发的高性能开源NoSQL数据库服务器,支持Key-value, Keyhashmap, Key-zset(sorted set) 等数据结构,十分适合存储数亿条级别的列表, 排序表等集合数据, 是Redis的替代和增强方案。
特性:
1.替代 Redis 数据库, Redis 的100倍容量
2.LevelDB 网络支持, 使用C/C++ 开发
3.Redis API 兼容, 支持 Redis 客户端
4.适合存储集合数据, 如 list, hash, zset...
5.客户端 API 支持的语言包括: C++, PHP, Python,Cpy,Java,Nodejs,Ruby, Go等
6.持久化的队列服务

7.主从复制,支持双主(双master)和多主架构, 负载均衡

8.图形化管理工具(phpssdbadmin)

架构图:


SSDB 具有和 Redis 相似的 API,持的客户端包括: PHP, C++, Python, Java, Lua, Ruby,Nodejs,Go,etc。

官网地址:http://ssdb.io/
中文地址:http://ssdb.io/zh_cn/
项目地址: https://github.com/ideawu/ssdb
项目文档:https://github.com/ideawu/ssdb-docs
博客文档:http://www.ideawu.net/blog/category/ssdb

一、SSDB与Redis比较


二、安装部署

SSDB不仅仅支持主从,主主模式,还支持多主模式,下面我们以主主的模式演示一下SSDB的安装和使用。
环境:
192.168.36.54:8888
192.168.36.189:8888
1.安装
mkdir /home/slim/ssdb
wget https://github.com/ideawu/ssdb/archive/master.zip
unzip master
cd ssdb-master
make PREFIX=/home/slim/ssdb
make PREFIX=/home/slim/ssdb install
2.配置
SSDB 的配置文件是一种层级 key-value 的静态配置文件, 通过一个 TAB 缩进来表示层级关系. 以 '#' 号开始的行是注释。

  1. # ssdb-server config  
  2. # MUST indent by TAB!  
  3.   
  4. # relative to path of this file, directory must exists  
  5. work_dir = ./var  
  6. pidfile = ./var/ssdb.pid  
  7.   
  8. server:  
  9.         ip: 192.168.36.54  
  10.         port: 8888  
  11.         # bind to public ip  
  12.         #ip: 0.0.0.0  
  13.         # format: allow|deny: all|ip_prefix  
  14.         # multiple allows or denys is supported  
  15.         #deny: all  
  16.         #allow: 127.0.0.1  
  17.         #allow: 192.168  
  18.         # auth password must be at least 32 characters  
  19.         #auth: very-strong-password  
  20.   
  21. replication:  
  22.         binlog: yes  
  23.         # Limit sync speed to *MB/s, -1: no limit  
  24.         sync_speed: -1  
  25.         slaveof:  
  26.                 # to identify a master even if it moved(ip, port changed)  
  27.                 # if set to empty or not defined, ip:port will be used.  
  28.                 id: svc_1  
  29.                 # sync|mirror, default is sync  
  30.                 type: mirror  
  31.                 ip: 192.168.36.189  
  32.                 port: 8888  
  33.   
  34. logger:  
  35.         level: debug  
  36.         output: log.txt  
  37.         rotate:  
  38.                 size: 1000000000  
  39.   
  40. leveldb:  
  41.         # in MB  
  42.         cache_size: 500  
  43.         # in KB  
  44.         block_size: 32  
  45.         # in MB  
  46.         write_buffer_size: 64  
  47.         # in MB  
  48.         compaction_speed: 1000  
  49.         # yes|no  
  50.         compression: yes  

另一台机器配置类似。配置说如下:

work_dir: ssdb-server 的工作目录, 启动后, 会在这个目录下生成 data 和 meta 两个目录, 用来保存 LevelDB 的数据库文件. 这个目录是相对于 ssdb.conf 的相对路径, 也可以指定绝对路径。
server: ip 和 port 指定了服务器要监听的 IP 和端口号. 如果 ip 是 0.0.0.0, 则表示绑定所有的 IP. 基于安全考虑, 可以将 ip 设置为 127.0.0.1, 这样, 只有本机可以访问了.如果要做更严格的更多的网络安全限制, 就需要依赖操作系统的 iptables。
replication: 用于指定主从同步复制. slaveof.ip, slaveof.port 表示, 本台 SSDB 服务器将从这个目标机上同步数据(也即这个配置文件对应的服务器是 slave). 你可以参考 ssdb_slave.conf 的配制。
logger: 配置日志记录. level 是日志的级别, 可以是 trace|debug|info|error. output 是日志文件的名字, SSDB 支持日志轮转, 在日志文件达到一定大小后, 将 log.txt 改名, 然后创建一个新的 log.txt。
leveldb: 配置 LevelDB 的参数. 你一般想要修改的是 cache_size 参数, 用于指定缓存大小. 适当的缓存可以提高读性能, 但是过大的缓存会影响写性能。

关于主-从、主-主及多主的配置请参考:http://ssdb.io/docs/zh_cn/replication.html
2.启动服务

启动:./ssdb-server -d ssdb.conf

关闭:./ssdb-server ssdb.conf -s stop

ssdb-server命令说明:

  1.  ./ssdb-server -h  
  2. ssdb-server 1.9.0  
  3. Copyright (c) 2012-2015 ssdb.io  
  4.   
  5. Usage:  
  6.     ./ssdb-server [-d] /path/to/ssdb.conf [-s start|stop|restart]  
  7. Options:  
  8.     -d    run as daemon  
  9.     -s    option to start|stop|restart the server  
  10.     -h    show this message  

三、ssdb客户端工具使用

  1. ./ssdb-cli -h 192.168.36.189 -p 8888  
  2. ssdb 192.168.36.189:8888> set key abc  
  3. ok  
  4. (0.002 sec)  
  5. ssdb 192.168.36.189:8888> get key  
  6. abc  
  7. (0.001 sec)  

测试一下分别在两台机器添加数据,都可以正常同步。

ssdb-cli命令说明:

  1. ssdb 192.168.36.189:8888> help  
  2.   
  3. # display ssdb-server status  
  4.         info  
  5. # escape/do not escape response data  
  6.         : escape yes|no  
  7. # export/import  
  8.         export [-i] out_file  
  9.                 -i      interactive mode  
  10.         import in_file  
  11.   
  12. see http://ssdb.io/docs/php/ for commands details  

info:返回状态消息

escape:对命令返回数据进行编码

export/import:导入导出数据

四、ssdb服务监控

info 命令返回的信息

  1. ssdb 192.168.36.189:8888> info  
  2. version  
  3.         1.9.0  
  4. links  
  5.         1  
  6. total_calls  
  7.         6  
  8. dbsize  
  9.         0  
  10. binlogs  
  11.             capacity : 10000000  
  12.             min_seq  : 0  
  13.             max_seq  : 2  
  14. replication  
  15.         client 192.168.36.54:55472  
  16.             type     : mirror  
  17.             status   : SYNC  
  18.             last_seq : 2  
  19. replication  
  20.         slaveof 192.168.36.54:8888  
  21.             id         : svc_1  
  22.             type       : mirror  
  23.             status     : SYNC  
  24.             last_seq   : 2  
  25.             copy_count : 0  
  26.             sync_count : 1  
  27. serv_key_range  
  28.             kv  : "" - ""  
  29.             hash: "" - ""  
  30.             zset: "" - ""  
  31.             list: "" - ""  
  32. data_key_range  
  33.             kv  : "key" - "xxx"  
  34.             hash: "" - ""  
  35.             zset: "" - ""  
  36.             list: "" - ""  
  37. leveldb.stats  
  38.                                        Compactions  
  39.         Level  Files Size(MB) Time(sec) Read(MB) Write(MB)  
  40.         --------------------------------------------------  
  41.   
  42. 21 result(s) (0.002 sec)  

1.binlogs
当前实例的写操作状态.
capacity: binlog 队列的最大长度
min_seq: 当前队列中的最小 binlog 序号
max_seq: 当前队列中的最大 binlog 序号
2.replication
可以有多条 replication 记录. 每一条表示一个连接进来的 slave(client), 或者一个当前服务器所连接的 master(slaveof).
slaveof|client ip:port, 远端 master/slave 的 ip:port。
type: 类型, sync|mirror.
status: 当前同步状态, DISCONNECTED|INIT|OUT_OF_SYNC|COPY|SYNC。
last_seq: 上一条发送或者收到的 binlog 的序号。
slaveof.id: master 的 id(这是从 slave's 角度来看的, 你永远不需要在 master 上配置它自己的 id)。
slaveof.copy_count: 在全量同步时, 已经复制的 key 的数量。
slaveof.sync_count: 发送或者收到的 binlog 的数量。
3.关于 status:
DISCONNECTED: 与 master 断开了连接, 一般是网络中断。
INIT: 初始化状态。
OUT_OF_SYNC: 由于短时间内在 master 有大量写操作, 导致 binlog 队列淘汰, slave 丢失同步点, 只好重新复制全部的数据。
COPY: 正在复制基准数据的过程中, 新的写操作可能无法及时地同步。
SYNC: 同步状态是健康的.
4.判断同步状态
binlogs.max_seq 是指当前实例上的最新一次的写(写/更新/删除)操作的序号, replication.client.last_seq 是指已发送给 slave 的最新一条 binlog 的序号。所以, 如果你想判断主从同步是否已经同步到位(实时更新), 那么就判断 binlogs.max_seq 和 replication.client.last_seq 是否相等。
五、备份与恢复
1.备份
支持了在线备份功能, 可以在不停止服务的情况下备份服务器数据,这个功能让 SSDB 更加成为一个真正生产环境的存储服务器。
./ssdb-dump 192.168.36.189 8888 ./backup_dir
这条命令从监听在192.168.36.189:8888 的 SSDB 服务器上备份全量的数据, 保存到本地新创建的目录 backup_dir, 这个目录其实是一个 LevelDB 的数据库(db)。
2.恢复
将 backup_dir 传输到服务器, 修改新ssdb服务器的配置文件, 将 SSDB 使用的数据库名改为 backup_dir, 然后重启 SSDB 即可。
3.使用主从(Master-Slave)架构实时备份

注意:
1.一般, 建议你将 logger.level 设置为 debug 级别。详情参考:日志解读
2.利用配置文件的 deny, allow 指令限制可信的来源 IP 访问,提高服务的安全。
3.SSDB 的配置文件使用一个 TAB 来表示一级缩进, 不要使用空格来缩进, 无论你用2个, 3个, 4个, 或者无数个空格都不行!
4.一定要记得修改你的 Linux 内核参数, 关于 max open files(最大文件描述符数)的内容,详情参考:构建C1000K的服务器

参考文档:
1.SSDB入门基础
2.SSDB Redis替代品

http://blog.csdn.net/zhu_tianwei/article/details/44928887

猜你喜欢

转载自m635674608.iteye.com/blog/2297568