SSDB分布式部署

Posted Hi,云计算!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSDB分布式部署相关的知识,希望对你有一定的参考价值。

本文档主要介绍用于线上环境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

 

 

参考文档:

      http://ssdb.io/zh_cn/

      http://www.wzxue.com/ssdb/

      http://www.ideawu.net/blog/archives/765.html?cp=1#comments

      http://quenlang.blog.51cto.com/4813803/1635778

 

以上是关于SSDB分布式部署的主要内容,如果未能解决你的问题,请参考以下文章

ssdb操作文档

集成TerichDB的SSDB性能测试

集成TerichDB的SSDB性能测试

导致资产预编译在heroku部署上失败的代码片段

Sheridan SSDB网格为整列设定值

ssdb相关知识