如果您对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 没有的功能,如下:
Twemproxy 与 Predixy 相比优点是更轻量级,效率更高。但是社区活跃底较低,文档相对较少。
开源地址:https://github.com/twitter/twemproxy
Twemproxy 将请求路由到哪个后端服务器支持的分布模式有以下3种:
ketama(一致性哈希): 这是默认和推荐的分布模式。它是一种基于一致性哈希算法的分布方式,确保当增加或删除后端服务器时,大部分请求仍能映射到正确的后端服务器。这有助于保持负载均衡并最小化数据的迁移。
modula(模哈希): 这是另一种分布模式,它使用哈希运算中的模(取余)运算来选择后端服务器。它通常需要事先知道服务器的数量,并根据此数量来计算哈希值。这种模式可能会导致负载分布不均匀,特别是在添加或删除服务器时。
random(随机选择): 这个分布模式是基于随机选择后端服务器的方式。对于每个请求的每个键,它将随机选择一个后端服务器。这可能导致负载分布不均匀,不适合需要一定程度的负载均衡的情况。
一致性哈希(ketama)是最常用的分布模式,因为它在添加或删除服务器时能够提供相对稳定的分布,从而维持系统的可用性和负载均衡。其他模式可能适用于特定的使用案例,但需要更仔细的配置和监控,以确保负载均衡和性能。选择哪种分布模式通常会根据特定的应用程序需求和环境来决定。
新建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
include redis.conf
port 6382
dir /var/lib/redis/6382
pidfile /var/run/redis_6382.pid
supervised no
daemonize no
logfile ""
appendonly no
mkdir -p /var/lib/redis/6381
mkdir -p /var/lib/redis/6382
redis-server redis_6381.conf
redis-server redis_6382.conf
安装Epel软件仓库
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
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
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
nutcracker -d -c /etc/nutcracker/nutcracker.yml
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>