前言

本文主要讲述 Redis 代理 Twemproxy 安装过程。

Twemproxy 是推特开源用于 Memcached 和 Redis 的轻量级代理。这里以0.5.0版本为例。

我们可以通过取模、随机、一致性哈希等算法将数据分散在多个 Redis 服务来实现水平扩展。但是客户端直连就需要跟每个 Redis 服务产生连接,而代理的主要作用就是为了避免这一问题。客户端连接代理进行操作,让代理通过分片算法来操作对应的 Redis 服务。

准备工作

本文服务器 Linux CentOS 64 7.5 版本。

启动多个Redis服务,本文启动了两个 Redis 服务 6386 和 6387。

安装步骤

下载源码编译

  • 通过Git下载
echo "安装Git如果没有的话" > /dev/null
yum -y install git

echo "创指定目录" > /dev/null
mkdir -p ~/soft/redis/twemproxy-0.5.0

echo "从 GitHub 克隆源码" > /dev/null
git clone https://github.com/twitter/twemproxy.git ~/soft/redis/twemproxy-0.5.0
echo "下载" > /dev/null
wget -O ~/soft/redis/twemproxy-0.5.0.tar.gz https://github.com/twitter/twemproxy/archive/refs/tags/0.5.0.tar.gz

echo "解压" > /dev/null
tar -xf ~/soft/redis/twemproxy-0.5.0.tar.gz -C ~/soft/redis/

进入解压目录

cd ~/soft/redis/twemproxy-0.5.0

配置、编译,完成后可以在 src 目录下看到可执行程序 nutcracker。

echo "安装必要的工具" > /dev/null
yum install -y automake libtool

echo "配置、编译" > /dev/null
autoreconf -fvi
./configure
make

设置为系统服务

将 Twemproxy 配置为系统服务方便使用。

echo "拷贝启动脚本到 init.d 目录" > /dev/null
cp scripts/nutcracker.init /etc/init.d/twemproxy
echo "给予执行权限" > /dev/null
chmod +x /etc/init.d/twemproxy


echo "下面这些都是 nutcracker.init 会使用到的" > /dev/null
echo "拷贝可执行程序,这样在系统任意位置都可以使用 nutcracker" > /dev/null
cp src/nutcracker /usr/bin

echo "拷贝配置文件" > /dev/null
mkdir /etc/nutcracker
cp conf/* /etc/nutcracker
echo "备份配置文件" > /dev/null
cp /etc/nutcracker/nutcracker.yml /etc/nutcracker/nutcracker.yml.bak

修改配置文件

修改代理配置,去掉多余部分。

vim /etc/nutcracker/nutcracker.yml

通过配置项servers指定被代理的Redis服务,格式为 IP:端口:权重。

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:6386:1
   - 127.0.0.1:6387:1

启动/停止/查看状态

# 启动
service twemproxy start
# 停止
service twemproxy stop
# 查看状态
service twemproxy status

测试分片效果

通过代理写入数据

# 连接代理
redis-cli -p 22121

# 写入测试数据
set 1 1

# 写入测试数据
set k1 k1

另开两个 ssh 窗口分别登陆两个 Redis 服务可以看到数据分散在了两台服务上

# redis-cli -p 6387
redis-cli -p 6386

# 查看所有key
keys *

数据分片环境下聚合操作难以实现,通过 Twemproxy 执行会报错,如:

# 查看所有key
KEYS *

# 监控k1
WATCH k1

# 开启事务
MULTI

在这里插入图片描述

参考链接

GitHub Twemproxy

GitHub Predixy