Redis集群

Redis集群背景介绍

不想看的直接跳转到 二

1.1 背景

前面我们学习了Redis高可用的两种架构模式:主从模式、哨兵模式。

  • 主从复制:单点故障、读写分离(主负责写,从负责读)、负载均衡(客户端请求,并发)

    • 问题:不能自动故障转移(哨兵)、主从数据是完全一致(集群)

  • 哨兵机制:故障转移(解决主从复制的问题,主机出现故障,从切换为主)

RedisCluster是redis的分布式解决方案,当主备复制场景,无法满足主机的单点故障时,需要引入集群配置,当一个服务挂了可以快速的切换到另外一个服务,当遇到单机内存、并发等瓶颈时,可使用此方案来解决这些问题。

1.2 什么是集群

由于数据量过大,单个Master复制集难以承担,因此需要对多个复制集进行集群,形成水平扩展每个复制集只负责存储整个数据集的一部分,这就是Redis的集群,其作用是提供在多个Redis节点间共享数据的程序集。

Redis集群是一种通过将多个Redis节点连接在一起以实现高可用性、数据分片和负载均衡的技术。它允许Redis在不同节点上同时提供服务,提高整体性能和可靠性。

Redis集群主要有三种模式:主从复制模式(Master-Slave)、哨兵模式(Sentinel)、Cluster模式。

  • 广义的集群:只要是多台机器,构成一个分布式系统,就可以称为一个“集群”。主从结构,哨兵模式都是“广义的集群”

  • 狭义的集群:redis提供的集群模式,这个集群模式主要解决存储空间不足的问题

1.3 Redis Cluster功能

  1. 数据自动分片

    集群中每个节点都会负责一定数量的slot,每个key会映射到一个具体的slot,通过这种方式就可能找到key具体保存在哪个节点上了。

  2. 提供hash tags功能

    通过hash tag功能可以将多个不同key映射到同一个slot上,这样就能够提供multi-key操作,hash tag的使用的方式是在key中包含“{}”,这样只有在“{...}”中字串被用于hash计算。

  3. 自动失效转移和手动失效转移

  4. 减少硬件成本和运维成本

1.4 Cluster 实现原理

分布式数据库

就把整个数据按分区规则映射到多个数据库节点,即把数据划分到多个节点上,每个节点负责整体数据的一个子集。比如我们库有900条用户数据,有3个redis节点,将900条分成3份,分别存入到3个redis节点

900-->一个数据库

900-->多个数据库

分区规则

常见的分区规则哈希分区和顺序分区,redis集群使用了哈希分区的“虚拟槽分区”方式。

虚拟槽分区(槽:slot)

数据:key-value

数据库:key值关联

RedisCluster采用此分区,所有的键根据哈希函数映射到0-16383槽内,共16384个槽位,每个节点维护部分槽及槽所映射的键值数据。

槽与节点的关系如下:

redis用虚拟槽分区使解耦数据与Redis数据库节点关系,节点自身维护槽映射关系,分布式存储。

redisCluster的缺陷

执行数据库操作时,一次操作,只能连接一个数据库

1) 键的批量操作支持有限,比如mset, mget,如果多个键映射在不同的槽,就不支持了

2) 键事务支持有限,当多个key分布在不同节点时无法使用事务,同一节点是支持事务

3) 键是数据分区的最小粒度,不能将一个很大的键值对映射到不同的节点

4) 不支持多数据库

5) 复制结构只支持单层结构,不支持树型结构。

一. 复制并修改节点主配置文件

复制的配置文件做以下修改,以下以6379为例:

1port 6379端口号
2daemonize yes让redis服务在后台启动
3pidfile /var/run/redis_6379.pidPidfile 文件中的端口号修改为本节点端口号
4cluster-enabled yes把#注释去掉, 开启集群
5cluster-config-file nodes_6379.conf把#注释去掉,集群的配置,配置文件首次启动自动生成
6cluster-node-timeout 15000把#注释去掉,请求的超时时间,默认15秒,可自行设置
7appendonly yes开启aof日志aof 和rdb是redis同步内存中的数据到硬盘的两种方式
8Appendfilename "appendonly_6379.aof"
9protected-mode no关闭保护模式

