SSDB:高性能數據庫服務器

SSDB是一個開源的高性能數據庫服務器, 使用Google LevelDB做爲存儲引擎, 支持T級別的數據, 同時支持相似Redis中的zset和hash等數據結構, 在同時需求高性能和大數據的條件下, 做爲Redis的替代方案.html

由於SSDB的最初目的是替代Redis, 因此SSDB會常常和Redis進行比較. 咱們知道, Redis是常常的」主-從」架構, 雖然能夠獲得負載均衡以及數據跨地域備份的功能, 但沒法實現高可用性. 考慮這種狀況, Redis的主和從分別在兩個IDC機房, 當主所在的機房出現故障時, 整個服務其實就至關於中止了. 由於全部寫操做都失敗, 而應用通常不會實現自動降級服務.git

而SSDB支持」雙主」架構(SSDB分佈式架構: https://github.com/ideawu/ssdb/wiki/Replication), 兩個或者更多的主服務器. 當其中一部分出現故障時, 剩餘的主服務器仍然能正常接受寫請求, 從而保證服務正常可用, 再將DNS解析修改以後, 就能在機房故障後當即恢復100%可用.github

SSDB 被開發和開源出來後, 已經在生產環境經受了3個季度的考驗,SSDB最早在」IT牛人博客聚合網站「進行嘗試應用, 接着在360遊戲部門獲得大規模應用, 目前支撐的數據量已經達到數百G. 這些應用最初是使用Redis的, 遷移到SSDB的成本很是低, 涉及的代碼改動極小.數據庫

SSDB開源數據庫項目地址: https://github.com/ideawu/ssdbc#

做者博客地址: http://www.ideawu.net/blog/ssdbapi

安裝緩存

SSDB 的建議安裝⽅方式是源碼編譯安裝, 建議運⾏行環境是主流 Linux 發⾏行版. 遠程 SSH 登陸你的服務器, 而後⽤用下⾯面的命令下載, 編譯, 安裝和運⾏行:安全

$ sudo wget --no-check-certificate https://github.com/ideawu/ssdb/archive/master.zip服務器

$ 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配置文件【http://www.ideawu.net/blog/archives/733.html

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
        # in MB
        write_buffer_size: 64
        # in MB
        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')
    kill `cat /usr/local/ssdb/var/ssdb.pid`
    echo "ssdb stopped."
    sleep 0.5
    /usr/local/ssdb/ssdb-server -d /usr/local/ssdb/
ssdb.conf
    echo "ssdb started."
    ;;
  *)
    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.

項目代碼中已經加入c# 的api,https://github.com/ssdb/dotnetssdb,在Mono上跑了一下:

[azureuser@mono dotnet]$ sudo dmcs Client.cs Link.cs Program.cs -out:ssdbClient.exe
[azureuser@mono dotnet]$ mono ssdbClient.exe
ok
1
ok
100
99
-----------------
1 kvs
    a: 99
-----------------
0 kvs
-----------------
0 kvs
0

另外, SSDB 提供了預編譯的 Windows 下的可執行安裝包, Windows 用戶能夠下載後直接運行 ssdb-server.exe. Windows 下的 SSDB 依賴 cygwin, 因此附帶了幾個 dll 文件. 使用方式:

1. 從 https://github.com/ideawu/ssdb-bin 下載可執行文件 ssdb-server.exe 和相關 dll.

2. 從 https://github.com/ideawu/ssdb 下載 ssdb.conf 配置文件.

3. 解壓, 而後從開始菜單中運行 cmd.exe.

4. 在 cmd.exe 啓動後, cd ssdb-server.exe 所在的目錄.

5. 執行 ssdb-server.exe ssdb.conf

SSDB 入門基礎(Chinese)

網絡協議設計思想與SSDB網絡協議

相關文章
相關標籤/搜索