在
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同步一次,也可以进行配置改变同步频率。
使用yum install ruby安装Ruby,因为redis中创建集群的脚本是以rb结尾的ruby文件(下图可见该rb文件)。使用ruby -v查看ruby是否安装成功。
- 使用 yum install rubygems安装RubyGems-Ruby组件的打包系统,用于管理Ruby程序包。
- 将redis的解压包中的bin文件件均拷贝到新创建的redis-cluster(含有redis-trib.rb文件)的redis01文件中
- 修改redis01的redis.conf文件,修改端口号和cluster-enable属性
- 依次拷贝redis01为redis02-redis06,修改端口号
- 编写一个sh脚本,一次性启动6个Redis实例
- 执行sh脚本,启动redis节点,并查看Redis实例启动情况
- 执行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个用于做备机节点,并显示了主从对应关系以及每个节点槽范围信息。
三、集群测试
- 使用任意一个节点客户端登陆 主要加上 -c参数表示用于集群连接
- 任意执行一个set命令,节点间会自动转发,将set的值保存到对应的节点slot中。
·END·
PHP开源社区进阶·提升·涨薪