from unsplash前端
爲提升Redis存儲能力的提高,以及對外提供服務可用性提高,有時候有必要針對Redis進行集羣式搭建,比較經常使用的有Twemproxy分片存儲以及官方提供的Cluster方式。git
Redis實例安裝程序員
Redis的安裝這裏再也不多講,相關步驟可從官網或其它渠道獲得。爲安裝redis多實例,這裏簡單提早建立完相關文件夾。其中redis存放應用程序,redis1/redis2/redis3僅存儲配置文件。github
[root@host1 redis-cluster]# ll
redis
總用量 4
算法
drwxr-xr-x 6 root root 4096 8月 29 09:16 redis
緩存
drwxr-xr-x 2 root root 24 8月 29 09:29 redis1
架構
drwxr-xr-x 2 root root 24 8月 29 09:25 redis2
dom
drwxr-xr-x 2 root root 24 8月 29 09:26 redis3
微服務
各實例簡單配置以下:
redis1
daemonize yes
port 63791
pidfile /var/run/redis1.pid
redis2
daemonize yes
port 63792
pidfile /var/run/redis2.pid
redis3
daemonize yes
port 63793
pidfile /var/run/redis3.pid
分別啓動,運行成功以下:
[root@host1 redis-cluster]# ps -ef |grep redis
root 110719 1 0 09:24 ? 00:00:00 redis/src/redis-server 127.0.0.1:63791
root 110761 1 0 09:25 ? 00:00:00 redis/src/redis-server 127.0.0.1:63792
root 110787 1 0 09:26 ? 00:00:00 redis/src/redis-server 127.0.0.1:63793
root 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 -h
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)
安裝完成後,配置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秒,識別二維碼,關注我。
關注程序員成長