快速的單線程代理程序:Twemproxy

jopen 9年前發布 | 9K 次閱讀 Twemproxy

Twemproxy是一個快速的單線程代理程序,支持 Memcached ASCII協議和更新的Redis協議。可以通過它減少Memcached或Redis服務器所打開的連接數,twemproxy的特性如下:

支持失敗節點自動刪除

 可以設置重新連接該節點的時間
 可以設置連接多少次之后刪除該節點
 該方式適合作為cache存儲

支持設置HashTag

 通過HashTag可以自己設定將兩個KEYhash到同一個實例上去。

減少與redis的直接連接數

 保持與redis的長連接
 可設置代理與后臺每個redis連接的數目

自動分片到后端多個redis實例上

 多種hash算法(部分還沒有研究明白)
 可以設置后端實例的權重

避免單點問題

 可以平行部署多個代理層.client自動選擇可用的一個
 支持redis pipelining request

支持狀態監控

 可設置狀態監控ip和端口,訪問ip和端口可以得到一個json格式的狀態信息串
 可設置監控信息刷新間隔時間

高吞吐量

 連接復用,內存復用。
 將多個連接請求,組成reids pipelining統一向redis請求。
下面就看看這個神器的安裝過程及用法:

1 下載

git clone https://github.com/推ter/twemproxy.git

2 安裝其他依賴

apt-get install libtool libsysfs-dev autoreconf

3 編譯安裝

cd twemproxy
./configure --prefix=/opt/twemproxy
make
make install

4 配置

mkdir /opt/twemproxy/conf/
cp conf/nutcracker.yml /opt/twemproxy/conf/
5 修改nutcracker.yml配置文件

alpha:
  listen: 127.0.0.1:22121
  hash: fnv1a_64
  distribution: ketama
  auto_eject_hosts: true
  redis: true
  server_retry_timeout: 3000
  server_failure_limit: 2
  servers:
   - 127.0.0.1:9000:1
   - 127.0.0.1:9001:1

6 啟動redis實例

/opt/redis-cluster/bin/redis-server /opt/twemproxy/conf/redis-9000.conf 
/opt/redis-cluster/bin/redis-server /opt/twemproxy/conf/redis-9001.conf 
7 啟動twemproxy

/opt/twemproxy/sbin/nutcracker -c /opt/twemproxy/conf/nutcracker.yml
快速的單線程代理程序:Twemproxy

8 測試

快速的單線程代理程序:Twemproxy

9 看看twemproxy的配置文件選項

listen: twemproxy監聽的地址和端口(ip:port)或者是一個絕對路徑sock文件 (/var/run/nutcracker.sock)
client_connections: 允許多少redis client連接上來,默認是沒有限制的  
hash: 數據分片的hash算法,可以是以下值:
        one_at_a_time
        md5
        crc16
        crc32 (crc32 implementation compatible with libmemcached)
        crc32a (correct crc32 implementation as per the spec)
        fnv1_64
        fnv1a_64
        fnv1_32
        fnv1a_32
        hsieh
        murmur
        jenkins
hash_tag: 一個由兩個字符組成的字符串,在key進行hash的時候是key的一部分。例如 "{}" or "$$"。 Hash tag enable mapping different keys to the same server as long as the part of the key within the tag is the same.
distribution: 可以的分發模式,值可以是以下:
        ketama
        modula
        random
timeout: 連接后端服務或者等待后端服務響應的超時時間
backlog: TCP backlog(連接隊列的大小),默認是512。 backlog隊列總和=未完成三次握手隊列+已經完成三次握手隊列
preconnect: 一個boolen值,用來控制twemproxy是否在redis池中的服務啟動前進行連接,默認是false
redis: 一個boolen值,用來控制一個服務器池是傳輸redis協議還是memcache協議,默認是false。
redis_auth: 連接時需要認證
redis_db: 在這個redis服務器池中使用哪個DB,Twemproxy默認連接DB 0
server_connections: 每個服務器的最大連接數,默認我們打開 1個連接
auto_eject_hosts: 一個boolean值,控制一個server達到server_failure_limit故障次數時的動作。默認是false。
server_retry_timeout: 嘗試重連后端服務器的超時時間, 默認是 30000 msec.
server_failure_limit: 嘗試連接后端服務器的次數,默認是2.
servers: 一個服務器地址列表,由port和權重構成(ip:port:weight)
10 nutcracker命令的用法


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)


果然簡單易用,目前來看是比原生的cluster好用一些,不過被反超只是時間問題......

來自:http://my.oschina.net/guol/blog/507399

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!