搜索
搜 索
本版
文章
帖子
用户
图文精华
hadoop-2.6.0+zookeeper-3.4.6+hbase-1.0.0+hive-1.1.0完全分布 ...
首页
Portal
专题
BBS
面试
办公|编程助手
更多
登录
注册
用户组:游客
主题
帖子
云币
我的帖子
我的收藏
我的好友
我的勋章
设置
退出
导读
淘贴
博客
群组
社区VIP
APP下载
今日排行
本周排行
本周热帖
本月排行
本月热帖
会员排行
About云-梭伦科技
»
专题
›
交流区
›
技术交流
›
亲密接触Redis-第三天(Redis的Load Balance)-1
0
0
1
分享
亲密接触Redis-第三天(Redis的Load Balance)-1
eying
发表于 2016-3-16 13:25:22
[显示全部楼层]
只看大图
阅读模式
关闭右栏
0
11467
问题导读
1.Redis3.x中如何引入的Load Balance?
2.Redis Cluster如何实现?
3.怎样使用Rubb Gem的Redis模块+redis-trib.rb创建集群?
前言
上两天讲述了Redis的基本搭建和基于HA的集群布署方式以及相关的策略和注意点。今天开始讲述Redis的Cluster功能,而这块目前来说网上资料不是太全,就算有1,2篇也只是单讲服务端的搭建也并未提及相关的客户端怎么和Redis Cluster间的调用问题。
我们今天要讲述的Redis Cluster是真正的Load Balance,它和Sentinel不一样,Sentinel虽然也叫集群,可是它是一种HA策略即High Available或者又通俗的被称为“灾难转移”策略。
Redis3.x中引入的Load Balance
从Redis3.x开始已经支持Load Balance功能了。
Redis Cluster 是Redis的集群实现,内置数据自动分片机制,集群内部将所有的key映射到16384个Slot中,集群中的每个Redis Instance负责其中的一部分的Slot的读写。集群客户端连接集群中任一Redis Instance即可发送命令,当Redis Instance收到自己不负责的Slot的请求时,会将负责请求Key所在Slot的Redis Instance地址返回给客户端,客户端收到后自动将原请求重新发往这个地址,对外部透明。一个Key到底属于哪个Slot由crc16(key) % 16384 决定。在Redis Cluster里对于负载均衡和HA相关都已经支持的相当完善了。
负载均衡(Load Balance):集群的Redis Instance之间可以迁移数据,以Slot为单位,但不是自动的,需要外部命令触发。
集群成员管理:集群的节点(Redis Instance)和节点之间两两定期交换集群内节点信息并且更新,从发送节点的角度看,这些信息包括:集群内有哪些节点,IP和PORT是什么,节点名字是什么,节点的状态(比如OK,PFAIL,FAIL,后面详述)是什么,包括节点角色(master 或者 slave)等。
关于可用性,集群由N组主从Redis Instance组成。
主可以没有从,但是没有从 意味着主宕机后主负责的Slot读写服务不可用。
一个主可以有多个从,主宕机时,某个从会被提升为主,具体哪个从被提升为主,协议类似于Raft,参见这里。如何检测主宕机?Redis Cluster采用quorum+心跳的机制。从节点的角度看,节点会定期给其他所有的节点发送Ping,cluster-node-timeout(可配置,秒级)时间内没有收到对方的回复,则单方面认为对端节点宕机,将该节点标为PFAIL状态。通过节点之间交换信息收集到quorum个节点都认为这个节点为PFAIL,则将该节点标记为FAIL,并且将其发送给其他所有节点,其他所有节点收到后立即认为该节点宕机。从这里可以看出,主宕机后,至少cluster-node-timeout时间内该主所负责的Slot的读写服务不可用。
Redis Cluster的特点如下:
节点自动发现
slave->master选举,集群容错
Hot resharding:在线分片
集群管理:clusterxxx
基于配置(nodes-port.conf)的集群管理
ASK 转向/MOVED转向机制
布署无需指定master
可以支持超过1,000台节点的集群
Redis Cluster的实现
Redis Cluster依赖于其官方位于Redis编译包内(我们此处使用的是redis-stable版本)/src目录下的redis-trib.rb 文件,这是一个ruby脚本,为此你必须把你的服务器环境作一个先期准备。
搭建Cluster前的环境准备
安装CentOS或者是RHE
在安装Linux时需要一定记得安装GCC库、LibC、LibStdC++、Rubby库(1.9.2或以上)、ZLIB库(1.2.6或以上),如果你装机时没有安装这些“optional package”可以通过yum install gcc这样的命令在Linux联网的情况下来进行Linux安装后的额外包的安装
安装ruby gems库(1.8.16或以上)- rubygems-1.8.16.tgz(运行内在的setup.rb),下载 rubygems-1.8.16.tgz 后在解压包的/path/gem 运行
[mw_shl_code=applescript,true]sudo ruby setup.rb[/mw_shl_code]
在ruby gems安装后,你必须安装gem的redis模块,可以通过官网或者相关可信任连接下载redis-3.2.1.gem(先下载.gem文件再用gem安装)如:
[mw_shl_code=applescript,true]gem install -l redis-3.2.1.gem [/mw_shl_code]
Redis集群节点的规划
使用make PREFIX=/usr/local/redis1 install这样的命令连续搭建至少6个nodes,Redis Cluster的最低要求是(3个Master,3个Slave),这在我们的“亲密接触Redis-第一天”中有详细描述怎么编译安装一个redis了,此处全部是采用redis-stable这个版本。
集群节点的配置
每个节点在第一次配置时,除去:
.pid文件和路径
/logfile文件和路径
Data存放路径
Port
其余配置,完全一样,并且无master和slave之分。
PORT端口配置要点:
所有Master(如3个Master的端口号以+1方式递增:7001,7002,7003)
所有的Slaver的端口号必须且一定要符合这样的原则:slave的端口比相关的master大1000号,如7001的slave的端口号为8001。
举例来说:
3个Master为7001,7002,7003,我们的3个Slave就为8001,8002,8003
redis.conf文件内:
maxmemory-policy allkeys-lru
cluster-enabled yes(启用,把前面的#注释掉)
cluster-config-file nodes-7001.conf(启用,把前面的#注释掉,此处建议使用本节点的PORT号为文件名,这样便于区分
cluster-node-timeout 15000(启用,把前面的#注释掉)
cluster-migration-barrier 1(启用,把前面的#注释掉)
使用Rubb Gem的Redis模块+redis-trib.rb创建集群
一切准备就绪后,把6个redis节点全部启动起来。
redis-trib.rb位于下载下来的redis-stable目录的/src目录内。
使用如下命令创建Redis集群:
[mw_shl_code=applescript,true]./redis-trib.rb create --replicas 1 192.168.0.1:7001 192.168.0.1:7002 192.168.0.1:7003 192.168.0.1:8001 192.168.0.1:8002 192.168.0.1:8003 [/mw_shl_code]
注:命令行中一定要把所有的master列出后,再列出所有的slave(依照master的顺序列slave),6个节点全部列在命令行中。
命令执行后过了一段时间系统会提示你如下信息
集群创建成功后会显示如下信息:
这就说明Redis集群已经创建了,以后只要使用redis-server redis.conf这样的命令把每个节点启动起来就可以了。
相关文章
亲密接触Redis-第一天
http://www.aboutyun.com/forum.php?mod=viewthread&tid=17674
亲密接触Redis-第二天(Redis Sentinel)
http://www.aboutyun.com/forum.php?mod=viewthread&tid=17673
亲密接触Redis-第三天(Redis的Load Balance)-1
http://www.aboutyun.com/forum.php?mod=viewthread&tid=17689
亲密接触Redis-第三天(Redis的Load Balance)-2
http://www.aboutyun.com/forum.php?mod=viewthread&tid=17690
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
显身卡
没找到任何评论,期待你打破沉寂
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
发表新帖
eying
中级会员
关注
118
主题
126
帖子
20
粉丝
TA的主题
机器学习教程 七-用随机梯度下降法(SGD)做线性拟合
2016-7-4
OpenStack云端的资源调度和优化剖析
2016-7-4
机器学习教程 二-安装octave绘制3D函数图像
2016-6-27
深度学习在自然语言处理上的应用(2)_斯坦福cs224d Lecture 2
2016-6-27
Kafka设计解析(四)- Kafka Consumer设计解析
2016-6-20
24小时热文
Docker基础与实战
docker容器实战:原理、架构与应用
Docker+容器与容器云(第2版)
kafka面试题精选
Nebula Flink Connector 在实时 ETL 的实践
关闭
推荐
/2
中文版ChatGPT
1.无需魔法 2.提高编程效率 3.提高文档能力
查看 »
新手帮助
新手帮助:注册遇到问题,领取资源,加入铁粉群,不会使用搜索,如何获取积分等
查看 »
意见
反馈