redis的集群

目录

1. Redis集群的概述

2. Redis集群的作用

2.1 数据分区

2.2 高可用

3. 哈希槽

3.1 哈希槽的分配

3.1.1 哈希槽可按照集群主机数平均分配(默认分配)

3.1.2 根据主机的性能以及功能自定义分配

3.2 redis集群的分片

3.2.1 分片

3.2.2 如何找到给定key的分片

3.3 优势

4. 搭建Redis群集模式

4.1 服务器IP配置

4.2 服务器防火墙环境

4.3 安装redis 

4.4  创建集群配置目录及文件

4.5 开启群集功能

4.6 启动redis节点

4.7  启动集群

4.8 测试集群


1. Redis集群的概述

  • 集群,即Redis Cluster,是Redis 3.0开始引入的分布式存储方案。
  • 集群由多个节点(Node)组成,Redis的数据分布在这些节点中。集群中的节点分为主节点和从节点;只有主节点负责读写请求和集群信息的维护;从节点只进行主节点数据和状态信息的复制。

2. Redis集群的作用

集群的作用,可以归纳为两点:

2.1 数据分区

数据分区 (或称数据分片)是集群 最核心 的功能。

集群将数据分散到多个节点,一方面突破了Redis单机内存大小的限制,存储容量大大增加;另一方面每个主节点度可以对外提供读服务和写服务,大大提高了集群的响应能力。

Redis单机内存大小受限问题,在介绍持久化和主从复制时都有体积;例如,如果单机内存太大,bgsave和bgrewriteaof的fork操作可能导致主进程阻塞,主从环境下主机切换时可能导致从节点长时间无法提供服务,全量复制阶段主节点的复制缓冲区可能溢出。

2.2 高可用

集群支持主 从复制和主节点的自动故障转换 (与哨兵类似);当任一节点发生故障时,集群仍然可以对外提供服务。

3. 哈希槽

● Redis集群引入了哈希槽的概念

● Redis集群有16384个哈希槽(编号0-16383)

● 集群的每个节点负责一部分哈希槽

● 每个key通过CRC16校验后对16384取余来决定放置哪个哈希槽,通过这个值,去找到所对应的节点,然后直接跳转到这个对应的节点上进行存取操作。

3.1 哈希槽的分配

3.1.1 哈希槽可按照集群主机数平均分配(默认分配)

以3个节点组成的集群为例:

节点A包含0-5460号哈希槽

节点B包含5461-10922号哈希槽

节点C包含10923-16383号哈希槽

3.1.2 根据主机的性能以及功能自定义分配

以3个节点组成的集群为例:

节点A性能最差,包含0-2000号哈希值

节点B性能中等,包含2001-7000号哈希值

节点C性能最强,包含7001-16383号哈希值

3.2 redis集群的分片

3.2.1 分片

使用Redis集群时我们会将存储的数据分散到多台redis机器上,这称为分片。简言之,集群中的每个Redis实例都认为是整个数据的一个分片。

3.2.2 如何找到给定key的分片

为了找到给定key的分片,我们对key进行CRC16(key)算法处理并通过对总分片数量取模。然后,使用确定性哈希函数,这意味着给定的key将多次始终映射到同一个分片,我们可以推断将来读取特定key的位置。

3.3 优势

最大优势:方便扩缩容和数据分派查找。

这种结构很容易添加或者删除节点,比如如果我想新添加个节点D,我需要从节点A、B、C中取部分槽到D上,如果我移除节点A,需要将A中的槽移到B和C节点上,然后将没有任何槽的A节点从集群中移除即可。由于从一个节点将哈希槽移动到另一个节点并不会停止服务,所以无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态。

4. 搭建Redis群集模式

4.1 服务器IP配置

redis的集群一般需要6个节点,3主3从。方便起见,这里在同一台服务器上模拟; 以端口号进行区分,3个主节点端口号6001/6002/6003,对应的从节点端口号6004/6005/6006。

服务器 主机名 IP 主端口 从端口
Node1节点 node 192.168.80.111 6001 6004
Node2节点 node 192.168.80.112 6002 6005
Node3节点 node 192.168.80.113 6003 6006

4.2 服务器防火墙环境

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

4.3 安装redis 

传入安装包到/opt目录
yum install -y gcc gcc-c++ make
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd /opt/redis-5.0.7/
make
make PREFIX=/usr/local/redis install
cd /opt/redis-5.0.7/utils
./install_server.sh
......
Please select the redis executable path []
#输入/uar/local/redis/bin/redis-server
ln -s /usr/local/redis/bin/* /usr/local/bin/

 

4.4  创建集群配置目录及文件

[root@node ~]# cd /etc/redis
[root@node redis]# mkdir -p redis-cluster/redis600{1..6}
[root@node redis]# for i in {1..6}
> do
> cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis600$i
> cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis600$i
> done
[root@node redis]# ls -R redis-cluster/

 

4.5 开启群集功能

  • 仅以redis6001为例,其他5个文件夹的配置文件以此类推修改,特别注意端口号的修改。
[root@node redis]# cd redis-cluster/redis6001
[root@node redis6001]# vim redis.conf 

##69行,注释掉bind项,默认监听所有网卡
#bind 127.0.0.1
##88行,修改,关闭保护模式
protected-mode no
##92行,修改,redis监听端口
port 6001
##136行,开启守护进程,以独立进程启动
daemonize yes
##832行,取消注释,开启群集功能
cluster-enabled yes
##840行,注销注释,群集名称文件设置
cluster-config-file nodes-6001.conf
##846行,注销注释,群集超时时间设置
cluster-node-timeout 15000
##700行,修改,开启AOF持久化
appendonly yes

4.6 启动redis节点

  • 分别进入那六个文件夹,执行命令:“redis-server redis.conf”,来启动redis节点
[root@node redis6001]# for d in {1..6}
> do
> cd /etc/redis/redis-cluster/redis600$i
> ^C
[root@node redis6001]# for d in {1..6}
> do
> cd /etc/redis/redis-cluster/redis600$d
> redis-server redis.conf
> done
[root@node1 redis6006]# ps -ef | grep redis

4.7  启动集群

[root@node redis6006]#redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1 

六个实例分为三组,每组一主一从,前面的做主节点,后面的做从节点。下面交互的时候需要输入yes才可以成功创建。 --replicas 1表示每个主节点有1个从节点。

4.8 测试集群

[root@node1 redis6006]# redis-cli -p 6001 -c
#加-c参数,节点之前就可以互相跳转
127.0.0.1:6001> cluster slots
#查看节点的哈希槽编号范围

 

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-08 13:40:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-08 13:40:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-08 13:40:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-08 13:40:04       18 阅读

热门阅读

  1. 利用hdfs gateway挂载NFS到本地

    2024-04-08 13:40:04       10 阅读
  2. GitOps是DevOps的下一个风口吗?

    2024-04-08 13:40:04       13 阅读
  3. FDA 上市库 Mini | 药物筛选 | MCE

    2024-04-08 13:40:04       14 阅读
  4. HyperBus协议--HyperFLASH中Program Suspend 功能的理解

    2024-04-08 13:40:04       11 阅读
  5. 3.9 Python格式化字符串

    2024-04-08 13:40:04       9 阅读
  6. 蓝桥杯练习题 —— 圆的面积(python)

    2024-04-08 13:40:04       11 阅读