redis(四) 集群

搭建redis 集群

说明:
1).分片可以实现Redis内存数据的扩容.可以存储海量的内存数据. Redis分片机制没有实现高可用.如果分片中一个节点宕机,则直接影响整个服务的运行.
2).哨兵可以实现Redis节点的高可用.但是Redis中的数据不能实现内存的扩容.
哨兵服务本身没有实现高可用.如果哨兵发生了异常则直接影响用户使用.
3.)采用redis集群,可以保证数据分散存储,同时保证数据存储的一致性.并且在内部实现高可用的机制.实现了服务故障的自动迁移.

1.集群搭建计划

主从划分:
3台主机 3台从机共6台端口划分7000-7005

2. 集群搭建

  1. 准备 集群文件夹
mkdir cluster
  1. 在cluster中分别创建7000-7005 文件夹 方便后期维护
mkdir 7000 7001 7002 7003 7004 7005
  1. 复制配置文件 将redis根目录中redis.conf 复制到 7000
cp redis.conf cluster/7000/
  1. 编辑配置文件 vim redis.conf

4.1 注释本地绑定ip
在这里插入图片描述
4.2 关闭保护模式
在这里插入图片描述
4.3 修改端口号
在这里插入图片描述
4.4 启动后台启动
在这里插入图片描述
4.5 修改pid 文件
在这里插入图片描述
在这里插入图片描述
4.6 修改 持久化文件路径
在这里插入图片描述
4.7 设定内存优化策略
在这里插入图片描述
4.8 为提高效率 关闭 AOP模式
在这里插入图片描述
4.9 开启集群配置
在这里插入图片描述
4.10 开启集群配置文件
在这里插入图片描述
4.11 修改集群超时时间
在这里插入图片描述
5. 复制修改后的文件 到另外几个文件夹中 7001~7005


6. 批量修改
说明:分别将7001-7005文件中的7000改为对应的端口号的名称,
修改时注意方向键的使用
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
7. 编辑 启动脚本
7.1 创建启动脚本文件 vim start.sh
在这里插入图片描述
7.2 创建 关闭脚本文件vim shutdown.sh
在这里插入图片描述
8. 启动 redis sh start.sh
在这里插入图片描述
9.创建 redis集群
命令:
1 代表 拥有一台从机 后面 加上所有的主机ip 和端口 用空格 隔开

redis-cli --cluster create --cluster-replicas 1 192.168.126.129:7000 192.168.126.129:7001 192.168.126.129:7002 192.168.126.129:7003 192.168.126.129:7004 192.168.126.129:7005

2.输入 yes
在这里插入图片描述
10. 集群搭建成功
在这里插入图片描述
10 .检查 主从配置
在这里插入图片描述

redis 集群高可用推选原理

在这里插入图片描述
Redis的所有节点都会保存当前redis集群中的全部主从状态信息.并且每个节点都能够相互通信.当一个节点发生宕机现象.则集群中的其他节点通过PING-PONG检测机制检查Redis节点是否宕机.当有半数以上的节点认为宕机.则认为主节点宕机.同时由Redis剩余的主节点进入选举机制.投票选举链接宕机的主节点的从机.实现故障迁移.

2.redis集群(主机最少三台) 宕机条件

说明: redis集群中 只要有一台Redis 主机宕机.(没有从机替补) 则整个Redis集群崩溃(可以进行高可用)
问题分析:
1.如果有6台Redis搭建集群(3主3从),问: 最少宕机多少台Redis集群崩溃??? 宕机2台集群崩溃
2.如果搭建9台Redis.3台主机, 问 :最少宕机Redis台 集群奔溃??? 宕机5台集群崩溃

补充说明:如果想让集群尽可能不宕机,则适当增加从节点的数量. 2-3个从即可.

3.redis分区说明

Redis分区只负责 数据应该存储到哪里的问题.至于是否能存储的下 完全由Redis内存决定
说明: RedisCluster采用此分区,所有的键根据哈希函数(CRC16[key]%16384)映射到0-16383槽内,共16384个槽位,每个节点维护部分槽及槽所映射的键值数据.根据主节点的个数,均衡划分区间.
算法:哈希函数: Hash()=CRC16[key]%16384

图为 3主机的情况
在这里插入图片描述
当向redis集群中插入数据时,首先将key进行计算.之后将计算结果匹配到具体的某一个槽的区间内,之后再将数据set到管理该槽的节点中.
特点:
1.hash(key1)%16384 = 3000
2.hash(key2)%16384 = 3000 key1和key2 都归第一个节点进行管理.

Redis hash槽与一致性 hash算法的区别

1.运算位置不同.
1.redis分片机制在业务服务器中完成的运算.
2.redis分区算法在连接Redis之后,由redis进行计算.
2.算法不同 一致性hash算法/hash槽算法. hash算法 是一系列hash算法的总称
3.redis分片可以随意的进行数据的保存. redis分区不能随机存储.分区中只能保存属于我的key.

Redis面试题

1.Redis集群中的主机最多 多少台? 16384个.
Redis集群内存多少最多可以扩展到原有redis多少倍.
2.Redis中存储的数据最多16384个??? 不对的. 16384只是分区的大小.至于能存储多少数据,完全由内存决定.

什么是脑列现象

说明:在集群的机制中,由主机进行选举,当主机在进行选举时如果连续3次出现平票的结果时,则可能引发脑裂现象.
问题:出现脑裂现象的概率是多少? 答: 1/8=12.5%

如何有效降低脑裂现象: 可以通过增加主机的数量来有效降低脑裂的发生

spring整合redis集群

# 配置Redis集群
redis.nodes=192.168.126.129:7000,192.168.126.129:7001,192.168.126.129:7002,192.168.126.129:7003,192.168.126.129:7004,192.168.126.129:7005

编辑配置类

通过String Api 获取 需要的 host 跟port

package com.jt.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import redis.clients.jedis.*;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Configuration  //标识我是配置类
@PropertySource("classpath:/properties/redis.properties")
public class RedisConfig {

    /**
     * 引入redis集群配置
     */
    @Value("${redis.nodes}")
    private String nodes;   //node,node,node

    @Bean
    public JedisCluster jedisCluster(){
        String[] strNodes = nodes.split(","); //[node1,nod2,nod3.....]
        Set<HostAndPort> set = new HashSet<>();
        for(String node : strNodes){  //node=host:port
            String host = node.split(":")[0];
            int port = Integer.parseInt(node.split(":")[1]);
            set.add(new HostAndPort(host,port));
        }

        return new JedisCluster(set);
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值