SSDB:高效能資料庫伺服器

五柳-先生發表於2015-12-21

SSDB是一個開源的高效能資料庫伺服器, 使用Google LevelDB作為儲存引擎, 支援T級別的資料, 同時支援類似Redis中的zset和hash等資料結構, 在同時需求高效能和大資料的條件下, 作為Redis的替代方案.

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

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

SSDB 被開發和開源出來後, 已經在生產環境經受了3個季度的考驗,SSDB最先在”IT牛人部落格聚合網站“進行嘗試應用, 接著在360遊戲部門得到大規模應用, 目前支撐的資料量已經達到數百G. 這些應用最初是使用Redis的, 遷移到SSDB的成本非常低, 涉及的程式碼改動極小.

SSDB開源資料庫專案地址: https://github.com/ideawu/ssdb

作者部落格地址: http://www.ideawu.net/blog/ssdb

安裝

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 

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網路協議

轉載:http://www.cnblogs.com/shanyou/p/3496163.html

相關文章