赞
踩
集群就是使用网络将若干台计算机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果
虚拟槽分区是Redis Cluster采用的分区方式
预设虚拟槽,每个槽就相当于一个数字,有一定范围。每个槽映射一个数据子集,一般比节点数大
虚拟槽分布方式中,由于每个节点管理一部分数据槽,数据保存到数据槽中。当节点扩容或者缩容时,对数据槽进行重新分配迁移即可,数据不会丢失
Redis Cluster中预设虚拟槽的范围为0到16383
需要注意的是:Redis Cluster的节点之间会共享消息,每个节点都会知道是哪个节点负责哪个范围内的数据槽
Redis Cluster是分布式架构:即Redis Cluster中有多个节点,每个节点都负责进行数据读写操作每个节点之间会进行通信。
节点之间会相互通信 meet操作是节点之间完成相互通信的基础,meet操作有一定的频率和规则
把16384个槽平均分配给节点进行管理,每个节点只能对自己负责的槽进行读写操作
由于每个节点之间都彼此通信,每个节点都知道另外节点负责管理的槽范围
客户端访问任意节点时,对数据key按照CRC16规则进行hash运算,然后对运算结果对16383进行取作,如果余数在当前访问的节点管理的槽范围内,则直接返回对应的数据如果不在当前节点负责管理的槽范围内,则会告诉客户端去哪个节点获取数据,由客户端去正确的节点获取数据
保证高可用,每个主节点都有一个从节点,当主节点故障,Cluster会按照规则实现主备的高可用性
对于节点来说,有一个配置项:cluster-enabled
,即是否以集群模式启动
槽命中:直接返回
当任意一个从属服务器下线时,所对应的主(master)会记录它的id,以便在下次上线时给对应的从属服务器恢复状态,数据
当任意一个主服务器下线时,集群会进行投票,确认服务器的下线状态,如果确定主服务器宕机下线,会从这个服务器所在的从属结构里面的从属服务器里面投票选出一个服务器来当主服务器,等原master上线时,cluster就会将它的状态改为slave
cluster-enabled yes|no
cluster-config-file <filename>
cluster-node-timeout <milliseconds>
cluster-migration-barrier <count>
有关cluster常用命令可以在redis-cli里面通过help @cluster
来获取‘
cluster nodes
cluster meet [ip:port]
cluster info
cluster forget [node-id]
修改配置文件,我们来模拟搭建集群(cluster),写六个redis-conf配置文件,内容都是一样的,端口不同,端口范围6379-6384
在每个配置文件的内容添加如下配置
## 开启集群,是当前服务器成为cluster(集群)其中的node(结点)
cluster-enabled yes
## 配置当前结点的配置文件名称,不配置就会使用默认文件名,多个节点会造成冲突
cluster-config-file "nodes-端口号.conf"
## 设置节点(node)下线的时间
cluster-node-timeout 10000
启动6个服务器
使用ps -ef | grep redis
查看
本人使用的redis是5.0.0版本,使用redis-cli启动集群
# host就是服务器的ip地址和端口,可以是多个
# --cluster-replicas指定主从结构主————从之间的比例,1就代表一个主下面必须有一个从,以此类推,6个服务器,那么前面三个就会成为master,后面三个依次会成为前面master的slave
redis-cli --cluster create host[ host] --cluster-replicas 1
redis-trib相关的命令已经移动到redis-cli程序上
启动完成就会出现如下界面
启动服务器后,会产生配置文件,集群一旦启动配置文件里面就会有其它节点的信息
配置文件里面会记录哪些节点管理哪些槽区,和各个服务器之间的主从关系
通常我们都是用redis-cli程序获取和设置数据,但是使用集群后操作就会有稍稍的不一样,我们在连接服务器的时候,需要指定-c
参数
# -c 参数就代表连接cluster里面的node
# -c 就代表我们连接的是集群(集群可以看做是一个大的虚拟redis程序)
redis-cli -c -p [port]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。