二. 创建集群节点

1. 创建集群目录rediscluster

创建一个目录

mkdir rediscluster

为六个节点服务创建文件夹 

 首先进入7001文件夹添加配置文件

 创建文件 将下方配置信息复制进去 注意将下方工作目录路径换位自己的

include /opt/redis/redisserver/bin/redis.conf
port 7001
# 允许后台启动
daemonize  yes
pidfile "/var/run/redis_7001.pid"
# 存放数据库的文件   rdb 模式
dbfilename "dump_7001.rdb"
# 工作目录 
dir "/opt/redis/redisserver/rediscluster/7001"
logfile "/opt/redis/redisserver/rediscluster/7001/redis_err_7001.log"
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000

 批量复制文件

echo ./7002 ./7003 ./7004 ./7005 ./7006 | xargs -n 1 cp -v /opt/redis/redisserver/rediscluster/7001/redis.conf

 

之后分别进入7002/3/4/5/6 目录进行修改

2. 修改Redis配置文件

3. 启动Redis群

改完redis的配置文件之后

执行下方命令启动redis ⚠️ 六个全部需要启动

/opt/redis/redisserver/bin/redis-server /opt/redis/redisserver/rediscluster/7001/redis.conf

4. 配置集群

首先到redis-cli所在目录

 执行命令

如果没有跟我上方一样关闭掉redis的密码验证则需要在下方命令之后添加一个密码验证 -a dys(自己的密码),复制下方命令 将ip地址改为自己的

./redis-cli --cluster create --cluster-replicas 1  192.168.5.69:7001 192.168.5.69:7002 192.168.5.69:7003 192.168.5.69:7004 192.168.5.69:7005 192.168.5.69:7006 

 中间输入 yes 同意分配方式

5. 查看集群状态

./redis-cli --cluster check 192.168.184.34:7001 

 

6. 关闭

命令

/opt/redis/redisserver/bin/redis-cli -p 7001 shutdown

 

7. 编写快速启动和关闭的脚本

 找一个自己记得住的目录创建一个.sh脚本文件 名字随意起

将下方命令复制进去即可 记得启动路径如果与我不同记得进行修改 

#!/bin/bash
redis_count=$(ps -ef | grep redis | grep -v grep | wc -l)
echo " $redis_count "
if [ $redis_count -gt 0 ]; then 
    echo "已经启动 开始关闭"
    /opt/redis/redisserver/bin/redis-cli -p 7001 shutdown
    /opt/redis/redisserver/bin/redis-cli -p 7002 shutdown
    /opt/redis/redisserver/bin/redis-cli -p 7003 shutdown
    /opt/redis/redisserver/bin/redis-cli -p 7004 shutdown
    /opt/redis/redisserver/bin/redis-cli -p 7005 shutdown
    /opt/redis/redisserver/bin/redis-cli -p 7006 shutdown
else
    echo "没有运行 开始启动"
    /opt/redis/redisserver/bin/redis-server /opt/redis/redisserver/rediscluster/7001/redis.conf
    /opt/redis/redisserver/bin/redis-server /opt/redis/redisserver/rediscluster/7002/redis.conf
    /opt/redis/redisserver/bin/redis-server /opt/redis/redisserver/rediscluster/7003/redis.conf
    /opt/redis/redisserver/bin/redis-server /opt/redis/redisserver/rediscluster/7004/redis.conf
    /opt/redis/redisserver/bin/redis-server /opt/redis/redisserver/rediscluster/7005/redis.conf
    /opt/redis/redisserver/bin/redis-server /opt/redis/redisserver/rediscluster/7006/redis.conf
fi

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值