Tokyo Tyrant(TTServer)系列-啓動參數和配置

啓動參數介紹

 

ttserver命令可以啓動一個數據庫實例。因爲數據庫已經實現了Tokyo Cabinet的抽象API,所以可以在啓動的時候指定數據庫的配置類型。

  1. 內存hash數據庫
  2. 內存tree數據庫
  3. hash數據庫
  4. B+ tree數據庫,

命令通過下面的格式來使用,‘dbname’制定數據庫名,如果省略,則被視作內存hash數據庫。

ttserver [-host name ] [-port num ] [-th num num ] [-tout num ] [-dmn] [-pid path ] [-log path ] [-ld|-le] [-ulog path ] [-ulim num ] [-uas] [-sid num ] [-mhost name ] [-mport num ] [-rts path ] [-ext path ] [-extpc name period ] [-mask expr ] [ dbname ]

下面來說這些參數的功能:

  • -host name :指明服務器的hostname或者ip地址。默認服務器的所有地址都會被綁定。比如:指定127.0.0.1這樣的ip,就只是本地可以訪問了。
  • -port num : 指定服務啓動的端口. 默認1978.如果要啓動多個數據庫實例,端口需要不一樣。
  • -thnum num : 指定服務工作的線程數。默認8.
  • -tout num : 指定每個會話的超時時間。默認永不超時。
  • -dmn : 以守護進程方式運行。
  • -pid path : 輸出進程IP到指定的文件。
  • -log path : 輸出日誌信息到指定文件。
  • -ld : 日誌中記錄debug信息。
  • -le :日誌中只記錄錯誤信息。
  • -ulog path : 指定存放更新日誌(update log)的目錄.可以用來備份恢復數據庫,主從庫之間的同步。
  • -ulim num : 指定每個更新日誌文件的大小限制.
  • -uas :使用異步IO記錄更新日誌。(使用此項可以減少寫入日誌的IO開銷,但是在服務器意外關機,進程被kill時可能會丟失數據。根據經驗,一般可以不使 用)。
  • -sid num : 指定服務的ID號。主從複製的時候通過不同的ID號來識別。
  • -mhost name : 指定主從複製模式下的主服務器的IP或域名。
  • -mport num : 指定主從模式下主服務器的端口號.
  • -rts path : 指定用於主從複製的時間戳存放文件.
  • -ext path : 指定擴展腳本語言文件。
  • -extpc name period : 指定被週期調用的函數名和間隔時間.
  • -mask expr : 指定被禁止的命令名(比如可以禁止使用清空vanish).
  • -unmask expr : 指定被允許的命令名.

數據庫類型

  • 下面我們再來看下數據庫類型的詳細配置。
  1. 數據庫名的命名方式被Tokyo Cabinet的抽象API指定。
  2. 如果數據庫名爲”*”,表示內存hash數據庫。
  3. 如果數據庫名爲”+”表示內存tree數據庫。
  4. 如果數據庫名爲”.tch”,則數據庫爲hash數據庫。
  5. 如果數據庫名的後綴爲”.tcb”,數據庫將爲B+ tree數據庫。
  6. 如果數據庫名的後綴爲”.tcf”。則數據庫將爲fixed-length數據庫。
  7. 如果數據庫名的後綴爲”.tct”,則數據將爲一個table數據庫(有表的概念)。
