本文档主要介绍用于线上环境SSDB部署步骤,利用Twemproxy代理实现SSDB的分布式存储,部署SSDB节点为主主模式,仅对单个SSDB节点进行读写,SSDB节点down后切换到另一个SSDB节点进行读写。
操作系统: CentOS 6.7
节点规划:
Twemproxy 192.168.10.100
ssdb1 master 192.168.10.101
ssdb2 master 192.168.10.102
部署SSDB
SSDB 是基于底层存储引擎 LevelDB 实现的NOSQL 数据库,接口支持类似于 Redis,完全兼容 Redis 的协议,支持 list, has, zset 等数据结构。与 Redis 相比较,SSDB 利用持久化设备存储,避免了纯内存数据库的容量问题,与 LevelDB 的关系是 SSDB 利用了 LevelDB 的高性能存储实现,为其实现了网络和多数据结构支持,除此之外,支持多节点的主备、主主模式。
安装SSDB
1 wget --no-check-certificate https://github.com/ideawu/ssdb/archive/master.zip 2 unzip master 3 cd ssdb-master 4 make 5 # 将安装在 /usr/local/ssdb 目录下 6 sudo make install 7 #/usr/local/ssdb目录下的脚本用于管理ssdb
主主配置
下面开始配置节点ssdb1,ssdb2配置类似
1 cd /usr/local/ssdb 2 #编辑配置文件ssdb.conf 3 vim ssdb.conf 4 5 work_dir = ./var #data保存位置 6 pidfile = ./var/ssdb.pid 7 server: 8 ip: 192.168.10.101 9 port: 8889 10 replication: 11 binlog: yes 12 capacity: 20000000 13 # Limit sync speed to *MB/s, -1: no limit 14 sync_speed: -1 15 slaveof: 16 # to identify a master even if it moved(ip, port changed) 17 # if set to empty or not defined, ip:port will be used. 18 id: svc_1 19 # sync|mirror, default is sync 20 type: mirror 21 host: 192.168.10.102 22 port: 8888 23 #auth: password 24 logger: 25 level: debug 26 output: log.txt #log保存位置 27 rotate: 28 size: 1000000000 29 leveldb: 30 # in MB 31 cache_size: 500 32 # in KB 33 block_size: 32 34 # in MB 35 write_buffer_size: 64 36 # in MB 37 compaction_speed: 200 38 # yes|no 39 compression: no
启动SSDB
1 cd /usr/local/ssdb 2 # 启动主库, 此命令会阻塞住命令行 3 ./ssdb-server ssdb.conf 4 5 # 或者启动为后台进程(不阻塞命令行) 6 ./ssdb-server -d ssdb.conf 7 8 # 启动 ssdb 命令行 9 ./tools/ssdb-cli -p 8888 10 11 # 停止 ssdb-server 12 ./ssdb-server ssdb.conf -s stop
SSDB开机启动
1 # 将ssdb源代码目录下的 ./tools/ssdb.sh 脚本放到 /etc/init.d 目录下 2 cp ${ssdb_home}/tools/ssdb.sh /etc/init.d/ssdb 3 4 #配置/etc/init.d/ssdb 的configs,configs的值为ssdb.conf的路径,如下所示 5 vim /etc/init.d/ssdb 6 7 configs="/usr/local/ssdb/ssdb.conf" 8 9 #将ssdb加入开机启动 10 sudo chkconfig --add ssdb 11 sudo chkconfig ssdb on
部署Twemproxy
wemproxy是twtter开源的一个redis和memcache代理服务器,这里我们使用Twemproxy代理来代理SSDB集群来实现数据的分布式存储,即shared。
安装Twemproxy
1 ## 安装automake、libtool 、xz工具 2 $ yum install automake libtool xz -y 3 ## 安装autoconf 4 $ wget http://down1.chinaunix.net/distfiles/autoconf-2.69.tar.xz 5 $ xz -d autoconf-2.69.tar.xz 6 $ tar xf autoconf-2.69.tar -C /opt 7 $ cd /opt/autoconf-2.69 8 $ ./configure 9 $ make && make install 10 ## 安装Twemproxy 11 $ git clone https://github.com/twitter/twemproxy.git 12 $ cd twemproxy/ 13 $ autoreconf -fvi 14 $ ./configure 15 $ make && make install 16 ## 将Twemproxy的配置文件放置在/etc/下、 17 $ mkdir /etc/nutcracker 18 $ cp conf/nutcracker.yml /etc/nutcracker/nutcracker.yml
配置Twemproxy
## 修改配置文件 $ vim /etc/nutcracker/nutcracker.yml beta: listen: 127.0.0.1:22122 # 监听地址和端口 hash: fnv1a_64 # 散列算法 hash_tag: "{}" # 假设ssdb中一个对象有多个key属性,如kora这个人的姓名name:kora:,kora的年龄age:kora:,kora的住址 loc:kora:, # 为了保证这kora这三个属性能被路由到后端的同一个分片上,我们就需要指定hash_tag: " {::}",这样就避免读取数据的时候跨分片检索 distribution: ketama # 分片的算法,有ketama(一致性hash)、module(取模)、random(随机)三种算法 auto_eject_hosts: false # 是否在节点无法响应时自动从服务器列表中剔除,重新响应时自动加入服务器列表中 timeout: 400 redis: true # 后端代理的是否为redis servers: # 分片服务器列表 - 192.168.10.101:8888:1 server1 - 192.168.10.102:8888:1 server2
启动Twemproxy
1 ## 启动 2 $ nutcracker -d -c/etc/nutcracker/nutcracker.yml -p /var/run/redisproxy.pid -o /var/log/redisproxy.log& 3 ## 验证22122端口是否被监听 4 $ netstat -alnut |grep 22122 5 tcp 0 0 127.0.0.1:22122 0.0.0.0:* LISTEN
SSDB Python Client
社区提供多个Python Client,从社区项目活跃度及发布版本的数量角度考虑,选择pyssdb 0.1.2作为访问SSDB的driver。
安装及使用参见:https://github.com/ifduyue/pyssdb
SSDB性能压测
压测详情参见: http://www.wjxfpf.com/2015/10/601347.html
参考文档: