前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis+Twemproxy分片存储实现

Redis+Twemproxy分片存储实现

作者头像
MavenTalker
发布2019-07-19 10:33:04
6870
发布2019-07-19 10:33:04
举报
文章被收录于专栏:歪脖贰点零歪脖贰点零

为提高Redis存储能力的提升,以及对外提供服务可用性提升,有时候有必要针对Redis进行集群式搭建,比较常用的有Twemproxy分片存储以及官方提供的Cluster方式。

Redis实例安装

Redis的安装这里不再多讲,相关步骤可从官网或其它渠道得到。为安装redis多实例,这里简单提前创建完相关文件夹。其中redis存放应用程序,redis1/redis2/redis3仅存储配置文件。

代码语言:javascript
复制
[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

代码语言:javascript
复制
daemonize yes
port 63791
pidfile /var/run/redis1.pid

redis2

代码语言:javascript
复制
daemonize yes
port 63792
pidfile /var/run/redis2.pid

redis3

代码语言:javascript
复制
daemonize yes
port 63793
pidfile /var/run/redis3.pid

分别启动,运行成功如下:

代码语言:javascript
复制
[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的应用,源码安装

代码语言:javascript
复制
[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两种方式。取模算法有明细的缺陷:在分片增加的情况下,数据的命中率直线下降。随机算法更是无法保证数据的均衡读写。

代码语言:javascript
复制
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集群应用,为前端提供强劲数据缓存服务

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MavenTalk 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis实例安装
  • Twemproxy应用
  • 简单测试
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档