AiShang - 爱尚博客AiShang - 爱尚博客AiShang - 爱尚博客

Redis集群(redis集群哨兵模式和分片模式区别)

复制
sentinel模式基本可以满足一般生产的需求,具备高可用性。但是当数据量过大到一台服务器存放不下的情况时,主从模式或sentinel模式就不能满足需求了,这个时候需要对存储的数据进行分片,将数据存储到多个Redis实例中。cluster模式的出现就是为了解决单机Redis容量有限的问题,将Redis的数据根据一定的规则分配到多台机器。1.
集群模式概述
复制
Redis 的哨兵和主从模式基本已经可以实现高可用和读写分离 ,但是在这种模式下每台 Redis 服务器都存储相同的数据,浪费内存空间,所以在redis上加入了 Cluster 集群模式,实现了 Redis 的分布式存储,也就是说Redis 节点上存储不同的内容。1.
集群模式特点

多个redis节点网络互联,数据共享

所有的节点都是一主一从(也可以是一主多从),其中从节点不提供服务,仅作为备用

不支持同时处理多个key(如MSET/MGET),因为redis需要把key均匀分布在各个节点上,并发量很高的情况下同时创建key-value会降低性能并导致不可预测的行为

支持在线增加、删除节点

客户端可以连接任何一个主节点进行读写

集群工作方式

数据存取工作方式

在 Redis 的每一个节点上,都有这么两个东西,一个是插槽(slot),一个是cluster。

插槽的取值范围是:0-16383。cluster,可以理解为是一个集群管理的插件。

当我们的存取 Key的时候,Redis 会根据算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。

集群工作方式

为了保证高可用,redis集群模式引入了主从模式,一个主节点对应一个或者多个从节点,当主节点宕机的时候,就会启用从节点。

那么如何发现主节点宕机?当其它主节点ping一个主节点C时,如果半数以上的主节点与C通信超时,那么认为主节点C宕机了。如果主节点C和它的从节点C1都宕机了,那么该集群就无法再提供服务了。

集群模式的搭建

搭建前的准备

集群搭建:至少要三个master

第一步:创建一个文件夹redis-cluster,然后在其下面分别创建6个文件夹如下:

复制
#创建文件夹, /usr/local/redis mkdir redis-cluster cd redis-cluster/ mkdir 7001 mkdir 7002 mkdir 7003 mkdir 7004 mkdir 7005 mkdir 7006 #/usr/local/再创建一下 mkdirredis-clustercd redis-cluster/ mkdir 7001 mkdir 7002 mkdir 7003 mkdir 7004 mkdir 7005 mkdir 7006 #把之前的6379.conf配置文件分别copy到700*下 cp 6379.conf ./redis-cluster/7001/6379.conf cp 6379.conf ./redis-cluster/7002/6379.conf cp 6379.conf ./redis-cluster/7003/6379.confcp 6379.conf ./redis-cluster/7004/6379.conf cp 6379.conf ./redis-cluster/7005/6379.confcp 6379.conf ./redis-cluster/7006/6379.conf #以192.168.149.139的7001文件夹为例 #需要修改的配置 daemonize yes #(分别对每个机器的端口号进行设置) port 7001 #(必须要绑定当前机器的ip,不然会无限悲剧下去哇..深坑勿入!!!) bind 192.168.149.139 #(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据,深坑勿入!!!) dir /usr/local/redis-cluster/7001/ appendonly yes #(启动集群模式,开始玩耍) cluster-enabled yes #(这里700x最好和port对应上) cluster-config-file nodes7001.conf #redis节点宕机被发现的时间 cluster-node-timeout50001.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.
复制
./src/redis-server ./redis-cluster/7001/6379.conf ./src/redis-server ./redis-cluster/7002/6379.conf ./src/redis-server ./redis-cluster/7003/6379.conf ./src/redis-server ./redis-cluster/7004/6379.conf ./src/redis-server ./redis-cluster/7005/6379.conf ./src/redis-server ./redis-cluster/7006/6379.conf1.2.3.4.5.6.

创建集群

执行redis-cli --cluster create命令

复制
./src/redis-cli--cluster create 192.168.149.139:7001 192.168.149.139:7002 192.168.149.139:7003 192.168.149.139:7004 192.168.149.139:7005 192.168.149.139:7006 --cluster-replicas 11.

复制
ps -ef|grep redis1.

进入一个节点&&测试操作
复制
./src/redis-cli-c -h 192.168.149.139 -p 7001 info cluster1.2.

复制
./src/redis-cli -c -h 192.168.149.139 -p 7001./src/redis-cli-c -h 192.168.149.139 -p 7005 set abc damnit!1.2.3.4.

集群操作主从切换
复制
#查看节点信息 ./src/redis-cli -c -h 192.168.149.139-p 7001 cluster nodes1.2.3.

复制
#停掉7003,在查看节点信息 ps -ef|grep redis kill -s 9 71524 ./src/redis-cli -c -h 192.168.149.139 -p 70051.2.3.4.5.

复制
#启动7003,查看节点信息./src/redis-server ./redis-cluster/7003/6379.conf ./src/redis-cli-c -h 192.168.149.139 -p 7003 cluster nodes1.2.3.4.

从节点操作
复制
#准备一个新的Redis,7007 cdredis-cluster/&& mkdir 7007 #在/usr/local/redis-cluster mkdir 7007 #/usr/local/redis目录 cp 6379.conf ./redis-cluster/7007/6379.confvimredis-cluster/7007/6379.conf ./src/redis-server ./redis-cluster/7007/6379.conf#增加节点 ./src/redis-cli --cluster add-node 192.168.149.139:7007 192.168.149.139:7004 --cluster-slave1.2.3.4.5.6.7.8.9.10.11.12.

查看:

删除从节点
复制
#删除7007节点 ./src/redis-cli --cluster del-node 192.168.149.139:7007 1c0e2fa7067445f02f4c94d012dafa643877e5371.2.

添加主节点
复制
#将7007设置为7006的主节点 #保证7007服务是启动的./src/redis-server ./redis-cluster/7007/6379.conf ./src/redis-cli--cluster add-node 192.168.149.139:7007 192.168.149.139:7006 #重新分配槽位 ./src/redis-cli --cluster reshard 192.168.149.139:70071.2.3.4.5.6.7.8.

给主节点加从节点

复制
#准备一个新的Redis,7008, 操作同7007 ./src/redis-cli --cluster add-node 192.168.149.139:7008 192.168.149.139:7007 --cluster-slave #查看 ./src/redis-cli -c -h 192.168.149.139 -p 7003 192.168.149.139:7003>cluster nodes1.2.3.4.5.6.7.
删除主节点

删除从节点

复制
./src/redis-cli --cluster del-node 192.168.149.139:7008 13de85ccb6b58736f41c8cfae8d0e6efb1af4504#移动数据将7007移动到7001节点 ./src/redis-cli --cluster reshard 192.168.149.139:70071.2.3.

复制
分别输入的是7001,7007的编号1.

复制
#删除主节点 ./src/redis-cli --cluster del-node 192.168.149.139:7007 1c0e2fa7067445f02f4c94d012dafa643877e5371.2.

完美

未经允许不得转载:AiShang - 爱尚博客 » Redis集群(redis集群哨兵模式和分片模式区别)