[NoSQL]
Redis+Twemproxy分片存储实现
数据库
发布于:2021-07-27 11:53
|
阅读数:304
|
评论:0
|
from unsplash
为提高Redis存储能力的提升,以及对外提供服务可用性提升,有时候有必要针对Redis进行集群式搭建,比较常用的有Twemproxy分片存储以及官方提供的Cluster方式。
Redis实例安装
Redis的安装这里不再多讲,相关步骤可从官网或其它渠道得到。为安装redis多实例,这里简单提前创建完相关文件夹。其中redis存放应用程序,redis1/redis2/redis3仅存储配置文件。
- [root@host1 redis-cluster]# ll
- 总用量 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
- 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集群应用,为前端提供强劲数据缓存服务
|
免责声明:
1. 本站所有资源来自网络搜集或用户上传,仅作为参考不担保其准确性!
2. 本站内容仅供学习和交流使用,版权归原作者所有!© 查看更多
3. 如有内容侵害到您,请联系我们尽快删除,邮箱:kf@codeae.com
|
|
|
|
|