Redis 的分片集群搭建-代理方式(twemproxy)
文章目录
- 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)相关推荐
- Docker下Redis Cluster分片集群的搭建、基本操作、集群扩容和集群故障转移(非关系型数据库技术课程 第九周)
文章目录 Docker 下Redis Cluster 分片集群搭建 1. Cluster 分片集群 1.1 Cluster 集群的结构和作用 1.2 Cluster 分片集群 的作用 1.3哈希槽(h ...
- Redis 分片集群搭建
Redis 分片集群模式 主从和哨兵可以解决高可用.高并发读的问题.但是依然有两个问题没有解决: 海量数据存储问题,单台服务的磁盘存储终究是有瓶颈: master 负责写操作,高并发写情况下,单台 m ...
- 超详细的 Redis Cluster 官方集群搭建指南
转载自 超详细的 Redis Cluster 官方集群搭建指南 今天从 0 开始搭建 Redis Cluster 官方集群,解决搭建过程中遇到的问题,超详细. 安装ruby环境 因为官方提供的创建集 ...
- linux系统中MongoDB数据库安装及分片集群搭建
史上最全的mongodb分片集群搭建,从介绍安装到集群搭建授权,你再也找不到比他更加详细的资料了,未经允许禁止转载!! 一.简介 MongoDB是一个便于开发和扩展设计的文档数据库,属于NoSQL数据 ...
- Redis 多服务器集群搭建
Redis 多服务器集群搭建 近期,想到之前使用的Redis集群测试使用的是单服务器上的伪集群,重温<Redis深度历险-核心原理与应用实践>的案例,觉得还是搭建一下多服务器集群来玩一玩会 ...
- Redis HA篇 +集群搭建
说明:本文为面向Redis集群搭建的指导手册 标签:Redis集群.Redis高可用.Redis分布式.Redis 4.0.2 注意:文中删去了不需要的多余部分,让初学者一目了然一学就会 温馨提示:如 ...
- redis主从搭建和分片集群搭建
文章目录 redis主从搭建 搭建一主一从: 下载安装redis:两台机器都需要操作 权限认证 理解主从复制原理.同步数据集 全量同步三个阶段: 增量同步: 心跳检测 redis哨兵模式 部署方案 搭 ...
- redis之分片集群
写在前面 当redis单实例存储的数据过多时,比如说20G,就会出现因为生成RDB快照较长时间比如500ms阻塞主线程的问题,在这一段时间里,因为主线程被阻塞,所以Redis实例无法正常的对外提供服务 ...
- 基于 Docker 的 Redis 高可用集群搭建(redis-sentinel)
前言 之前介绍了用docker来搭建redis主从环境,但这只是对数据添加了从库备份(主从复制),当主库down掉的时候,从库是不会自动升级为主库的,也就是说,该redis主从集群并非是高可用的. ...
最新文章
- 送给那些还在迷茫的人
- [ucgui] 对话框7——按钮触发与模式窗口
- Centos 上部署jeecms注意1
- 清空表中数据 id从1开始
- Java 构造方法中super()的作用以及使用
- mysql update 跳过重复_MySQL通过UPDATE / DELETE整合重复的数据记录
- 图标选择器_【小技巧】巧用CSS属性值正则匹配选择器
- 易筋SpringBoot 2.1 | 第十三篇:SpringBoot综合应用多个DataSoure
- 收藏的关于开发的一些东西
- java编译命令是什么_Java编译命令整理
- 汇编语言 emu8086 电子时钟 课程设计
- thinkphp 后台管理框架swiftadmin的使用
- 用Everspin MR2xH40xDF SPI-MRAM替换赛普拉斯CY15B104QN SPI-FRAM
- 苹果显示器(Apple Cinema Display)亮度调节方法
- 仿《91创业网》网站源码 招商加盟致富商机网站 帝国cms模版+采集
- 【提供代码获取方式】matlab使用风羽法画大气环流
- wait_proxies_to_terminate (../../../../../src/pm/i_hydra/mpiexec/intel/i_mpiexec.c:558): downstream
- clickhouse 如何使用SQL 管理用户和角色
- Halcon入门(1)——选取ROI区域
- 如何写一个vscode插件
热门文章
- APP开发外包注意事项
- 性能优化-CPU占用过高问题排查
- 贼全面的计算机考研数据结构算法题集合(408+自命题均可)
- hive中的绣花模型_- 面料花型设计 GeoHive_9x_Airforce - MyDigitex
- 和平精英压不住枪?教你重新设置游戏画面和灵敏度把把吃鸡
- PyCharm 远程同步错误:No files or folders found to process
- linux下虚拟lcd屏幕总线错误,LCD显示屏出现闪烁的原因与解决
- 【数据结构】堆的实现
- OPPO Enco X2 评测怎么样
- android lifecycle,Android 架构组件之 LifeCycle详解