1. 程式人生 > >Redis+Twemproxy分片儲存實現

Redis+Twemproxy分片儲存實現

from unsplash

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

Redis例項安裝

Redis的安裝這裡不再多講,相關步驟可從官網或其它渠道得到。為安裝redis多例項,這裡簡單提前建立完相關資料夾。其中redis存放應用程式,redis1/redis2/redis3僅儲存配置檔案。

  1. [[email protected] redis-cluster]# ll

  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 redis2

  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. [[email protected] 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. [[email protected] src]# git clone [email protected]:twitter/twemproxy.git

  2. [[email protected] src]# cd twemproxy

  3. [[email protected] twemproxy]# autoreconf -fvi

  4. [[email protected] twemproxy]# ./configure --enable-debug=full

  5. [[email protected] twemproxy]# make

  6. [[email protected] twemproxy]# src/nutcracker -h

  7. [[email protected] twemproxy]# src/nutcracker -h

  8. This is nutcracker-0.4.1

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

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

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

  12. Options:

  13.  -h, --help             : this help

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

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

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

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

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

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

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

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

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

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

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

  25.  -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

儲存後,進行簡單的測試,保證配置檔案的正確性,若出現如下響應,證明配置檔案執行正常。

[[email protected] 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秒,識別二維碼,關注我。

關注程式設計師成長