【Redis学习之九】Redis集群:Twemproxy和HA
环境
虚拟机:VMware 10
Linux版本:CentOS-6.5-x86_64
客户端:Xshell4
FTP:Xftp4
jdk8
redis-3.0.4
主从模式对写压力没有分担,解决思路就是,使用多个节点分担,将写请求分散到不同节点处理
一、Twemproxy
Twitter开发的代理服务器,兼容Redis和Memcached;
允许用户将多个redis服务器添加到一个服务器池(pool)里面,并通过用户选择的散列函数和分布函数,将来自客户端的命令请求分发给服务器池中的各个服务器;
对key取hash值,然后对服务器总数取模,对一个包含N台redis服务器的池来说,池中每台平分1/N的客户端命令请求;
向池里添加更多服务器可以线性的扩展系统处理命令请求的能力,以及系统能够保存的数据量;
问题:
(1)代理是单点的,存在单点故障风险;
(2)业务增长,节点增加,原有数据全量再次分发,稳定算法有问题
(3)key特殊会造成数据倾斜,redis不支持跨节点汇集数据,因此这种模式不支持交、并、差集操作
由于存在以上问题,Twemproxy并没有流行起来。
二、HA集群
(1)3.0支持;
(2)由多个Redis服务器组成的分布式网络服务集群;
(3)每一个Redis服务器称为节点Node,节点之间会互相通信 两两相连;
(4)Redis集群无中心节点;
1、Redis集群节点复制
(1)Redis集群的每个节点都有两种角色可选:主节点master node、从节点slave node。其中主节点用于存储数据,而从节点则是某个主节点的复制品
(2)当用户需要处理更多读请求的时候,添加从节点可以扩展系统的读性能,因为Redis集群重用了单机Redis复制特性的代码,所以集群的复制行为和我们之前介绍的单机复制特性的行为是完全一样的
2、Redis集群故障转移
(1)Redis集群的主节点内置了类似Redis Sentinel的节点故障检测和自动故障转移功能,当集群中的某个主节点下线时,集群中的其他在线主节点会注意到这一点,并对已下线的主节点进行故障转移
(2)集群进行故障转移的方法和Redis Sentinel进行故障转移的方法基本一样,不同的是,在集群里面,故障转移是由集群中其他在线的主节点负责进行的,所以集群不必另外使用Redis Sentinel
3、Redis集群分片
(1)集群将整个数据库分为16384个槽位slot,所有key的数据对应这些slot中的一个,key的槽位计算公式为slot_number=crc16(key)%16384,其中crc16为16位的循环冗余校验和函数
(2)集群中的每个主节点都可以处理0个至16383个槽,当16384个槽都有某个节点在负责处理时,集群进入上线状态,并开始处理客户端发送的数据命令请求
4、Redis集群Redirect转向
(1)由于Redis集群无中心节点,请求会发给任意主节点
(2)主节点只会处理自己负责槽位的命令请求,其它槽位的命令请求,该主节点会返回客户端一个转向错误
(3)客户端根据错误中包含的地址和端口重新向正确的负责的主节点发起命令请求
5、Redis集群搭建
集群方案:
3主:192.168.1.201、192.168.1.202、192.168.1.203
3从:192.168.1.204、192.168.1.205、192.168.1.206
(1)redis3.0版本依赖ruby,所有节点需要安装ruby和gem模块
[cluster@node1 ~]$ yum -y install ruby rubygems
[cluster@node1 ~]$ gem install --local redis-3.3..gem
或者源码安装参考:
ruby :http://www.cnblogs.com/xuliangxing/p/7132656.html?utm_source=itdadao&utm_medium=referral
rubygems :https://www.cnblogs.com/xuliangxing/p/7133544.html
redis.gem:https://www.cnblogs.com/hello-daocaoren/p/8431902.html
(2)所有节点安装redis-3.0.4.tar.gz
(3)所有节点修改配置redis.conf
#设置后台启动
daemonize yes
#监听端口
port=
#绑定当前机器IP
bind 192.168.1.201
#数据文件存放目录
dir /usr/local/redis/
#启动集群模式
cluster-enabled yes
#集群配置文件 -206配置nodes-.conf-nodes-.conf
cluster-config-file nodes-.conf
#集群节点超时时间配置
cluster-node-timeout
#appendonly
appendonly yes
(4)所有节点启动redis
[cluster@node1 ~]$ /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
(5)创建集群,槽位认领
在任意一台机器上 使用redis-trib.rb replicas后面第一个参数1,表示主备比例为1 自动将后面ip清单分成一半主一半备
[cluster@node1 ~]$ /usr/local/redis-3.0./src/redis-trib.rb create --replicas 192.168.1.201: 192.168.1.202: 192.168.1.203: 192.168.1.204: 192.168.1.205: 192.168.1.206:
自动分配了主从,自动分配了slots,所有槽都有节点处理,集群上线
(6)客户端连接:连接任意1台机器客户端 -c 集群 -h 主机 -p端口
[cluster@node1 ~]$ /usr/local/redis/bin/redis-cli -c -h 192.168.1.201 -p
(7)客户端查看集群信息:
[cluster@node1 ~]$ cluster info
(8)客户端查看节点列表:
[cluster@node1 ~]$ cluster nodes
(9)客户端关闭节点:(集群关闭方式:逐台关闭 没有直接关闭集群的方式)
[cluster@node1 ~]$ shutdown
参考:
https://blog.csdn.net/c295477887/article/details/52487621
【Redis学习之九】Redis集群:Twemproxy和HA的更多相关文章
- Redis学习笔记八:集群模式
作者:Grey 原文地址:Redis学习笔记八:集群模式 前面提到的Redis学习笔记七:主从复制和哨兵只能解决Redis的单点压力大和单点故障问题,接下来要讲的Redis Cluster模式,主要是 ...
- redis 学习笔记(6)-cluster集群搭建
上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞shardi ...
- Redis学习笔记~conf自主集群模式
回到目录 Redis自主提供了集群模式,当然也只是比较简单的读写分离模式,或者叫主从模式,它在各个redis服务端自己做数据同步机制,当然就是将主服务端的信息同步到各个slave服务器上,在客户端集成 ...
- Redis学习总结(九)-- Redis常用技巧
这里会记录下Redis 常用的小技巧 全局使用 redis-cli 等命令 在之前我们都在做 Redis 命令目录下通过 ./redis-cli这种形式访问,如果使用 redis-cli 的话就会报命 ...
- 深入学习Redis(5):集群
前言 在前面的文章中,已经介绍了Redis的几种高可用技术:持久化.主从复制和哨兵,但这些方案仍有不足,其中最主要的问题是存储能力受单机限制,以及无法实现写操作的负载均衡. Redis集群解决了上述问 ...
- redis学习五,redis集群搭建及添加主从节点
redis集群 java架构师项目实战,高并发集群分布式,大数据高可用,视频教程 在redis3.0之前,出现了sentinel工具来监控各个Master的状态(可以看上一篇博客).如果Master异 ...
- SpringBoot学习笔记(13)----使用Spring Session+redis实现一个简单的集群
session集群的解决方案: 1.扩展指定server 利用Servlet容器提供的插件功能,自定义HttpSession的创建和管理策略,并通过配置的方式替换掉默认的策略.缺点:耦合Tomcat/ ...
- Redis学习总结(五)--Redis集群创建
在之前我们讲到了主从,但是对于大数据量的场景下我们就需要用到集群了,让我们来了解下集群吧. 为什么需要集群 单机内存太小 redis最高可以达到10万/s 请求,如果超过该频率呢? 数据分布方式 数据 ...
- Redis 实战篇之搭建集群
Redis 集群简介# Redis Cluster 即 Redis 集群,是 Redis 官方在 3.0 版本推出的一套分布式存储方案.完全去中心化,由多个节点组成,所有节点彼此互联.Redis 客户 ...
- Spring Boot+redis存储session,满足集群部署、分布式系统的session共享
本文讲述spring-boot工程中使用spring-session机制进行安全认证,并且通过redis存储session,满足集群部署.分布式系统的session共享. 原文链接:https://w ...
随机推荐
- 解决使用Foxmail客户端软件不能收取腾讯企业邮箱的全部邮件
一般说来,使用Foxmail客户端软件收取邮箱时,需要作如下几步: 1.进入邮箱web界面授权开启POP3/SMTP服务.IMAP/SMTP等服务 2.在邮箱web界面配置收取选项,可选择收取全部邮件 ...
- 【BZOJ3328】PYXFIB 数论+矩阵乘法
[BZOJ3328]PYXFIB Description Input 第一行一个正整数,表示数据组数据 ,接下来T行每行三个正整数N,K,P Output T行,每行输出一个整数,表示结果 Sampl ...
- 解决Android 5.0中出现的警告:Service Intent must be explicit
extends:http://www.eoeandroid.com/thread-568853-1-1.html 本帖最后由 469874851 于 2015-3-11 18:15 编辑 有些时候我们 ...
- 【转】UTF16和UTF8什么区别?
这是一篇程序员写给程序员的趣味读物.所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级.整理这篇文章的动机是两个问题: 问题一: 使用Windows记事本的“另存为 ...
- Ubuntu 16.04系统下开机提示“无法应用原保存的显示器配置”
开机启动Ubuntu时,提示以下错误,部分截图如图: 解决方法: 按住Ctrl+Alt+T开启终端,输入rm .config/monitors.xml,回车,然后重启Ubuntu即可解决:如图
- gzip: stdin:unexpected end of file
原因是文件下载的不完整,重新下载就好了,
- [转][darkbaby]任天堂传——失落的泰坦王朝(上)
前言: 曾经一再的询问自我;是否真的完全了解任天堂这个游戏老铺的真实本质?或许从来就没有人能够了解,世间已经有太多的真相被埋没在谎言和臆测之中.作为 一个十多年游龄的老玩家,亲眼目睹了任天堂从如日 ...
- Druid的Segment Balance及其代价计算函数分析
Balance $Cost(X, Y) $ $$ J_\alpha(x) = \sum_{m=0}^\infty \frac{(-1)^m}{m! \Gamma (m + \alpha + 1)} { ...
- Ubuntu下更改Vim配置文件打造C/C++风格
转载:Ubuntu下更改Vim配置文件打造C/C++风格 Vim默认的配置使用起来还不能让人满意,还需要自己配置 默认配置文件是:/etc/vim/vimrc我们可以在家目录下建立自己的配置文件切换到 ...
- YARN架构设计详解
一.YARN基本服务组件 YARN是Hadoop 2.0中的资源管理系统,它的基本设计思想是将MRv1中的JobTracker拆分成了两个独立的服务:一个全局的资源管理器ResourceManager ...