文章目录

  • 1: 为什么 Redis 要分片?
  • 2: 分片集群的方法
  • 3:使用 twemproxy 搭建
    • 3.1: 克隆 twemproxy 源码
    • 3.2:安装 automoke 和 libtool
    • 3.3:编译
    • 3.4:启动 Redis 服务
    • 3.5:启动代理服务器 twemproxy
    • 3.6:观察数据
    • 3.7: 关闭 twemproxy

1: 为什么 Redis 要分片?

我们知道,一般由于单点故障会造成的问题有三种,分别是 :
1:单点故障 2:容量有限 3:连接数,CPU压力

而 主从集群可以缓解 1 和 3 ,但是对 2 却有点力不从心
因此,便想到了将 数据分别存在不同的 Redis 实例中,所有实例合起来才是完整的数据

2: 分片集群的方法

方法一:按照业务拆分,人工进行分区,比如一个微服务一个 Redis 实例

方法二:代理方式
数据拆不开(加上代理):常见的有 twemproxy 和 predixy
2.1:modula: 每一笔数据进行 hash,然后取模,模是 redis 分片数量。(基本没人用)
弊端:取模的值是固定的,影响分布式下的扩展,后面添加 redis 实例,模数值就会变化,但是数据在别的机器上

2.2:random: 随机的数据存放进 redis 实例,但是扔进去了之后,数据找不到了。
使用场景:redis 实例中投共同的 key ,value 倾向于是 list, 另外的客户端做消费,连接 redis 实例,pop出来数据即可。做消息队列
弊端:存进去数据,取拿不出来

2.3:kemata:一致性哈希算法,没有取模。要求 数据 和 设备都要参与计算,抽取成一个环形,哈希环,顺时针方向组织,0-232,0~232-1在零点中方向重合。
思想:设备信息经过哈希,在哈希环上找到一个位置(物理的);数据经过哈希,也在换上找到一个点,找到距离最近的比他大的物理机,存放进去就好
优点:加节点,的确可以分担其他节点的压力,不会造成全系统洗牌
弊端:1可能出现数据集体往一个redis中存的情况,2新增节点会造成一部分数据不能命中。
问题1——>将redis的ip依次加上十个数字,这样就有十个点,可以解决数据倾斜的问题
问题2——>缓存击穿,压在mysql —>可以尝试每次取离我最近的两个位置
得到结论:分片集群,redis 的连接成本很高,对server端造成的。增加nginx 反向代理服务器,自己不干事,只是把连接 hold 住了,只需要关注代理层的性能就好了

方法三:预分区
1:哈希法:一开始把魔术值设置的较大,比如10个,取模是10,模数值得范围是:0,1…9,中间加一层mapping, 0,1,2,3,4给第一个redis,5,6,7,8,9给第二个redis;如果有新的redis,那么让前两个redis让出一些槽位即可。迁移数据即可,比如3,4,8,9给第三台redis.

2:redis是怎么做的?(无主模型)
客户端get k1,随机连接一台redis,先hash%n,得到槽位,如果当前redis的槽位中有,取数据;否则,因为每个redis都知道其他
redis的槽位,返回客户端,应该去那个redis,进行重定向,重复上述操作。要求每个 redis 有相同的算法,并且知道别的 redis 都持有什么分片

这一篇博客我们来搭建基于 twemproxy 的代理方式的分片集群

3:使用 twemproxy 搭建

GitHub 地址:https://github.com/twitter/twemproxy
也可以直接在 GitHub 上搜 twemproxy

3.1: 克隆 twemproxy 源码

登录 linux 系统,来到存文件的目录,新建 文件夹 twemproxy ,并且通过 git 去下载源码

cd /jqk
mkdir twemproxy
cd twemproxy
git clone https://github.com/twitter/twemproxy.git

注意:git clone 如果失败 yum update nss,升级下版本,中间选y

3.2:安装 automoke 和 libtool

yum install automoke libtool


安装完成后,执行命令

autoreconf -fvi


注意:执行成功,直接到 3.3:安装automoke和libtool
如果执行失败,autoreconf版本太低,需要来到 cd /etc/yum.repo.d/ ,添加一个指向仓库

cd /etc/yum.repo.d/# 执行命令,添加指向仓库wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo# 清除缓存
yum clean all


来到 twemproxy 的文件夹,寻找 antoconf

