转:https://blog.csdn.net/daybreak1209/article/details/51493265
在Redis的安装和部署(Linux)一文中详细介绍了在Linux环境中搭建Redis服务,本文将介绍关于Redis分布式 集群搭建细节。
一、Redis集群架构
1、Redis集群架构图
蓝色的为Redis集群中的每个node节点,节点之间通过ping 命令,测试相互是否连接正常,普通集群没有主从区分,连接任何一个节点操作,都可以转发到其他任意一个节点。
1、Redis 容错机制
每Redis提供了节点之间相互发送的ping命令,用于测试每个节点的健康状态,集群中连接正常的节点接收到其他节点发送的ping命令时,会返回一个pong字符串。
Redis投票机制:如果一个节点A给B发送ping没有得到pong返回,那么A就会通知其他节点再次给B发送ping,如果集群中超过一半的节点给B发送ping都没有得到返回,那么B就被坐实game over了,所以为了避免单点故障,一般都会为Redis的每个节点提供一个备份节点,B节点挂掉了立马启动B的备份节点服务器。
2、Redis 集群存储原理
每个节点上的数据都不一样,(一样就是主备了)把数据都分散存放到各个节点上进行存储。如何确定哪些类型数据存入哪个节点呢?Redis中槽slot就用于圈定当前节点的存储范围,分散存储使用hash算法,确定什么值放到哪个槽里。
所以在创建Redis集群时,会首先为每个节点创建槽容量,例如从1~2000,指定数据存储区域。
3、Redis 持久化机制
Redis提供了2中数据持久化方式:
Snapshotting:定时的将Redis内存的当前状态保存到RDB文件中,持久化到硬盘。
AOF(append-only file):将所有的command操作保存到aof文件中,AOP使得同步频率很高,数据即便丢失,粒度也很小,但性能上有所牺牲。默认数据持久化会2s同步一次,也可以进行配置改变同步频率。
翻译自redis-wiki
二、Redis集群搭建
现在开始搭建具有3各节点和3个备份节点的Redis cluster。端口分别从7001-7006,因为测试机内存的原因,搭建一个使用6个Redis实例搭建一个伪分布式集群。
1、搭建集群所需环境
1)使用yum install ruby安装Ruby,因为redis中创建集群的脚本是以rb结尾的ruby文件(下图可见该rb文件)。使用ruby -v查看ruby是否安装成功。
2)使用 yum install rubygems安装RubyGems-Ruby组件的打包系统,用于管理Ruby程序包。
2、创建6个Redis实例
1)将redis的解压包中的bin文件件均拷贝到新创建的redis-cluster(含有redis-trib.rb文件)的redis01文件中
2)修改redis01的redis.conf文件,修改端口号和cluster-enable属性
3)依次拷贝redis01为redis02-redis06,修改端口号
4)编写一个sh脚本,一次性启动6个Redis实例
5)执行sh脚本,启动redis节点,并查看Redis实例启动情况
6)执行redis-trib.rb脚本,创建集群。
- ./redis-trib.rb create --replicas 1 192.168.132.128:7001 192.168.132.128:7002 192.168.132.128:7003 192.168.132.128:7004 192.168.132.128:7005 192.168.132.128:7006
在集群的创建日志信息中可以发现,使用hash 创建slots,master节点为01.02.03 ,剩余3个用于做备机节点,并显示了主从对应关系以及每个节点槽范围信息。
三、集群测试
1)使用任意一个节点客户端登陆 主要加上 -c参数表示用于集群连接
2)任意执行一个set命令,节点间会自动转发,将set的值保存到对应的节点slot中。
集群搭建成功。
四、总结
建成功。在创建集群时,笔者出现一个redis节点拒绝连接的错误,以至于集群创建失败。
经过反复排查发现是自己原来安装的redis进行了权限设置,为方便了方便测试,于是选择取消该权限设置。