1. 程式人生 > >基於twemproxy的redis叢集方案實踐

基於twemproxy的redis叢集方案實踐

Twemproxy又名nutcraker,是由Twtter 開源,是一種代理分片機制的中介軟體(類似於mycat),主要用於管理 Redis Memcached 叢集,可接受來自多個客戶端的請求,按照路由規則,轉發給後端cache節點,減少了客戶端與cache 伺服器直接連線的數量。

一、twemproxy特性

1、優點

  • 快速。
  • 輕量級。
  • 保持與伺服器的長連線。
  • 減少了直接與快取伺服器連線的連線數量
  • 啟用管道pipelining請求和響應。
  • 支援代理到多個伺服器。
  • 同時支援多個伺服器池。
  • 跨多個伺服器自動共享資料。
  • 實現完整的memcached ascii和redis協議。
  • 通過yaml檔案輕鬆配置伺服器池。
  • 支援多種雜湊模式,包括一致的雜湊和分佈。
  • 可以配置為在故障時禁用節點。
  • 可通過埠監控狀態。
  • 可執行在Linux、*BSD、OS X和SmartOS(Solaris)

2、缺點

  • 不支援針對多個值的操作,比如取sets的子交併補等
  • 不支援Redis的事務操作
  • 錯誤訊息、日誌資訊匱乏,排查問題困難
  • 無友好管理介面,運維操作困難
  • 無法平滑擴充套件,新增去除新節點必須重啟服務

二、twemproxy安裝

autoconf是一個用於生成可以自動地配置軟體原始碼包,用以適應多種UNIX類系統的shell指令碼工具,因此要安裝autoconf。

1、檢查autoconf

檢查是否安裝autoconf:rpm -qa |grep -i autoconf,看到:autoconf-2.63-5.1.el6.noarch

 若已安裝版本低於2.64,解除安裝 rpm -e --nodeps autoconf-*

若沒有安裝,則去http://ftp.gnu.org/gnu/autoconf/下載目前最新版本autoconf-2.69.tar.gz安裝

解壓 tar -zxvf autoconf-2.69.tar.gz後進入根目錄cd autoconf-2.69
配置:./configure  

編譯:make  

安裝:make install

確保每一步操作沒有錯誤出現

2、twemproxy安裝

https://github.com/twitter/twemproxy下載原始碼包,wget https://codeload.github.com/twitter/twemproxy/zip/master

解壓:unzip master,

進入解壓目錄:cd twemproxy-master

生成原始碼包 :autoreconf -fvi

配置 :./configure --prefix=/usr/local/twemproxy

編譯 :make

安裝 :make install

三、配置nutcracker

1、引數釋義

  • listen: 監聽伺服器池的地址和埠或者是sock檔案的絕對路勁 (如 /var/run/nutcracker.sock) 
  • client_connections: 允許從Redis客戶端的獲取的最大連線數。預設不限制,同樣適用於作業系統強制的限制
  • 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部分。例如"{}" 或 "$$"。雜湊標記允許將不同的金鑰對映到同一個伺服器,只要標記中的金鑰部分相同
  • distribution: key的分發模式. 可能取值如下:
  • ketama
  • modula
  • random
  • timeout: 等待與伺服器建立連線或從伺服器接收響應的超時值(毫秒)。預設一直等待
  • backlog: tcp backlog引數。預設為512.
  • preconnect: 用於控制twemproxy在程序啟動時是否應預連線到此池中的所有伺服器。預設為false
  • redis: 制服務器池是否使用redis或memcached協議。預設為false。
  • redis_auth: 連線時對redis伺服器進行身份驗證.
  • redis_db: 池伺服器上要使用的資料庫編號。預設值為0。twemproxy將始終以db0的形式呈現給客戶機
  • server_connections: 可以開啟到每個伺服器的最大連線數。預設最多開啟1個伺服器連線
  • auto_eject_hosts:用於當伺服器連續請求失敗超過限制次數時是否禁用該伺服器。預設為false
  • server_retry_timeout: 當auto_eject_hosts為true時,在要禁用伺服器上重試之前等待的超時值(毫秒)。預設為30000毫秒.
  • server_failure_limit: 當auto_eject_hosts為true時,連續請求失敗超限次數,超過次數該redis節點被禁用。預設值為2。
  • servers: 伺服器池的伺服器地址、埠、權重.

2、配置nutcracker.yml

安裝後會在/usr/local/twemproxy 生成 sbin  share,sbin下為nutcraker命令,share下為nutcraker.8命令

需要把twemproxy-master下conf的配置nutcracker.yml複製到/usr/local/twemproxy下

編輯vim /usr/local/twemproxy/conf/nutcracker.yml配置檔案如下

alpha:
  listen: 192.168.172.71:22121
  hash: fnv1a_64
  distribution: ketama
  auto_eject_hosts: true
  redis: true
  server_retry_timeout: 3000
  server_failure_limit: 3
  servers:
   - 192.168.172.72:6379:1
   - 192.168.172.73:6379:1
   - 192.168.172.74:6379:1

listen後為twmeproxy所在節點,servers為每個redis節點,distribution採用一致性雜湊演算法ketama

3、測試配置

配置完成了,測試下nutcracker.yml在語法 上是否有誤

/usr/local/twemproxy/sbin/nutcracker -t /usr/local/twemproxy/conf/nutcracker.yml

正確顯示如下:

nutcracker: configuration file 'conf/nutcracker.yml' syntax is ok

四、啟動nutcracker

進入到安裝路徑/usr/local/twemproxy下

啟動命令:sbin/nutcracker -d -c conf/nutcracker.yml  -o logs/log.log -p ./twemproxy.pid

-d守護程序啟動,-c指定配置檔案,o指定日誌檔案路徑,日誌需要自己建立,-p指定pid儲存路徑

/usr/local/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             : 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)

參考:https://github.com/twitter/twemproxy