1. 程式人生 > >Redis叢集之twemproxy

Redis叢集之twemproxy

twemproxy優缺點介紹

優點

這是一個輕量級的Redis和memcached代理。使用它可以減少快取伺服器的連線數,並且利用它來作分片。這個代理的速度是相當快的,在網上查到會有20%的效能損耗,但上面的redis-benchmark做了測試,發現效能更快。後來找到英文原文,作者是說最差情況下,效能損耗不會多於20%。twemproxy用了pipeline. 首先redis是支援使用pipeline批處理的。twemproxy與每個redis伺服器都會建立一個連線,每個連線實現了兩個FIFO的佇列,通 過這兩個佇列實現對redis的pipeline訪問。將多個客戶端的訪問合併到一個連線,這樣既減少了redis伺服器的連線數,又提高了訪問效能。

缺點

  • 雖然可以動態移除節點,但該移除節點的資料就丟失了。
    redis叢集動態增加節點的時候,twemproxy不會對已有資料做重分佈.maillist裡面作者說這個需要自己寫個指令碼實現
  • 效能上的損耗

下載twemproxy

git clone https://github.com/twitter/twemproxy.git 

執行測試autoreconf

[[email protected] twemproxy]# autoreconf
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

此處可能有多種情況
1:如上,則需要更新autoreconf

[root@spg twemproxy] wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
[root@spg
twemproxy] tar zxvf autoconf-2.69.tar.gz cd autoconf [root@spg twemproxy]# ./configure --prefix=/usr [root@spg twemproxy]# make [root@spg twemproxy]# make install

2:提示未安裝,則同樣可按上面步驟安裝

完成後繼續執行autoreconf
可能提示如下錯誤:
A:未安裝automake包錯誤

autoreconf: Entering directory `.'  
autoreconf: configure.ac: not using Gettext  
autoreconf: running: aclocal --force -I m4  
Can't exec "automake": No such file or directory at /usr/local/share/autoconf/Autom4te/FileUtils.pm line 326, <GEN2> line 7.  
autoreconf: failed to run automake: No such file or directory  

可直接yum安裝

yum install automake
[root@spg twemproxy]# tar -xf automake-1.12.1.tar.gz   
[root@spg twemproxy]# ./configure   
[root@spg twemproxy]# make && make install  

B:未安裝libtool錯誤:

configure.ac:36: error: possibly undefined macro: AC_PROG_LIBTOOL
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
autoreconf: /usr/bin/autoconf failed with exit status: 1

同上,使用yum方式安裝libtoo,或直接下載安裝
libtool-2.2.4.tar.gz 包下載地址:http://ftp.gnu.org/gnu/libtool/

[root@spg twemproxy]# tar -xf libtool-2.2.4.tar.gz  
[root@spg twemproxy]# ./configure   
[root@spg twemproxy]# make && make install  

完成後繼續安裝twemproxy:

[root@spg twemproxy]# CFLAGS="-ggdb3 -O0" autoreconf -fvi && ./configure --prefix=/usr/local/twemproxy  --enable-debug=log
[root@spg twemproxy]# make
[root@spg twemproxy]# make install

新增twemproxy配置檔案

[root@spg conf]# cd /usr/local/twemproxy/
[root@spg twemproxy]# ll
總用量 0
drwxr-xr-x. 2 root root 23 321 22:50 sbin
drwxr-xr-x. 3 root root 16 321 22:50 share
[root@spg twemproxy]# mkdir conf run
[root@spg twemproxy]# ll
總用量 0
drwxr-xr-x. 2 root root  6 321 22:52 conf
drwxr-xr-x. 2 root root  6 321 22:52 run
drwxr-xr-x. 2 root root 23 321 22:50 sbin
drwxr-xr-x. 3 root root 16 321 22:50 shar
[root@spg twemproxy]# cd conf
[root@spg twemproxy]# vim nutcracker.yml

新增如下內容:

redis:
  listen: 0.0.0.0:22122  #使用哪個埠啟動Twemproxy
  hash: fnv1a_64         #key值hash演算法,預設fnv1a_64
  hash_tag: "{}"   
  distribution: ketama   #分佈演算法 ketama一致性hash演算法;modula非常簡 random隨機分佈
  auto_eject_hosts: false  #摘除後端故障節點
  timeout: 400             #代理與後端超時時間,毫秒
  redis: true              #是否是redis快取,預設是false
  server_failure_limit: 1  #故障多少次摘除
  servers:
   - 127.0.0.1:6380:1 server1
   - 127.0.0.1:6381:1 server2
   - 127.0.0.1:6382:1 server3

3.啟動twemproxy (nutcracker)
啟動twemproxy之前先進行配置測試,測試如下:

[[email protected] sbin]# ./nutcracker -t
nutcracker: configuration file 'conf/nutcracker.yml' syntax is ok

如果syntax is ok,則說明成功,否則需要檢查錯誤。
此時,則可以啟動twemproxy

[[email protected] sbin]# ./nutcracker -d -c /usr/local/twemproxy/conf/nutcracker.yml -p /usr/local/twemproxy/run/redisproxy.pid -o /usr/local/twemproxy/run/redisproxy.log

完成後檢視執行緒是否已經啟動成功

[[email protected] twemproxy]# ps -ef|grep nutcracker
root      5096     1  0 22:52 ?        00:00:00 ./sbin/nutcracker -d -c /usr/local/twemproxy/conf/nutcracker.yml -p /usr/local/twemproxy/run/redisproxy.pid -o /usr/local/twemproxy/run/redisproxy.log
root      5099  3249  0 22:52 pts/0    00:00:00 grep --color=auto nutcracker

可以看到已經成功啟動twemproxy,此時可以連線其進行redis操作,注意,此處只需要連線代理(即twemproxy)即可,連線過程如連線redis客戶端一樣。

[[email protected] twemproxy]# redis-cli -p 22122
127.0.0.1:22122> 
127.0.0.1:22122> 
127.0.0.1:22122> 
127.0.0.1:22122> set name spg
OK
127.0.0.1:22122> get name
"spg"
127.0.0.1:22122> 

4.twemproxy配置檔案說明

[[email protected] twemproxy]# ./sbin/nutcracker --help
This is nutcracker-0.4.1
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)