Redis+Twemproxy分片存儲實現

from unsplash前端

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

Redis實例安裝程序員

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

  1. [root@host1 redis-cluster]# llredis

  2. 總用量 4算法

  3. drwxr-xr-x 6 root root 4096 8月  29 09:16 redis緩存

  4. drwxr-xr-x 2 root root   24 8月  29 09:29 redis1架構

  5. drwxr-xr-x 2 root root   24 8月  29 09:25 redis2dom

  6. drwxr-xr-x 2 root root   24 8月  29 09:26 redis3微服務

各實例簡單配置以下:

redis1

  1. daemonize yes

  2. port 63791

  3. pidfile /var/run/redis1.pid

redis2

  1. daemonize yes

  2. port 63792

  3. pidfile /var/run/redis2.pid

redis3

  1. daemonize yes

  2. port 63793

  3. pidfile /var/run/redis3.pid

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

  1. [root@host1 redis-cluster]# ps -ef |grep redis

  2. root     110719      1  0 09:24 ?        00:00:00 redis/src/redis-server 127.0.0.1:63791

  3. root     110761      1  0 09:25 ?        00:00:00 redis/src/redis-server 127.0.0.1:63792

  4. root     110787      1  0 09:26 ?        00:00:00 redis/src/redis-server 127.0.0.1:63793

  5. root     110964  83212  0 09:30 pts/0    00:00:00 grep --color=auto redis

Twemproxy應用

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

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

  1. [root@host1 src]# git clone git@github.com:twitter/twemproxy.git

  2. [root@host1 src]# cd twemproxy

  3. [root@host1 twemproxy]# autoreconf -fvi

  4. [root@host1 twemproxy]# ./configure --enable-debug=full

  5. [root@host1 twemproxy]# make

  6. [root@host1 twemproxy]# src/nutcracker -h

  7. [root@host1 twemproxy]# src/nutcracker -h

  8. This is nutcracker-0.4.1

  9.  

  10. Usage: nutcracker [-?hVdDt] [-v verbosity level] [-o output file]

  11.                  [-c conf file] [-s stats port] [-a stats addr]

  12.                  [-i stats interval] [-p pid file] [-m mbuf size]

  13.  

  14. Options:

  15.  -h, --help             : this help

  16.  -V, --version          : show version and exit

  17.  -t, --test-conf        : test configuration for syntax errors and exit

  18.  -d, --daemonize        : run as a daemon

  19.  -D, --describe-stats   : print stats description and exit

  20.  -v, --verbose=N        : set logging level (default: 5, min: 0, max: 11)

  21.  -o, --output=S         : set logging file (default: stderr)

  22.  -c, --conf-file=S      : set configuration file (default: conf/nutcracker.yml)

  23.  -s, --stats-port=N     : set stats monitoring port (default: 22222)

  24.  -a, --stats-addr=S     : set stats monitoring ip (default: 0.0.0.0)

  25.  -i, --stats-interval=N : set stats aggregation interval in msec (default: 30000 msec)

  26.  -p, --pid-file=S       : set pid file (default: off)

  27.  -m, --mbuf-size=N      : set size of mbuf chunk in bytes (default: 16384 bytes)

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

  1. redis-cluster:

  2.  listen: 0.0.0.0:22122

  3.  hash: fnv1a_64

  4.  distribution: ketama

  5.  timeout: 400

  6.  backlog: 65535

  7.  preconnect: true

  8.  redis: true

  9.  server_connections: 1

  10.  auto_eject_hosts: true

  11.  server_retry_timeout: 60000

  12.  server_failure_limit: 3

  13.  servers:

  14.    - 127.0.0.1:63791:1 redis01

  15.    - 127.0.0.1:63792:1 redis02

  16.    - 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秒,識別二維碼,關注我。

關注程序員成長

相關文章
相關標籤/搜索