概述
1 | SSDB 是一个 C++ 开发的 NoSQL 数据库, 支持Key-value/Key-hashmap/zset(sorted set)等数据结构,十分适合存储数亿条级别的列表、排序表等集合数据,是redis的替代与增强方案。 |
SSDB特性
- 替代 Redis 数据库, Redis 的 100 倍容量
- LevelDB 网络支持, 使用 C/C++ 开发
- Redis API 兼容, 支持 Redis 客户端
- 适合存储集合数据, 如 list, hash, zset…
- 客户端 API 支持的语言包括: C++, PHP, Python, Java, Go
- 持久化的队列服务
- 主从复制, 负载均衡
SSDB与redis区别
1 | redis数据是全部存储在了内存中,而SSDB绝对优势是将数据写入了硬盘,同时也支持配置部分内存用于缓存热数据。 |
SSDB数据类型
1 | KV(Key-value)数据类型KV 数据类型主要用于存储离散的、之间没有关系或者关系被忽略 的大数据, 如图片文件, 大段文本等. 一般 KV 类型都可以被 Hashmap 替代, 但KV会比Hashmap性能高一些. |
部署
编译安装
1 | yum groupinstall "Development tools" -y |
故障解决:
1 | 如果出现如下错误: |
启动和停止
1 | # 启动主库, 此命令会阻塞住命令行 |
SSDB启动脚本(随操作系统自启动)
1 | 假设你已经安装 SSDB 在默认的 /usr/local/ssdb 目录, 把 tools/ssdb.sh 脚本放到 /etc/init.d 目录下. |
1 | 将 /data/ssdb_data/test/ssdb.conf 修改为你的 SSDB 配置文件的路径. 如果你有多个 SSDB 实例, 那么把它们写在一行, 用空格来分隔, 例如: |
1 | chkconfig --add ssdb |
检查ssdb版本
1 | [root@gserver1 ssdb]# /usr/local/ssdb/ssdb-server -v |
配置
1 | 注:SSDB 的配置文件使用一个 TAB 来表示一级缩进, 不要使用空格来缩进, 无论你用1个, 2个, 3个, 4个, 5个, 6个, 7个, 8个或者无数个空格都不行! |
1 | 重要:一定要记得修改你的 Linux 内核参数, 关于 max open files(最大文件描述符数)的内容, 请参考 [1]. 否则, 你会在 log.txt 看到 Too many open files 类似的错误, 或者在客户端看到 Connection reset by peer 错误. |
CentOS7解决“打开文件数max open files”配置
1 | 在ssdb.conf中最后加入如下代码 |
监听网络端口
1 | work_dir = ./var |
只读模式
1 | server: |
SSDB 可以工作在只读模式下, 在只读模式下, 所有的写操作命令都会被服务端拒绝:
1 | ssdb 127.0.0.1:8888> set a 2 |
日志配置与分析
1 | logger: |
日志解读
1 | 一般, 建议你将 logger.level 设置为 debug 级别. |
请求处理
1 | 2014-06-18 11:01:40.335 [DEBUG] serv.cpp(395): w:0.393,p:5.356, req: set a 1, resp: ok 1 |
w:0.393
请求的排队时间, 毫秒p:5.356
请求的处理时间, 毫秒req:...
请求内容resp:...
响应内容
找出慢请求 , 命令是:
1 | tail -f log.txt | grep resp | grep '[wp]:[1-9][0-9]\{0,\}\.' |
这些命令用于找出排队时间, 或者处理时间大于等于 1 毫秒的请求.
找出大于 10 毫秒的请求:
1 | cat log.txt | grep resp | grep '[wp]:[1-9][0-9]\{1,\}\.' |
找出大于 100 毫秒的请求:
1 | cat log.txt | grep resp | grep '[wp]:[1-9][0-9]\{2,\}\.' |
SSDB 在工作中
ssdb-server 会每隔 5 分钟输出这样的一条 log
1 | 2014-06-18 11:18:03.600 [INFO ] ssdb-server.cpp(215): ssdb working, links: 0 |
links: 0
当前的连接数
LevelDB 配置
1 | leveldb.cache_size 内存缓存大小, 单位 MB |
内存占用
1 | 一个 ssdb-server 实例占用的内存瞬时(有可能, 而且即使达到, 也只是持续短时间)最高达到(MB): |
设置内存上限
1 | 很抱歉, SSDB 无法设置内存占用上限. SSDB占用的内存大小, 和下列因素相关: |
命令行工具ssdb-cli使用
1 | 连接到SSDB服务器 |
输入 ‘h’, 然后按回车
查看帮助信息. 下面是操作的演示:
1 | ssdb 127.0.0.1:8888> set k 1 |
SSDB命令列表
参考:立即转到-SSDB命令
同步和复制的配置与监控
一主多从
server1 【IP:192.168.56.101】
1 | server: |
server2
1 | replication: |
server3
1 | replication: |
多主多从
server1【IP:192.168.56.101】
1 | server: |
server2
1 | server: |
server3
1 | replication: |
单台服务器包含n个实例
在一组一共包含 n 个实例的 SSDB 实例群中, 每一个实例必须 slaveof 其余的 n-1 个实例.
1 | replication: |
监控同步状态
1 | [root@gserver1 ssdb]# ./ssdb-cli -h 192.168.56.101 -p 32121 |
关于status状态
1 | DISCONNECTED: 与 master 断开了连接, 一般是网络中断或者是配置文件限制了访问. |
判断同步状态–是否正常
1 | 对于 master, binlogs.max_seq 是指当前实例上的最新一次的写(写/更新/删除)操作的序号, replication.client.last_seq 是指已发送给 slave 的最新一条 binlog 的序号. |
info cmd
1 | ssdb 192.168.56.101:32121> info cmd |
对数据库进行强制收缩
1 | ssdb 192.168.56.101:32121> compact |
SSDB备份(导入导出)
使用ssdb-cli
导出
1 | 导出整个数据库 |
1 | 按照key区间导出数据库(导出/导入) |
导入
1 | ssdb 192.168.56.101:32121> import backup.ssdb |
使用ssdb-dump命令
备份导出
1 | 用法:/usr/local/ssdb/ssdb-dump ip port output_folder |
恢复
1 | 将 output_folder 目录拷贝到你的服务器上面, 你可能需要将它改名. 然后修改你的 ssdb.conf 配置文件, 将 work_dir 指向output_folder 目录, 然后重启 ssdb-server. |
从redis迁移数据到SSDB
1 | SSDB源码包中,Tools目录下的“ redis-import.php ” PHP 脚本可以用来将 Redis 服务器上的数据, 拷贝到 SSDB 服务器上. |
将现有的LevelDB数据导入SSDB
1 | SSDB 提供了 leveldb-import 工具来将 LevelDB 的数据导入到 SSDB 数据库中. 该工具的使用非常简单 |
- 本文作者: GaryWu
- 本文链接: https://garywu520.github.io/2017/09/26/SSDB-NoSQL数据库部署/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!