在Linux部署Redis代理Twemproxy实现数据分片

前言

本文主要讲述 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
  • • 直接下载解压,也可以去 GitHub Twemproxy Releases[1] 下载上传到目录。

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

在Linux部署Redis代理Twemproxy实现数据分片

参考链接

GitHub Twemproxy[2]

GitHub Predixy[3]

引用链接

[1] GitHub Twemproxy Releases: https://github.com/twitter/twemproxy/releases
[2] GitHub Twemproxy: https://github.com/twitter/twemproxy
[3] GitHub Predixy: https://github.com/joyieldInc/predixy


原文始发于微信公众号(我有八千部下):在Linux部署Redis代理Twemproxy实现数据分片

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/102672.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!