前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 twemproxy 构建 Redis 集群

使用 twemproxy 构建 Redis 集群

作者头像
dys
发布2018-04-04 11:32:48
7890
发布2018-04-04 11:32:48
举报
文章被收录于专栏:性能与架构

twemproxy 简介

twemproxy(又称 nutcracker)是 Twtter 贡献的一个 轻量级 高性能 的 redis/memcached 代理

client --> twemproxy --> redis/memcached ...

twemproxy 的主要目的是减少与后端缓存服务器的连接数,并通过流水线化的协议与分片功能,方便我们构建可水平扩展的分布式缓存架构

特点

  • 快、轻量
  • 维护持久连接,使缓存服务器的连接数很低
  • 命令请求与响应的流水线化,提升性能
  • 跨服务器自动分片
  • 配置简单
  • 支持一致性Hash等多种hash模式
  • 可以禁用失败节点
  • 可通过监控端口对其进行状态监测

不足

  • 得使用 twemproxy 支持的命令来操作 redis,如果需要使用最新的命令,需要等待 twemproxy 的支持

安装配置

下面就把 twemproxy 安装运行起来,用 twemproxy 代理 2个 Redis

安装

(1)Redis

下载

代码语言:javascript
复制
http://redis.io

解压安装

代码语言:javascript
复制
tar xvf redis-3.2.7.tar.gz
cd redis-3.2.7
make && make install

(2)autoconf

下载

代码语言:javascript
复制
ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz

解压安装

代码语言:javascript
复制
tar xvf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure 
make && make install

(3)twemproxy

代码语言:javascript
复制
git clone https://github.com/twitter/twemproxy.git
cd twemproxy
autoreconf -fvi
./configure
make && make install
src/nutcracker -h

配置

(1)运行2个 redis 实例

进入redis安装目录,复制出2份配置文件

代码语言:javascript
复制
cp redis.conf redis1.conf
cp redis.conf redis2.conf

redis1.conf 不用修改,使用默认的 6379 端口

修改 redis2.conf 中的端口号为 6380

代码语言:javascript
复制
port 6380
pidfile /var/run/redis_6380.pid

启动2个实例

代码语言:javascript
复制
src/redis-server redis1.conf &
src/redis-server redis2.conf &

(2)配置 twemproxy

进入 twemproxy 安装目录,新建配置文件 conf/my.yml

代码语言:javascript
复制
alpha:
  listen: 127.0.0.1:22121
  hash: fnv1a_64
  distribution: ketama
  auto_eject_hosts: true
  redis: true
  server_retry_timeout: 2000
  server_failure_limit: 1
  servers:
   - 127.0.0.1:6379:1 server1
   - 127.0.0.1:6380:1 server2

主要参数含义

  • listen twemproxy 的地址端口
  • hash hash 方法名
  • distribution 分布式模式
  • redis 代理的是否为 redis
  • servers redis 实例列表

启动

代码语言:javascript
复制
src/nutcracker -d -c conf/my.yml

查看启动状态

代码语言:javascript
复制
ps -ef | grep nutcracker | grep -v grep
netstat -nltp | grep nutcracker

测试

通过redis客户端连接 twemproxy 执行命令

代码语言:javascript
复制
redis-cli -p 22121
127.0.0.1:22121> set test 'hi'
OK
127.0.0.1:22121> get test
"hi"
127.0.0.1:22121> set hello 'world'
OK
127.0.0.1:22121> get hello
"world"

到2个 redis 实例中查看效果

redis1

代码语言:javascript
复制
redis-cli -p 6379
127.0.0.1:6379> keys *
1) "test"

redis2

代码语言:javascript
复制
redis-cli -p 6380
127.0.0.1:6380> keys *
1) "hello"

可以看到添加的2个key(test、hello)分别保存到了 redis1 和 redis2 上,实现了分片

高可用思路

在分布式环境中,高可用是必须要考虑的

上面这个结构中,高可用方面至少要考虑两个问题:

  1. twemproxy 单点
  2. redis 单点

对于 twemproxy 单点问题,可以增加多个 twemproxy,然后使用 HAProxy 进行负载均衡

对于 redis 单点问题,可以添加多个 slave,然后用 sentinel(相关文章:Redis 高可用性解决方案)进行故障转移

通过 sentinel 对 redis 进行监控,出现故障后,就自动把 slave 升级为 master

故障转以后,redis 地址发生变化,处理方法:

  1. 为 sentinel 指定一个执行脚本,故障转以后会调用此脚本,脚本负责把新master的地址修改到 twemproxy 配置中
  2. 使用VIP与 twemproxy 连接
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-02-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

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

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

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