天天看點

Memcached 源碼安裝 與 配置

主機環境: CentOS 6.6 x86_64

一,安裝memcached

1,由于memcached依賴libevent 庫,用它做Socket的處理,是以,我們需要安裝libevent庫,我這裡就用yum來安裝了.

2,到官網下載下傳memcached 的源碼包.   http://memcached.org

Memcached 源碼安裝 與 配置

最新版是 v1.4.24  

編譯安裝

但是有報錯

Memcached 源碼安裝 與 配置

沒有找到libevent庫檔案

發現是安裝到/usr/lib64 目錄下的.

3,繼續安裝,,,,,   繼續報錯,, 算了,我們直接編譯安裝最新版 libevent 吧

libevent的官網是 http://libevent.org/ 

Memcached 源碼安裝 與 配置

直接下載下傳最新的

4,繼續安裝memcached

5,安裝完成後  試運作下memcached 看有無報錯

Memcached 源碼安裝 與 配置

來看下安裝後,的目錄樹

Memcached 源碼安裝 與 配置

檔案很少,可執行程式隻有bin目錄下的 memcached 一個,是以隻能通過它來啟動memcached服務.我們來看下memcached 指令的用法. 使用memcached -h 檢視.

6, memcached參數詳解

-p: 指定tcp協定的監聽端口,預設11211

-U: 指定UDP協定的監聽端口,預設也是11211

-s: 指定unix套接字路徑,使用unix套接字來監聽.

-a: 設定套接字的掩碼.格式為八進制,預設0700

-l: 指定監聽的網絡位址.預設為0.0.0.0

-d: 将memcached作為守護程序,在背景運作.

-r: 核心檔案的最大值限制.

-u: 指定memcached的運作身份.

-m: 指定用于存儲緩存條目的最大記憶體值,機關為 MB (預設64MB)

-M: 始終不删除過期的舊資料,而是在記憶體耗盡過後直接報錯.

-c: 限制同時的最大連接配接數.(預設 1024)

-k: 鎖定所有分頁記憶體.

注意:這裡是一個限制值,限制了你可以鎖定多少記憶體,如果配置設定了超過限定值的操作,将會失敗.是以要針對啟動memcached的使用者程序正确的限制,而不是-u參數指定使用者運作,在sh下,這個操作也可以使用 ulimit -S -l NUM_KB 來完成.對于一個大的緩存來說,這個有點危險,是以檢視README文檔和memcached首頁去檢視有關他的配置建議.

-v: 詳細模式

-vv: 更詳細,,

-vvv: 最詳細,,

-h: 幫助資訊.

-i: 列印memcached 和 libevent許可.

-P: 儲存PID檔案的路徑及檔案名,該參數隻有在使用-d選項後才生效.

-f: 設定塊(chunk)大小的增長因子,預設1.25

-n: 指定配置設定給key value flags 的最小空間. 預設48

-L: 盡量使用大記憶體頁(如果有效的前提下).增加記憶體頁的大小能夠減少TLB失誤數,并且能提高性能.為了能夠從作業系統擷取大的記憶體頁,memcached将會配置設定所有的緩存條目到一個大的快(chunk)中.這種機制與所使用的作業系統有關,隻有你的作業系統支援才有效.

-D: 使用<char>作為key字首 和 ID的分隔符,用在狀态報告中,預設的<char>是冒号 : ,如果使用該參數指定了分隔符,那麼在狀态收集中會自動打開,如果沒有設定,那麼需要向伺服器發送 stats detail on 指令才會打開.

-t: 使用的線程數. 預設為4 

-R: 通過該參數來設定一個限制值,定義每一個事件(event)請求的最大值,以便保護能夠處理完成一個單獨的用戶端請求,一旦一個連接配接超過了這個值,那麼memcached将會試圖通過其他的連接配接來處理I/O.它的預設值為20

-C: 禁用CAS

-b: 設定等待(積壓)隊列的限制,預設1024

-B: 設定綁定的協定 --可選的有ascii,binary 或 auto(預設).

-I: 設定每一個塊(slab)頁的大小,預設的大小為1MB,最小為1KB,最大為128MB,調整這個值能夠改變對緩存條目大小的限制.當心這個操作同樣會增加slab的數目(使用-v來檢視),并且會使用memcached的所有記憶體.

7,啟動memcached

下面是啟動memcached的兩種方式.

第一種:

第二種方式:

以下是輸出内容:

slab class   1: chunk size        96 perslab   10922

slab class   2: chunk size       120 perslab    8738

slab class   3: chunk size       152 perslab    6898

.....

slab class  40: chunk size    616944 perslab       1

slab class  41: chunk size    771184 perslab       1

slab class  42: chunk size   1048576 perslab       1

<26 server listening (auto-negotiate)

<27 send buffer was 124928, now 268435456

<28 server listening (udp)

<30 server listening (udp)

<29 server listening (udp)

<27 server listening (udp)

分析如下:

Memcached 源碼安裝 與 配置

