使用 twemproxy 构建 Redis 集群

twemproxy 简介

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

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

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

特点

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

不足

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

安装配置

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

安装

(1)Redis

下载

http://redis.io

解压安装

tar xvf redis-3.2.7.tar.gz
cd redis-3.2.7
make && make install

(2)autoconf

下载

ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz

解压安装

tar xvf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure 
make && make install

(3)twemproxy

git clone https://github.com/twitter/twemproxy.git
cd twemproxy
autoreconf -fvi
./configure
make && make install
src/nutcracker -h

配置

(1)运行2个 redis 实例

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

cp redis.conf redis1.conf
cp redis.conf redis2.conf

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

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

port 6380
pidfile /var/run/redis_6380.pid

启动2个实例

src/redis-server redis1.conf &
src/redis-server redis2.conf &

(2)配置 twemproxy

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

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 实例列表

启动

src/nutcracker -d -c conf/my.yml

查看启动状态

ps -ef | grep nutcracker | grep -v grep
netstat -nltp | grep nutcracker

测试

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

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

redis-cli -p 6379
127.0.0.1:6379> keys *
1) "test"

redis2

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 连接

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2017-02-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT可乐

Linux系列教程(二十四)——Linux的系统管理

  上篇博客介绍了Linux的服务管理,不管是以RPM包安装的服务,还是通过源码包安装的服务,万能启动服务的方法都可以通过 /绝对路径/启动脚本名 start ...

2046
来自专栏余生开发

vue - .babelrc

        // env项是借助插件babel-preset-env,下面这个配置说的是babel对es6,es7,es8进行转码,并且设置amd,comm...

1202
来自专栏运维前线

Gitlab安装使用及汉化配置

一、GitLab简介 GitHub是2008年由Ruby on Rails编写而成,与业界闻名的Github类似;但要将代码上传到GitHub上面,而且将项目设...

1.8K6
来自专栏Jackson0714

升级node版本

$ sudo n stable (安装node最新版本) 或安装指定版本 $ sudo n (可以安装node指定版本 sudo n 10.10.0)

1.3K2
来自专栏云计算教程系列

如何在Debian 9上安装NFS共享

网络文件系统(NFS)是一种文件系统协议,允许类Unix系统的用户通过网络访问文件,就像使用本地存储一样。这对于跨Internet上的多个腾讯云CVM服务器或其...

1801
来自专栏Android知识点总结

SpringBoot-03-之热部署

1284
来自专栏深度学习之tensorflow实战篇

mongodb11天之屠龙宝刀(二)安装与配置 :MongoDB 与使用 IDE

mongodb11天之屠龙宝刀(二)安装与配置 :MongoDB 与使用 IDE System environments 原文连接:直通车 - windo...

3684
来自专栏实战docker

kubeadm搭建kubernetes集群之二:创建master节点

在上一章《kubeadm搭建kubernetes集群之一:构建标准化镜像》中我们用VMware安装了一个CentOS7虚拟机,并且打算用这个虚拟机的镜像文件作为...

3438
来自专栏python百例

120-打造vim为python IDE

pycharm之类的IDE很好,但是不能在无图形的终端下使用,另外它们是“重量级选手”。如果偶尔需要vim编辑python程序,能让vim支持python的语法...

1574
来自专栏安恒信息

【高危】漏洞预警 | Linux Systemd存在高危远程溢出漏洞(CVE-2017-9445)

systemd是Linux下的init软件,主要用于减少系统引导时间和计算开销。 systemd 的systemd-resolved服务用于处理DNS请求并为本...

3167

扫码关注云+社区

领取腾讯云代金券