Twemproxy,也叫Nutcraker。是一個Twtter開源的一個Redis和Memcache代理服務器。 Redis做爲一個高效的緩存服務器,很是具備應用價值。可是當使用比較多的時候,就但願能夠經過某種方式 統一進行管理。避免每一個應用每一個客戶端管理鏈接的鬆散性,同時在必定程度上變得能夠控制。 搜索了很多的開源代理項目,知乎實現的Python分片客戶端。Node的代理中間層,還有各類Restfull的開源代理。node
Twemproxy是一個代理服務器,能夠經過它減小Memcached或Redis服務器所打開的鏈接數。git
優勢:github
一、經過代理的方式減小緩存服務器的鏈接數redis
二、自動在多臺緩存服務器間共享數據算法
三、經過不一樣的策略與散列函數支持一致性散列vim
四、經過配置的方式禁用失敗的結點緩存
五、運行在多個實例上,客戶端能夠鏈接到首個可用的代理服務器服務器
六、支持請求的流式與批處理,於是可以下降來回的消耗函數
1、安裝依賴項測試
yum install automake
yum install libtool
2、更新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 #查看是否安裝成功
3、安裝Twemproxy
一、 安裝git命令
yum install git -y
二、 下載
git clone https://github.com/twitter/twemproxy.git
三、 安裝
cd twemproxy autoreconf -fvi ./configure --prefix=/usr/local/twemproxy make -j 8 make install
四、 配置文件
添加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
五、 啓動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是一個很好的選擇。