天天看點

SSDB:高性能資料庫伺服器

因為SSDB的最初目的是替代Redis, 是以SSDB會經常和Redis進行比較. 我們知道, Redis是經常的”主-從”架構, 雖然可以得到負載均衡以及資料跨地域備份的功能, 但無法實作高可用性. 考慮這種情況, Redis的主和從分别在兩個IDC機房, 當主所在的機房出現故障時, 整個服務其實就相當于停止了. 因為所有寫操作都失敗, 而應用一般不會實作自動降級服務.

安裝

SSDB 的建議安裝?方式是源碼編譯安裝, 建議運?行環境是主流 Linux 發?行版. 遠端 SSH 登入你的伺服器, 然後?用下?面的指令下載下傳, 編譯, 安裝和運?行:

$ sudo unzip master

$ cd ssdb-master

$ sudo make

$ #optional, install ssdb in /usr/local/ssdb

$ sudo make install

# start master

$ sudo ./ssdb-server ssdb.conf

# or start as daemon

$ sudo ./ssdb-server -d ssdb.conf

# ssdb command line

$ sudo ./ssdb-cli -p 8888

# stop ssdb-server

$ sudo kill `cat ./var/ssdb.pid`

SSDB 預設安裝在 /usr/local/ssdb 目錄下. ssdb-server 是伺服器的程式, ssdb-cli 是指令?行用戶端.

SSDB  附帶的 ssdb.conf 你不用修改便可以使用. 如果你要高度定制, 還是需要修改一些配置的. 下面做介紹. SSDB 的配置檔案是一種層級 key-value 的靜态配置檔案, 通過一個 TAB 縮進來表示層級關系. 以 ‘#’ 号開始的行是注釋. 标準的配置檔案如下:

# ssdb-server config    

# MUST indent by TAB!

# relative to path of this file, directory must exists    

work_dir = ./var     

pidfile = ./var/ssdb.pid

server:    

       ip: 127.0.0.1     

       port: 8888     

       # bind to public ip     

       #ip: 0.0.0.0     

       # format: allow|deny: all|ip_prefix     

       # multiple allows or denys is supported     

       #deny: all     

       #allow: 127.0.0.1     

       #allow: 192.168

replication:    

       slaveof:     

               # to identify a master even if it moved(ip, port changed)     

               # if set to empty or not defined, ip:port will be used.     

               #id: svc_2     

               # sync|mirror, default is sync     

               #type: sync     

               #ip: 127.0.0.1     

               #port: 8889

logger:    

       level: info     

       output: log.txt     

       rotate:     

               size: 1000000000

leveldb:    

       # in MB     

       cache_size: 500     

       # in KB     

       block_size: 32     

       write_buffer_size: 64     

       compaction_speed: 1000     

       # yes|no     

       compression: no

work_dir: ssdb-server 的工作目錄, 啟動後, 會在這個目錄下生成 data 和 meta 兩個目錄, 用來儲存 LevelDB 的資料庫檔案. 這個目錄是相對于 ssdb.conf 的相對路徑, 也可以指定絕對路徑.

server: ip 和 port 指定了伺服器要監聽的 IP 和端口号. 如果 ip 是 0.0.0.0, 則表示綁定所有的 IP. 基于安全考慮, 可以将 ip 設定為 127.0.0.1, 這樣, 隻有本機可以通路了. 如果要做更嚴格的更多的網絡安全限制, 就需要依賴作業系統的 iptables.

replication: 用于指定主從同步複制. slaveof.ip, slaveof.port 表示, 本台 SSDB 伺服器将從這個目标機上同步資料(也即這個配置檔案對應的伺服器是 slave). 你可以參考 ssdb_slave.conf 的配制.

logger: 配置日志記錄. level 是日志的級别, 可以是 trace|debug|info|error. output 是日志檔案的名字, SSDB 支援日志輪轉, 在日志檔案達到一定大小後, 将 log.txt 改名, 然後建立一個新的 log.txt.

leveldb: 配置 LevelDB 的參數. 你一般想要修改的是 cache_size 參數, 用于指定緩存大小. 适當的緩存可以提高讀性能, 但是過大的緩存會影響寫性能.

在使?用?自帶的 ssdb.conf 配置?檔案時, SSDB ?生成的?日志?檔案按體積進?行分割, 僅此?而已. 是以, 你需要編寫?自?己的 crontab 進?行?日志壓縮和定期清理.    

如果出現伺服器掉電, kernel panic 等系統故障, 在系統重新啟動之後, 你需要?手動删除 ssdb的 PID ?檔案 ssdb.pid, 然後才能啟動 ssdb-server.另外, 你可以參考下?面的做法, 在系統啟動和關機時, 啟動和關閉 ssdb-server:     

# /bin/sh     

#     

# chkconfig:345 98 98     

# description: SSDB is a fast NoSQL database for storing big list of billions of elements     

# processname:ssdb

case "$1" in    

 'start')     

   /usr/local/ssdb/ssdb-server -d /usr/local/ssdb/ssdb.conf     

   echo "ssdb started."     

   ;;     

 'stop')     

   kill `cat /usr/local/ssdb/var/ssdb.pid`     

   echo "ssdb stopped."     

 'restart')     

   sleep 0.5     

   /usr/local/ssdb/ssdb-server -d /usr/local/ssdb/     

ssdb.conf     

 *)     

   echo "Usage: $0 {start|stop|restart}"     

   exit 1     

 ;;     

esac

exit 0

把?件儲存為 /etc/init.d/ssdb.sh(需要 root 權限), 然後執?:    

chmod ugo+x /etc/init.d/ssdb.sh

把 ssdb加入chkconfig,并設定開機啟動。

[azureuser@mono init.d]$ sudo chkconfig --add ssdb.sh      

[azureuser@mono init.d]$ chkconfig ssdb.sh on       

啟動、停止的指令如下:

[azureuser@mono init.d]$ sudo service ssdb.sh stop      

ssdb stopped.       

[azureuser@mono init.d]$ sudo service ssdb.sh start       

ssdb 1.6.7       

Copyright (c) 2012-2013 ideawu.com

ssdb started.      

[azureuser@mono dotnet]$ sudo dmcs Client.cs Link.cs Program.cs -out:ssdbClient.exe    

[azureuser@mono dotnet]$ mono ssdbClient.exe     

ok     

1     

100     

99     

-----------------     

1 kvs     

   a: 99     

0 kvs     

本文轉自 張善友 51CTO部落格,原文連結:http://blog.51cto.com/shanyou/1346475,如需轉載請自行聯系原作者