Twemproxy,也叫Nutcraker。是一個Twtter開源的一個Redis和Memcache代理伺服器。 Redis作為一個高效的快取伺服器,非常具有應用價值。但是當使用比較多的時候,就希望可以透過某種方式 統一進行管理。避免每個應用每個客戶端管理連線的鬆散性,同時在一定程度上變得可以控制。 搜尋了不少的開源代理專案,知乎實現的Python分片客戶端。Node的代理中間層,還有各種Restfull的開源代理。
Twemproxy是一個代理伺服器,可以透過它減少Memcached或Redis伺服器所開啟的連線數。
優點:
1、透過代理的方式減少快取伺服器的連線數
2、自動在多臺快取伺服器間共享資料
3、透過不同的策略與雜湊函式支援一致性雜湊
4、透過配置的方式禁用失敗的結點
5、執行在多個例項上,客戶端可以連線到首個可用的代理伺服器
6、支援請求的流式與批處理,因而能夠降低來回的消耗
一、安裝依賴項
yum install automake
yum install libtool
二、更新Autoconf版本。
Twemproxy需要2.64或更高版本。否則編譯的時候報錯:
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal --force -I m4
configure.ac:8: error: Autoconf version 2.64 or higher is required
configure.ac:8: the top level
autom4te: /usr/bin/m4 failed with exit status: 63
aclocal: autom4te failed with exit status: 63
autoreconf: aclocal failed with exit status: 63
下載新版本: #wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
rpm -qf /usr/bin/autoconf autoconf-2.63-5.1.el6.noarch rpm -e --nodeps autoconf-2.63 #解除安裝當前版本 tar zxvf autoconf-2.69.tar.gz #解壓安裝 cd autoconf-2.69 ./configure --prefix=/usr #編譯 make && make install #安裝
/usr/bin/autoconf -V #檢視是否安裝成功
三、安裝Twemproxy
1、 安裝git命令
yum install git -y
2、 下載
git clone https://github.com/twitter/twemproxy.git
3、 安裝
cd twemproxy autoreconf -fvi ./configure --prefix=/usr/local/twemproxy make -j 8 make install
4、 配置檔案
新增pid檔案目錄和配置檔案conf目錄
cd /usr/local/twemproxy
mkdir run conf
新增proxy配置檔案
cd conf
vim nutcracker.yml alpha: listen: 127.0.0.1:22222 #使用哪個埠啟動Twemproxy hash: fnv1a_64 #指定具體的hash函式 distribution: ketama #具體的hash演算法 auto_eject_hosts: true #是否在結點無法響應的時候臨時摘除結點 timeout: 400 #超時時間(毫秒) redis: true #是否是Redis的proxy server_retry_timeout: 3000 #重試的時間(毫秒) server_failure_limit: 1 #結點故障多少次就算摘除掉 servers: #下面表示所有的Redis節點(IP:埠號:權重 別名) - 192.168.1.10:6379:1 master0 - 192.168.1.7:6379:1 master1
5、 啟動twemproxy服務
nutcracker -t 測試配置檔案
nutcracker: configuration file 'conf/nutcracker.yml' syntax is ok
啟動服務:
nutcracker -d -c /usr/local/twemproxy/conf/nutcracker.yml -p /usr/local/twemproxy/run/redisproxy.pid -o /usr/local/twemproxy/run/redisproxy.log
6、nutcracker用法與命令選項
Usage: nutcracker [-?hVdDt] [-v verbosity level] [-o output file]
[-c conf file] [-s stats port] [-a stats addr]
[-i stats interval] [-p pid file] [-m mbuf size]
Options:
-h, –help : 檢視幫助文件,顯示命令選項
-V, –version : 檢視nutcracker版本
-t, –test-conf : 測試配置指令碼的正確性
-d, –daemonize : 以守護程式執行
-D, –describe-stats : 列印狀態描述
-v, –verbosity=N : 設定日誌級別 (default: 5, min: 0, max: 11)
-o, –output=S : 設定日誌輸出路徑,預設為標準錯誤輸出 (default: stderr)
-c, –conf-file=S : 指定配置檔案路徑 (default: conf/nutcracker.yml)
-s, –stats-port=N : 設定狀態監控埠,預設22222 (default: 22222)
-a, –stats-addr=S : 設定狀態監控IP,預設0.0.0.0 (default: 0.0.0.0)
-i, –stats-interval=N : 設定狀態聚合間隔 (default: 30000 msec)
-p, –pid-file=S : 指定程式pid檔案路徑,預設關閉 (default: off)
-m, –mbuf-size=N : 設定mbuf塊大小,以bytes單位 (default: 16384 bytes)
7、最近在新的公司要上twemproxy方案了,使用過程中出現了一下小問題:
1).yml配置檔案中每個引數值對分隔符”:”後需要有一個空格
2)不同層次的引數需要縮排區分,最好使用tab鍵縮排,否則nutcracker程式不能啟動。
3)在auto_eject_hosts: true的時候,關閉一個redis例項後,寫入資料還是提示“(error) ERR Connection refused”。這個與server_retry_timeout引數設定太小有關,預設值30000msec是一個很好的選擇。