redis叢集實現(八)redis+twemproxy叢集
阿新 • • 發佈:2018-12-25
redis的確是一個非常高效的快取伺服器,但是單臺redis伺服器的記憶體管理能力有限,如果一味的加大記憶體的話會導致redis伺服器的效能下降,所以就必須要搭建redis叢集來提供服務。在redis官方在3.0.0版本給出叢集方案之前,大部分的企業都使用twemproxy元件來進行redis叢集的搭建。
twemproxy 通過引入一個代理層,可以將其後端的多臺redis進行統一管理與分配,使應用程式只需要在twemproxy 上進行操作,而不用關心後面具體有多少個真實的redis伺服器。
接下來我們來搭建一個twemproxy代理的redis,感受一把redis + twemproxy的魅力。
搭建twemproxy,步驟如下
#編譯twemproxy需要用到automake和libtool兩個編譯工具包
sudo apt-get install automake
sudo apt-get install libtool
git clone https://github.com/twitter/twemproxy.git
cd twemproxy
autoreconf -fvi
./configure --enable-debug=log
make
這樣,我們就安裝成功了,如果我們輸入nutcracker -h會有如下的列印結果,就說明我們安裝twemproxy成功。
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 : this help -V, --version : show version and exit -t, --test-conf : test configuration for syntax errors and exit -d, --daemonize : run as a daemon -D, --describe-stats : print stats description and exit -v, --verbose=N : set logging level (default: 5, min: 0, max: 11) -o, --output=S : set logging file (default: stderr) -c, --conf-file=S : set configuration file (default: conf/nutcracker.yml) -s, --stats-port=N : set stats monitoring port (default: 22222) -a, --stats-addr=S : set stats monitoring ip (default: 0.0.0.0) -i, --stats-interval=N : set stats aggregation interval in msec (default: 30000 msec) -p, --pid-file=S : set pid file (default: off) -m, --mbuf-size=N : set size of mbuf chunk in bytes (default: 16384 bytes)
然後我修改配置檔案,啟動twemproxy作為redis的代理。在conf/nutcracker.yml有配置檔案的模板,我們照著修改下就可以了,修改後的配置檔案如下
beta: listen: 127.0.0.1:22122 hash: fnv1a_64 hash_tag: "{}" distribution: ketama auto_eject_hosts: false timeout: 400 redis: true servers: - 127.0.0.1:7000:1 server1 - 127.0.0.1:7001:1 server2 - 127.0.0.1:7002:1 server3 - 127.0.0.1:7003:1 server4 - 127.0.0.1:7004:1 server5 - 127.0.0.1:7005:1 server6
執行如下命令啟動twemproxy
nutcracker -d -c conf/nutcracker.yml
我們測試下twemproxy是否可用
[email protected]:~/redis-3.0.0/src$ redis-cli -p 22122 -c
127.0.0.1:22122> set key value
-> Redirected to slot [12539] located at 192.168.39.153:7005
OK
192.168.39.153:7005> get key
"value"
然後進行twemproxy和redis後端的benchmark對比
[email protected]:~/redis-3.0.0/src$ redis-benchmark -h 127.0.0.1 -p 22122 -c 100 -t set -d 100 -l
SET
35790.98 requests per second
而redis後端的效能是
SET
64935.07 requests per second
說明twemproxy的代理使得redis效能有所損失,但是為了使redis能夠支援叢集,損失一點效能還是可以接受的。