yum search antoconf


然后再去安装,并执行命令

yum install autoconf版本号# 再次执行autoreconf版本号  -fvi

3.3:编译

命令执行完成后,多了一个 config 文件夹

执行命令

./configure --enable-debug=full


执行完成后,执行 make 命令

make


编译完成后 ,我们进入到 scripts 文件夹,会发现有 nutcracker.init 脚本,我们可以打开看一下

cd scripts/
ls


接下来,我们将这个脚本复制一份到 /etc/init.d 文件夹下,取名叫做 twemproxy,并且让它变绿

# 复制文件到   /etc/init.d 文件夹下,取名叫做  twemproxy
cp nutcracker.init /etc/init.d/twemproxy
cd /etc/init.d/
ls
# 让它变绿,授权
chmod +x twemproxy


接下来。我们在 ./etc 目录下创建 nutcracker 文件夹 ,并来到 twemproxy 源码位置,复制配置文件到此 目录下

# 创建文件夹
mkdir /etc/nutcracker# 来到 twemproxy  源码路径 src 目录下
cd /jqk/twemproxy/twemproxy/conf# 复制文件到 nutcracker 目录下
cp ./*  /etc/nutcracker/


为了能在 操作系统的任何位置都能使用 nutcracker 命令,我们将源码 src 目录下的 nutcracker 拷贝一份放在 /usr/bin 目录下

cd ../
cd src
cp nutcracker  /usr/bin


我们接下来到的 /etc/nutcracker/ 下区修改配置文件,要养成好习惯,修改前先复制一份,后续出险问题可以补救

cd  /etc/nutcracker/# 复制配置文件,做备用
cp nutcracker.yml  nutcracker.yml.bak# 打开配置文件
vi nutcracker.yml

大家看到这个配置文件了,可能就会好奇怎么配置,其实官网上有描述,大家可以参考:https://github.com/twitter/twemproxy
下面我简单的配置一下:
注意:配置的代理端口是 22121,下面要用到的

alpha:listen: 127.0.0.1:22121hash: fnv1a_64distribution: ketamaauto_eject_hosts: trueredis: trueserver_retry_timeout: 2000server_failure_limit: 1servers:- 127.0.0.1:6380:1- 127.0.0.1:6381:1- 127.0.0.1:6382:1

3.4:启动 Redis 服务

按照上次搭建主从集群的模式,启动三台 redis 实例,分别是
6380,6381,6382.
我们来到我们上次存放 redis 配置文件的地方 /usr/local/redis/myconf 下。新创建三个文件夹,分别是
6380,6381,6382.并进入相应的文件夹,手动启动redis 实例

cd /usr/local/redis/myconf
mkdir 6380
mkdir 6381
mkdir 6382
cd 6380
redis-server  --port 6380

cd /usr/local/redis/myconf/6381/
redis-server  --port 6381

cd /usr/local/redis/myconf/6382/
redis-server  --port 6382

3.5:启动代理服务器 twemproxy

在任意页面,启动 twemproxy 代理。

service twemproxy start


启动 twemproxy 的客户端,注意端口是 22121 ,并随意添加一些数据

redis-cli -p 22121


可以观察到:数据可以添加进去,也可以取出来。到此,我们的分片代理集群就搭建完毕了。

3.6:观察数据

当在代理层存数据,然后去 redis 中查看数据的时候,有时候,数据都在一个 redis 实例中,我还以为自己搭建错了,清库了再次尝试,试了好几次,出来了一个不一样的。
代理:

6380:

6381:

6382:

可见,分片代理的服务器是可以工作的。

3.7: 关闭 twemproxy

service twemproxy stop

Redis 的分片集群搭建-代理方式(twemproxy)相关推荐

  1. Docker下Redis Cluster分片集群的搭建、基本操作、集群扩容和集群故障转移(非关系型数据库技术课程 第九周)

    文章目录 Docker 下Redis Cluster 分片集群搭建 1. Cluster 分片集群 1.1 Cluster 集群的结构和作用 1.2 Cluster 分片集群 的作用 1.3哈希槽(h ...

  2. Redis 分片集群搭建

    Redis 分片集群模式 主从和哨兵可以解决高可用.高并发读的问题.但是依然有两个问题没有解决: 海量数据存储问题,单台服务的磁盘存储终究是有瓶颈: master 负责写操作,高并发写情况下,单台 m ...

  3. 超详细的 Redis Cluster 官方集群搭建指南

    转载自  超详细的 Redis Cluster 官方集群搭建指南 今天从 0 开始搭建 Redis Cluster 官方集群,解决搭建过程中遇到的问题,超详细. 安装ruby环境 因为官方提供的创建集 ...

  4. linux系统中MongoDB数据库安装及分片集群搭建

    史上最全的mongodb分片集群搭建,从介绍安装到集群搭建授权,你再也找不到比他更加详细的资料了,未经允许禁止转载!! 一.简介 MongoDB是一个便于开发和扩展设计的文档数据库,属于NoSQL数据 ...

  5. Redis 多服务器集群搭建

    Redis 多服务器集群搭建 近期,想到之前使用的Redis集群测试使用的是单服务器上的伪集群,重温<Redis深度历险-核心原理与应用实践>的案例,觉得还是搭建一下多服务器集群来玩一玩会 ...

  6. Redis HA篇 +集群搭建

    说明:本文为面向Redis集群搭建的指导手册 标签:Redis集群.Redis高可用.Redis分布式.Redis 4.0.2 注意:文中删去了不需要的多余部分,让初学者一目了然一学就会 温馨提示:如 ...

  7. redis主从搭建和分片集群搭建

    文章目录 redis主从搭建 搭建一主一从: 下载安装redis:两台机器都需要操作 权限认证 理解主从复制原理.同步数据集 全量同步三个阶段: 增量同步: 心跳检测 redis哨兵模式 部署方案 搭 ...

  8. redis之分片集群

    写在前面 当redis单实例存储的数据过多时,比如说20G,就会出现因为生成RDB快照较长时间比如500ms阻塞主线程的问题,在这一段时间里,因为主线程被阻塞,所以Redis实例无法正常的对外提供服务 ...

  9. 基于 Docker 的 Redis 高可用集群搭建(redis-sentinel)

    前言   之前介绍了用docker来搭建redis主从环境,但这只是对数据添加了从库备份(主从复制),当主库down掉的时候,从库是不会自动升级为主库的,也就是说,该redis主从集群并非是高可用的. ...

最新文章

  1. 送给那些还在迷茫的人
  2. [ucgui] 对话框7——按钮触发与模式窗口
  3. Centos 上部署jeecms注意1
  4. 清空表中数据 id从1开始
  5. Java 构造方法中super()的作用以及使用
  6. mysql update 跳过重复_MySQL通过UPDATE / DELETE整合重复的数据记录
  7. 图标选择器_【小技巧】巧用CSS属性值正则匹配选择器
  8. 易筋SpringBoot 2.1 | 第十三篇:SpringBoot综合应用多个DataSoure
  9. 收藏的关于开发的一些东西
  10. java编译命令是什么_Java编译命令整理
  11. 汇编语言 emu8086 电子时钟 课程设计
  12. thinkphp 后台管理框架swiftadmin的使用
  13. 用Everspin MR2xH40xDF SPI-MRAM替换赛普拉斯CY15B104QN SPI-FRAM
  14. 苹果显示器(Apple Cinema Display)亮度调节方法
  15. 仿《91创业网》网站源码 招商加盟致富商机网站 帝国cms模版+采集
  16. 【提供代码获取方式】matlab使用风羽法画大气环流
  17. wait_proxies_to_terminate (../../../../../src/pm/i_hydra/mpiexec/intel/i_mpiexec.c:558): downstream
  18. clickhouse 如何使用SQL 管理用户和角色
  19. Halcon入门(1)——选取ROI区域
  20. 如何写一个vscode插件

热门文章

  1. APP开发外包注意事项
  2. 性能优化-CPU占用过高问题排查
  3. 贼全面的计算机考研数据结构算法题集合(408+自命题均可)
  4. hive中的绣花模型_- 面料花型设计 GeoHive_9x_Airforce - MyDigitex
  5. 和平精英压不住枪?教你重新设置游戏画面和灵敏度把把吃鸡
  6. PyCharm 远程同步错误:No files or folders found to process
  7. linux下虚拟lcd屏幕总线错误,LCD显示屏出现闪烁的原因与解决
  8. 【数据结构】堆的实现
  9. OPPO Enco X2 评测怎么样
  10. android lifecycle,Android 架构组件之 LifeCycle详解