本文檔主要介紹用於線上環境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://www.ideawu.net/blog/archives/765.html?cp=1#comments
http://quenlang.blog.51cto.com/4813803/1635778
