文章目录
- 一、概述
- 二、Twemproxy 分布模式
- 三、测试规划
- 四、Redis 服务实例准备
- 4.1 配置Redis实例
- 4.2 创建关资源
- 4.3 启动Redis服务实例
- 五、Twemproxy 安装准备
- 六、Twemproxy 安装及集群配置
- 6.1 安装 Twemproxy
- 6.2 配置 Twemproxy
- 6.3 启动 twemproxy
- 6.4 测试 twemproxy 集群
如果您对Redis的了解不够深入请关注本栏目,本栏目包括Redis安装,Redis配置文件说明,Redis命令和数据类型说明,Redis持久化配置,Redis主从复制和哨兵机制,Redis Cluster(集群)配置,Redis Predixy 集群。
一、概述
-
Twemproxy(也称为nutcracker)是一个开源的代理软件,用于提供 Redis 或 Memcached 数据存储的负载均衡和高可用性。它是一种代理层,允许客户端将请求发送到多个 Redis 或 Memcached 后端服务器,并在多个节点之间进行负载均衡。它也是 Twitter 公司开发的,并且已经成为 Redis 和 Memcached 社区中常见的工具之一。
-
我在前面讲过Redis Cluster 集群配置,那么即然官方自带了 Redis Cluster 为什么还要使用 Twemproxy 呢?因为 Twemproxy 还有 Redis Cluster 没有的功能,如下:
- 多种部署:Redis Cluster 只支持一种特定的哈希分片架构,而 Twemproxy 可以适用于多种部署拓扑。而且增加Redis群集后应用程序代码无需修改,就连配置都不修改。
- 动态的负载均衡:根据实时的节点状态和负载情况,Twemproxy 智能地将请求路由到最佳的 Redis 节点,以实现负载均衡。
- 读写分离:Twemproxy 支持读写分离的配置。它可以将读操作路由到从节点,以分担主节点的负载,并提高读取性能。同时,写操作仍然会路由到主节点,以确保数据的一致性。
-
Twemproxy 与 Predixy 相比优点是更轻量级,效率更高。但是社区活跃底较低,文档相对较少。
-
开源地址:https://github.com/twitter/twemproxy
二、Twemproxy 分布模式
-
Twemproxy 将请求路由到哪个后端服务器支持的分布模式有以下3种:
-
ketama(一致性哈希): 这是默认和推荐的分布模式。它是一种基于一致性哈希算法的分布方式,确保当增加或删除后端服务器时,大部分请求仍能映射到正确的后端服务器。这有助于保持负载均衡并最小化数据的迁移。
-
modula(模哈希): 这是另一种分布模式,它使用哈希运算中的模(取余)运算来选择后端服务器。它通常需要事先知道服务器的数量,并根据此数量来计算哈希值。这种模式可能会导致负载分布不均匀,特别是在添加或删除服务器时。
-
random(随机选择): 这个分布模式是基于随机选择后端服务器的方式。对于每个请求的每个键,它将随机选择一个后端服务器。这可能导致负载分布不均匀,不适合需要一定程度的负载均衡的情况。
-
-
一致性哈希(ketama)是最常用的分布模式,因为它在添加或删除服务器时能够提供相对稳定的分布,从而维持系统的可用性和负载均衡。其他模式可能适用于特定的使用案例,但需要更仔细的配置和监控,以确保负载均衡和性能。选择哪种分布模式通常会根据特定的应用程序需求和环境来决定。
三、测试规划
- 我这里在同一主机上开启2个Redis服务实例,然后使用 Twemproxy 集群来测试,示意图如下:
四、Redis 服务实例准备
4.1 配置Redis实例
-
新建2个Redis配置文件,用于配置2个Redis服务实例节点。分别为:redis_6381.conf、redis_6382.conf。
-
redis_6381.conf
include redis.conf
port 6381
dir /var/lib/redis/6381
pidfile /var/run/redis_6381.pid
supervised no
daemonize no
logfile ""
appendonly no
- redis_6382.conf
include redis.conf
port 6382
dir /var/lib/redis/6382
pidfile /var/run/redis_6382.pid
supervised no
daemonize no
logfile ""
appendonly no
4.2 创建关资源
mkdir -p /var/lib/redis/6381
mkdir -p /var/lib/redis/6382
4.3 启动Redis服务实例
- 启动2个Redis服务实例
redis-server redis_6381.conf
redis-server redis_6382.conf
五、Twemproxy 安装准备
-
安装Epel软件仓库
- 官方地址:https://developer.aliyun.com/mirror/
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo yum clean all
-
准备编译工具
yum install automake libtool -y
-
升级autoreconf
yum search autoconf yum install autoconf268
六、Twemproxy 安装及集群配置
6.1 安装 Twemproxy
- 在CentOS7及以上系统按顺序执行以下命令安装。安装过程如果使用 git 无法下载,你可以先手动下载后拷贝到目标机器上。安装完成后生成的目标程序叫“nutcracker”,后面配置都是使用“nutcracker”,而不是“twemproxy”。
git clone https://github.com/twitter/twemproxy.git
cd twemproxy/
autoreconf -fvi
# 如果使用autoreconf -fvi 报错,则使用下面这个命令
#autoreconf268 -fvi
./configure --enable-debug=full
make
mkdir /etc/nutcracker
cp conf/* /etc/nutcracker/
cp /etc/nutcracker/nutcracker.yml /etc/nutcracker/nutcracker.yml.bk
cp src/nutcracker /usr/bin/
# cp scripts/nutcracker.init /etc/init.d/nutcracker
# chmod a+x /etc/init.d/nutcracker
6.2 配置 Twemproxy
- 修改配置文件 nutcracker.yml
vi /etc/nutcracker/nutcracker.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:6381:1
- 127.0.0.1:6382:1
6.3 启动 twemproxy
nutcracker -d -c /etc/nutcracker/nutcracker.yml
6.4 测试 twemproxy 集群
redis-cli -p 22121
[root@yiqifu-centos conf]# redis-cli -p 22121
127.0.0.1:22121> set aaa 111
OK
127.0.0.1:22121> set bbb 222
OK
127.0.0.1:22121>