本文档主要介绍用于线上环境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
是基于底层存储引擎 实现的NOSQL 数据库,接口支持类似于 Redis,完全兼容 Redis 的协议,支持 list, has, zset 等数据结构。与 Redis 相比较,SSDB 利用持久化设备存储,避免了纯内存数据库的容量问题,与 LevelDB 的关系是 SSDB 利用了 LevelDB 的高性能存储实现,为其实现了网络和多数据结构支持,除此之外,支持多节点的主备、主主模式。
安装SSDB
1 wget --no-check-certificate https://github.com/ideawu/ssdb/archive/master.zip2 unzip master3 cd ssdb-master4 make5 # 将安装在 /usr/local/ssdb 目录下6 sudo make install7 #/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: 888910 replication:11 binlog: yes12 capacity: 2000000013 # Limit sync speed to *MB/s, -1: no limit14 sync_speed: -115 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_119 # sync|mirror, default is sync20 type: mirror21 host: 192.168.10.10222 port: 888823 #auth: password24 logger:25 level: debug26 output: log.txt #log保存位置27 rotate:28 size: 100000000029 leveldb:30 # in MB31 cache_size: 50032 # in KB33 block_size: 3234 # in MB35 write_buffer_size: 6436 # in MB37 compaction_speed: 20038 # yes|no39 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 888810 11 # 停止 ssdb-server12 ./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 ssdb11 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 install10 ## 安装Twemproxy11 $ git clone https://github.com/twitter/twemproxy.git12 $ cd twemproxy/13 $ autoreconf -fvi14 $ ./configure15 $ make && make install16 ## 将Twemproxy的配置文件放置在/etc/下、17 $ mkdir /etc/nutcracker18 $ 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 221225 tcp 0 0 127.0.0.1:22122 0.0.0.0:* LISTEN
SSDB Python Client
社区提供多个Python Client,从社区项目活跃度及发布版本的数量角度考虑,选择pyssdb 0.1.2作为访问SSDB的driver。
安装及使用参见:
SSDB性能压测
压测详情参见:
参考文档: