Twemproxy Redis 代理配置教程

Twemproxy(又名 nutcracker)是 Twitter 开源的轻量级 Redis/Memcached 代理,支持自动分片、连接池复用和故障节点摘除。它能够将多个 Redis 实例组织成一个集群,让应用程序无需关心数据分片的细节。本文将在搬瓦工 VPS 上从零部署 Twemproxy 并配置 Redis 代理方案。

一、安装 Twemproxy

1.1 从源码编译

# 安装依赖
apt update
apt install build-essential autoconf automake libtool git -y

# 克隆源码
git clone https://github.com/twitter/twemproxy.git
cd twemproxy

# 编译安装
autoreconf -fvi
./configure --prefix=/usr/local/twemproxy
make -j$(nproc)
make install

# 验证安装
/usr/local/twemproxy/sbin/nutcracker --version

1.2 准备 Redis 后端

# 安装 Redis
apt install redis-server -y

# 启动多个 Redis 实例(模拟分片)
# 实例 1:端口 6380
cat > /etc/redis/redis-6380.conf <<'EOF'
port 6380
daemonize yes
pidfile /var/run/redis-6380.pid
logfile /var/log/redis/redis-6380.log
dbfilename dump-6380.rdb
dir /var/lib/redis
EOF

# 实例 2:端口 6381
cat > /etc/redis/redis-6381.conf <<'EOF'
port 6381
daemonize yes
pidfile /var/run/redis-6381.pid
logfile /var/log/redis/redis-6381.log
dbfilename dump-6381.rdb
dir /var/lib/redis
EOF

# 实例 3:端口 6382
cat > /etc/redis/redis-6382.conf <<'EOF'
port 6382
daemonize yes
pidfile /var/run/redis-6382.pid
logfile /var/log/redis/redis-6382.log
dbfilename dump-6382.rdb
dir /var/lib/redis
EOF

# 启动所有实例
redis-server /etc/redis/redis-6380.conf
redis-server /etc/redis/redis-6381.conf
redis-server /etc/redis/redis-6382.conf

二、配置 Twemproxy

mkdir -p /etc/twemproxy

cat > /etc/twemproxy/nutcracker.yml <<'EOF'
redis_pool:
  listen: 127.0.0.1:22121
  hash: fnv1a_64
  distribution: ketama
  auto_eject_hosts: true
  redis: true
  server_retry_timeout: 2000
  server_failure_limit: 3
  timeout: 400
  preconnect: true
  server_connections: 1
  servers:
    - 127.0.0.1:6380:1 redis-1
    - 127.0.0.1:6381:1 redis-2
    - 127.0.0.1:6382:1 redis-3
EOF

配置参数说明:

  • listen:Twemproxy 监听地址和端口。
  • hash:哈希算法,fnv1a_64 分布最均匀。
  • distribution:分片策略,ketama 是一致性哈希。
  • auto_eject_hosts:自动摘除故障节点。
  • server_retry_timeout:故障节点重试间隔(毫秒)。
  • server_failure_limit:连续失败次数后摘除节点。
  • preconnect:启动时预建连接。

三、启动 Twemproxy

# 验证配置文件
/usr/local/twemproxy/sbin/nutcracker -t -c /etc/twemproxy/nutcracker.yml

# 前台运行(调试用)
/usr/local/twemproxy/sbin/nutcracker -c /etc/twemproxy/nutcracker.yml -v 11

# 后台运行
/usr/local/twemproxy/sbin/nutcracker -d -c /etc/twemproxy/nutcracker.yml

# 创建 systemd 服务
cat > /etc/systemd/system/twemproxy.service <<'EOF'
[Unit]
Description=Twemproxy Redis Proxy
After=network.target redis.service

[Service]
Type=simple
ExecStart=/usr/local/twemproxy/sbin/nutcracker -c /etc/twemproxy/nutcracker.yml
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable twemproxy --now

四、验证与测试

# 通过 Twemproxy 连接 Redis
redis-cli -p 22121

# 写入测试数据
redis-cli -p 22121 set test1 "hello"
redis-cli -p 22121 set test2 "world"
redis-cli -p 22121 set test3 "twemproxy"

# 查看数据分布在哪个后端
redis-cli -p 6380 keys '*'
redis-cli -p 6381 keys '*'
redis-cli -p 6382 keys '*'

# 性能测试
redis-benchmark -p 22121 -c 50 -n 100000 -q

五、监控状态

# 启用统计端口
# 在 nutcracker.yml 中添加
# stats_listen: 127.0.0.1:22222
# stats_interval: 30000

# 查看统计信息
curl http://127.0.0.1:22222 | python3 -m json.tool

六、分片策略选择

  • ketama(推荐):一致性哈希,添加或移除节点时数据迁移量最小。
  • modula:取模分片,分布均匀但节点变化时数据全量迁移。
  • random:随机分配,仅适合只写不读的场景。

七、注意事项

  • Twemproxy 不支持多键操作(如 MGET 跨分片的键)和事务命令。
  • 不支持 Redis Pub/Sub、Lua 脚本等高级功能。
  • auto_eject_hosts 启用后,节点摘除会导致部分数据不可访问直到节点恢复。
  • 对于需要完整 Redis 功能的场景,建议使用 Redis Cluster 原生集群方案。

总结

Twemproxy 是一个成熟稳定的 Redis 代理方案,特别适合需要简单分片和连接池管理的场景。对于数据库代理需求,还可以参考 Pgpool-II PostgreSQL 代理ProxySQL MySQL 代理。选购搬瓦工 VPS 请查看 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,通过 bwh81.net 访问官网。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。