這裡的slab就是相當于memcached提供的緩存,memcached伺服器堆記憶體的配置設定機關就是slab,一個slab大小在預設情況下是1MB,而每一個slab又被分為若幹個chunk,就像對磁盤或記憶體的使用一樣一層一層的分割直到最小機關,而這裡chunk就是最小的機關了,然後在這些chunk中保持我們緩存的條目 item,而chunk的大小也就完全一樣了,是以,對于一個位元組或者十個位元組可能使用的chunk數目是一樣多的,也就是說最少也存在着浪費.

還有一點需要說明的是,在每一個chunk中除了儲存緩存條目的值(value)以外, 還有結構體, key .

圖中chunk的增長大小就是因為有預設 -f 1.25的增長因子作用.

添加memcached可執行程式的軟連接配接到系統PATH目錄下

8,memcached的其他工具

在memcached的源碼包中有一個scripts目錄, 裡面由一些自帶的腳本和工具.

8.1, damemtop

    該工具使用perl子產品,如果以前沒有安裝過這些子產品,那麼隻有安裝過後才可以使用.

8.1.1, 安裝perl相關子產品

    下面是AnyEvent  YAML   TermReadKey 三個子產品的安裝.

# ./damemtop 

YAML Error: Couldn't open /etc/damemtop.yaml for input:\n

   Code: YAML_LOAD_ERR_FILE_INPUT

 at ./damemtop line 543

運作腳本報錯,,   提示需要/etc/damemtop.yaml 檔案

那麼可以吧scripts 目錄下的 damemtop.yaml 複制到 /etc/ 目錄下

分析配置檔案 damemtop.yaml

這個檔案的格式采用了YAML(是YAML Ain't a Markup Language的縮寫).下面看一看配置檔案内容:

Memcached 源碼安裝 與 配置

做好必要的配置後,就可直接運作 damemtop 了

如圖:

Memcached 源碼安裝 與 配置

8.2 memcached-sysv服務腳本

顧名思義,該檔案是個系統服務腳本.

檢視服務腳本,由于我們的memcached是源碼定制安裝,是以需要注意腳本中的黑色字型部分,

#! /bin/sh

#

# chkconfig: - 55 45

# description:  The memcached daemon is a network memory cache service.

# processname: memcached

# config: /etc/sysconfig/memcached

# Source function library.

. /etc/rc.d/init.d/functions

PORT=11211

USER=memcached

MAXCONN=1024

CACHESIZE=64

OPTIONS=""

if [ -f /etc/sysconfig/memcached ];then

    . /etc/sysconfig/memcached

fi

# Check that networking is up.

if [ "$NETWORKING" = "no" ]

then

    exit 0

RETVAL=0

prog="memcached"

start () {

    echo -n $"Starting $prog: "

    # insure that /var/run/memcached has proper permissions

    chown $USER /var/run/memcached

    daemon memcached -d -p $PORT -u $USER  -m $CACHESIZE -c $MAXCONN -P /var/run/memcached/memcached.pid $OPTIONS

    RETVAL=$?

    echo

    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/memcached

}

stop () {

    echo -n $"Stopping $prog: "

    killproc memcached

    if [ $RETVAL -eq 0 ] ; then

        rm -f /var/lock/subsys/memcached

        rm -f /var/run/memcached.pid

    fi

restart () {

    stop

    start

# See how we were called.

case "$1" in

    start)

        start

        ;;

    stop)

    ;;

    status)

    status memcached

    restart|reload)

    restart

    condrestart)

    [ -f /var/lock/subsys/memcached ] && restart || :

    *)

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

    exit 1

esac

exit $?

當然如配置檔案所示,響應的參數可以單獨寫到 /etc/sysconfig/memcached 檔案中,這樣memcached的配置檔案結構更清晰.

8.3,  memcached-tool

memcached-tool 是基于perl 的腳本,使用前務必确認已經安裝好perl

Memcached 源碼安裝 與 配置

執行沒有參數的腳本後,會給出使用示例.

六種格式: (1.4.5版本之前隻有四種格式,新版新增了 settings 和 sizes ,而且提示資訊也明确說明了sizes指令是一個開發人員選項,實際生産環境并不推薦使用)

格式1: memcached-tool ip:port display

Memcached 源碼安裝 與 配置

格式2: memcached-tool ip:port

這種方式同 格式1 是一種預設方式,它的預設參數為display 

格式3: memcached-tool ip:port stats

限制詳細資訊,比如memcached版本号,程序pid号,libevent版本号,線程數,寫入計數,錯誤計數,總連接配接數,目前連接配接數,,,,,,

格式4: memcached-tool ip:port dump

dump參數會将記憶體中現有的緩存對象即 鍵-值 轉存出來.

例如: memcached-tool 127.0.0.1:11211 dump > memcached.txt

9 檢視memcached服務的運作情況

telnet到memcached伺服器後有很多的指令可以使用,如 add get set incr decr replace delete 等,, 除此之外還有一系列的擷取伺服器資訊的指令,這部分指令都是以stats開頭的.

memcached提供了許多指令,可以通過telnet工具來執行,當然你也可以使用PHP提供的Memcached::getStats($cmd) 來執行.

使用telnet 指令