Redis+Twemproxy分片存儲實現

from unsplash前端

爲提升Redis存儲能力的提高,以及對外提供服務可用性提高,有時候有必要針對Redis進行集羣式搭建,比較經常使用的有Twemproxy分片存儲以及官方提供的Cluster方式。git

Redis實例安裝

Redis的安裝這裏再也不多講,相關步驟可從官網或其它渠道獲得。爲安裝redis多實例,這裏簡單提早建立完相關文件夾。其中redis存放應用程序,redis1/redis2/redis3僅存儲配置文件。程序員

  
    
  
  
   
   
            
   
   
  1. github

  2. web

  3. redis

  4. 算法

  5. 緩存

  6. 微信

[root@host1 redis-cluster]# ll總用量 4drwxr-xr-x 6 root root 4096 8  29 09:16 redisdrwxr-xr-x 2 root root   24 8  29 09:29 redis1drwxr-xr-x 2 root root   24 8  29 09:25 redis2drwxr-xr-x 2 root root   24 8  29 09:26 redis3

各實例簡單配置以下: redis1架構

  
    
  
  
   
   
            
   
   
daemonize yesport 63791pidfile /var/run/redis1.pid

redis2

  
    
  
  
   
   
            
   
   
daemonize yesport 63792pidfile /var/run/redis2.pid

redis3

  
    
  
  
   
   
            
   
   
daemonize yesport 63793pidfile /var/run/redis3.pid

分別啓動,運行成功以下:

  
    
  
  
   
   
            
   
   
[root@host1 redis-cluster]# ps -ef |grep redisroot     110719      1  0 09:24 ?        00:00:00 redis/src/redis-server 127.0.0.1:63791root     110761      1  0 09:25 ?        00:00:00 redis/src/redis-server 127.0.0.1:63792root     110787      1  0 09:26 ?        00:00:00 redis/src/redis-server 127.0.0.1:63793root     110964  83212  0 09:30 pts/0    00:00:00 grep --color=auto redis
Twemproxy應用

以上三個實例各爲獨自運行,並無啓動集羣存儲、存儲能力提高的功能。爲實現redis的集羣存儲,本例結合早先出現的Twemproxy技術(由twitter開源)進行redis分片存儲,而非在Twemproxy以後出現的官方提供的cluster功能。

下面開啓Twemproxy的應用,源碼安裝

  
    
  
  
   
   
            
   
   
[root@host1 src]# git clone git@github.com:twitter/twemproxy.git[root@host1 src]# cd twemproxy[root@host1 twemproxy]# autoreconf -fvi[root@host1 twemproxy]# ./configure --enable-debug=full[root@host1 twemproxy]# make[root@host1 twemproxy]# src/nutcracker -h[root@host1 twemproxy]# src/nutcracker -hThis is nutcracker-0.4.1Usage: 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)

安裝完成後,配置nutcracker.yml,採用ketama(一致性hash算法)分片方式。其他還有Modula和Random兩種方式。取模算法有明細的缺陷:在分片增長的狀況下,數據的命中率直線降低。隨機算法更是沒法保證數據的均衡讀寫。

  
    
  
  
   
   
            
   
   
redis-cluster:  listen: 0.0.0.0:22122  hash: fnv1a_64  distribution: ketama  timeout: 400  backlog: 65535  preconnect: true  redis: true  server_connections: 1  auto_eject_hosts: true  server_retry_timeout: 60000  server_failure_limit: 3  servers:    - 127.0.0.1:63791:1 redis01    - 127.0.0.1:63792:1 redis02    - 127.0.0.1:63793:1 redis03

保存後,進行簡單的測試,保證配置文件的正確性,若出現以下響應,證實配置文件運行正常。

[root@host1 conf]# ../src/nutcracker -c nutcracker.yml -t

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

啓動Twemproxy,此時的redis的分片集羣搭建已完成。能夠經過22122直接訪問redis服務【twemproxy並不支持全部redis/memcache的命令,具體請參考https://github.com/twitter/twemproxy/blob/master/notes/redis.md】

簡單測試

採用redis-cli客戶端登錄22122端口,隨機寫入一批數據,再經過redis-cli鏈接具體的redis實例端口,如63791/63792/63793,查看數據是真實的存儲在哪個實例中。

至此,咱們已經搭建好一個分片存儲的Redis集羣應用,爲前端提供強勁數據緩存服務

擴展閱讀:

長按2秒,識別二維碼,關注我。

關注程序員成長

本文分享自微信公衆號 - 碼聞強識(mavenTalk)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索