數據庫的調整參數通過數據庫名的延伸來指定,通過”#”分開,每個參數通過一個參數名和值來指定,用”=”隔開。
內存hash數據庫支持”bnum”, “capnum”, 和 “capsiz”
內存tree數據庫支持”capnum” 和 “capsiz”
capnum指定記錄的最大容量,capsiz指定最大的內存使用量(在內存數據庫中),記錄通過存儲的順序移除。
hash數據庫支持”mode”, “bnum”, “apow”, “fpow”, “opts”, “rcnum”, 和 “xmsiz”.
`rcnum’指定最大的緩存記錄數。如果它不大於零,那麼緩存記錄不可用。默認不可用。
xmsiz   指定外部內存的大小。如果不大於0,內存不可用。默認是67108864,即64M。
`bnum’ 指定bucket存儲桶的數量。如果指定的數目不大於0,將會使用默認的數值131071.推薦數量應該在所有需要存儲的記錄總數的0.4-4倍
`apow’ 跟一個key關聯的記錄數,2的N次方表示.  如果不指定,默認2^4=16.
`fpow’ specifies the maximum number of elements of the free block pool by power of 2.  默認2^10=1024.
`opts’ 指定選項,位或:`HDBTLARGE’ 指定數據庫的大小通過使用64位數組桶能夠超過2G。
`HDBTDEFLATE’  指定每個記錄被Deflate encoding壓縮。
`HDBTBZIP’ 指定每個記錄被BZIP2 encoding壓縮
`HDBTTCBS’指定每個記錄被 TCBS encoding壓縮.
B+ tree數據庫支持”mode”, “lmemb”, “nmemb”, “bnum”, “apow”, “fpow”, “opts”, “lcnum”, “ncnum”, 和 “xmsiz”.
Fixed-length 數據庫 支持 “mode”, “width”, and “limsiz”.
Table 數據庫支持 “mode”, “bnum”, “apow”, “fpow”, “opts”, “rcnum”, “lcnum”, “ncnum”, “xmsiz”, 和 “idx”
“idx”指定表的索引。
“mode”可以包含 “w” 寫, “r” 讀, “c” 創建, “t” 截斷,”e” 無鎖,和”f” 非阻塞鎖。默認的的mod爲”wc”。

優化性能

如果使用hash數據庫我們可以指定#bnum=xxx來提高性能。xxx大於或等我我們的記錄總數。

如果使用B+ tree數據庫我們可以通過指定”#lcnum=xxx#bnum=yyy” 來提高性能.第一個參數指定被緩存的最大葉子節點數,受內存容量限制,第二個參數指定桶的數量,它應該大於總記錄數的1/128.

如果有大量的客戶端連接,確保我們的文件描述符夠用。系統默認是1024,我們可以用使用“ulimit”來重新設定

比如下面的單機實例啓動腳本(一個正在線上運行的腳本):

#!/bin/sh
ulimit -SHn 51200
ttserver -host 192.168.0.136  -port 11212 -thnum 8 -dmn -pid /data/ttserver/ttserver.pid -log /data/ttserver/ttserver.log -le -ulog /data/ttserver/ -ulim 128m -sid 1 -rts /data/ttserver/ttserver.rts /data/ttserver/database.tch#bnum=10000000#xmsiz=434217728#rcnum=20000

使用hash數據庫,最大會緩存20000個記錄,最大使用內存434217728bytes(414M),bucket存儲桶的數量 10000000。

目前的庫大小:

-rw-r–r–  1 root root  28G Mar  8 12:19 bbsdatabase.tch
因爲使用了64位操作系統,所以文件大小不受2G的限制。
我們再看下讀取數據的速度:
當前獲取memcache Threads_cdb_threads_tid3565732_displayorder_0 使用時間 0.00054812431335449
以上是程序打印出來的通過memcache協議讀取key爲memcache Threads_cdb_threads_tid3565732_displayorder_0的數據所花的時間 0.00054812431335449(s),可以看到速度還是非常快的。

啓動實例

個人推薦通過修改ttservctl來實現啓動。下面我們舉幾個簡單的啓動例子。
單機啓動例子,下面是ttservctl文件的部分:
#! /bin/sh
#—————————————————————-
# Startup script for the server of Tokyo Tyrant
#—————————————————————-
# configuration variables
prog=”ttservctl”
cmd=”ttserver”
basedir=”/var/ttserver” #數據庫存放的路徑,比如改爲”/data/mydata”
port=”1978″ #啓動的端口
pidfile=”$basedir/pid”
logfile=”$basedir/log”
ulogdir=”$basedir/ulog”
ulimsiz=”256m”
sid=1
dbname=”$basedir/casket.tch#bnum=1000000″ #上面講的數據庫類型配置
maxcon=”65536″
retval=0
雙機互爲主輔模式,比如兩臺機器的Ip分別爲192.168.1.176和192.168.1.1.177,以下爲ttservctl文件的一 部分。
176的配置:
#! /bin/sh
#—————————————————————-
# Startup script for the server of Tokyo Tyrant
#—————————————————————-
# configuration variables
prog=”ttservctl”
cmd=”ttserver”
basedir=”/data/data/data1″
port=”11211″
pidfile=”$basedir/pid”
logfile=”$basedir/log”
ulogdir=”$basedir/”
mhost=”192.168.1.177″ #主ip即另外機器的ip
ulimsiz=”256m”
sid=6#注意要每臺機器不一樣
dbname=”$basedir/casket.tch#bnum=100000000#xmsiz=104857600#rcnum=1000000″
rts=”$basedir/ttserver.rts” #在ttservctl基礎上增加
maxcon=”65536″
retval=0
# locale clear
LANG=C
LC_ALL=C
export LANG LC_ALL
# start the server
start(){
printf ‘Starting the server of Tokyo Tyrant\n’
ulimit -n “$maxcon”
mkdir -p “$basedir”
if [ -f "$pidfile" ] ; then
pid=`cat “$pidfile”`
printf ‘Existing process: %d\n’ “$pid”
retval=1
else
$cmd \
-port “$port” \
-dmn \
-pid “$pidfile” \
-log “$logfile” \
-ulog “$ulogdir” \
-ulim “$ulimsiz” \
-sid “$sid” \
-mhost “$mhost” \#在ttservctl基礎上增加
-mport “$port” \#在ttservctl基礎上增加
-rts “$rts” \#在ttservctl基礎上增加
“$dbname”
if [ "$?" -eq 0 ] ; then
printf ‘Done\n’
else
printf ‘The server could not started\n’
retval=1
fi
fi
}

177的配置:

#! /bin/sh
#—————————————————————-
# Startup script for the server of Tokyo Tyrant
#—————————————————————-
# configuration variables
prog=”ttservctl”
cmd=”ttserver”
basedir=”/data/data/data1″
port=”11211″
pidfile=”$basedir/pid”
logfile=”$basedir/log”
ulogdir=”$basedir/”
mhost=”192.168.1.176″ #主ip即另外機器的ip
ulimsiz=”256m”
sid=7#注意要每臺機器不一樣
dbname=”$basedir/casket.tch#bnum=100000000#xmsiz=104857600#rcnum=1000000″
rts=”$basedir/ttserver.rts” #在ttservctl基礎上增加
maxcon=”65536″
retval=0
# locale clear
LANG=C
LC_ALL=C
export LANG LC_ALL
# start the server
start(){
printf ‘Starting the server of Tokyo Tyrant\n’
ulimit -n “$maxcon”
mkdir -p “$basedir”
if [ -f "$pidfile" ] ; then
pid=`cat “$pidfile”`
printf ‘Existing process: %d\n’ “$pid”
retval=1
else
$cmd \
-port “$port” \
-dmn \
-pid “$pidfile” \
-log “$logfile” \
-ulog “$ulogdir” \
-ulim “$ulimsiz” \
-sid “$sid” \
-mhost “$mhost” \#在ttservctl基礎上增加
-mport “$port” \#在ttservctl基礎上增加
-rts “$rts” \#在ttservctl基礎上增加
“$dbname”
if [ "$?" -eq 0 ] ; then
printf ‘Done\n’
else
printf ‘The server could not started\n’
retval=1
fi
fi
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章