目录

一、Redis集群

Ⅰ、Redis集群的概念

Ⅱ、Redis集群的作用

(1)数据分区

(2)高可用

Ⅲ、Redis集群的数据分片

二、部署Redis

三、配置Redis集群

Ⅰ、创建Redis节点的配置文件目录

Ⅱ、配置完成

四、启动节点

五、创建Redis集群

六、查看群集信息

Ⅰ、报错

Ⅱ、集群节点信息

七、脚本开启集群


一、Redis集群

Ⅰ、Redis集群的概念

集群,即Redis Cluster,是Redis 3.0开始引入的分布式存储方案。

集群由多个节点(Node)组成,Redis的数据分布在这些节点中。集群中的节点分为主节点和从节点:只有主节点负责读写请求和集群信息的维护;从节点只进行主节点数据和状态信息的复制。

Ⅱ、Redis集群的作用

(1)数据分区

数据分区(或称数据分片)是集群最核心的功能。
集群将数据分散到多个节点,一方面突破了Redis单机内存大小的限制,存储容量大大增加;另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。
Redis单机内存大小受限问题,在介绍持久化和主从复制时都有提及;例如,如果单机内存太大,bgsave和bgrewriteaof的fork操作可能导致主进程阻塞,主从环境下主机切换时可能导致从节点长时间无法提供服务,全量复制阶段主节点的复制缓冲区可能溢出。

(2)高可用

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

Ⅲ、Redis集群的数据分片

Redis集群引入了哈希槽的概念
Redis集群有16384个哈希槽(编号0-16383)
集群的每个节点负责一部分哈希槽
每个Key通过CRC16校验后对16384取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作

假设集群中具有A、B、C三个节点,如果节点B失败了,整个集群就会因缺少5461-10922这个范围的槽而不可以用。
为每个节点添加一个从节点A1、B1、C1整个集群便有三个Master节点和三个slave节点组成,在节点B失败后,集群选举B1位为的主节点继续服务。当B和B1都失败后,集群将不可用

二、部署Redis

博客:NoSQL数据库Redis

三、配置Redis集群

服务节点个数要求: 至少3个主节点,其中主节点不少于节点总数的一半;至多16384个节点;每个主节点至少有一个从节点,故redis集群模式至少需要6个服务节点。本篇是在一台服务器上启动了6个redis实例进行演示。实际投产部署时,每个节点应该对应一台服务器,每个节点配置为自己主机的IP即可。

主机          操作系统    IP地址:端口号               安装包
Master1    CentOS7    192.168.116.22:8001    redis-5.0.7.tar.gz
Master2    CentOS7    192.168.116.22:8002    redis-5.0.7.tar.gz
Master3    CentOS7    192.168.116.22:8003    redis-5.0.7.tar.gz
Slave1      CentOS7    192.168.116.22:8004    redis-5.0.7.tar.gz
Slave2      CentOS7    192.168.116.22:8005    redis-5.0.7.tar.gz
Slave3      CentOS7    192.168.116.22:8006    redis-5.0.7.tar.gz

Ⅰ、创建Redis节点的配置文件目录

mkdir -p /usr/local/redis-cluster
cd /usr/local/redis-cluster/
mkdir 800{1..6} 
#创建配置文件存放目录


cp /opt/redis-5.0.7/redis.conf /usr/local/redis-cluster/8001
vim /usr/local/redis-cluster/8001/redis.conf 
#-----部分内容已省略-----#

136 daemonize yes
#开启Redis的守护进程

92 port 8001
#redis端口号

263 dir ./
#设定数据文件存放位置,必须指定不同目录位置,否则会丢失数据

832  cluster-enabled yes
#启动集群模式,默认是被注释掉的,取消注释

840  cluster-config-file nodes-8001.conf
#集群节点信息文件
***#注意:尽管有此选项的名称,但这不是用户创建、也不是用户可编辑的配置文件,而是Redis群集节点每次发生更改时自动保留群集配置(基本上为状态)的文件,以便能够在启动时重新读取它。该文件列出了群集中其他节点,它们的状态,持久变量等等。由于某些消息的接收,通常会将此文件重写并刷新到磁盘上***

846  cluster-node-timeout 15000
#Redis群集节点可以不可用的最长时间,单位为毫秒,而不会将其视为失败。如果主节点超过指定的时间不可达,它将由其从属设备进行 故障切换。并且每个无法在指定时间内到达大多数主节点的节点将停止接受查询

69 bind 127.0.0.1 192.168.116.22
#127.0.0.1表示主机可通过127.0.0.1和 localhost访问本机节点; 192.168.116.22是当前主机IP,能够让其它服务器节点访问,否则无法创建集群

88 protected-mode no
#redis3.2版本后新增;no:外部网络可直接访问;yes:需配置bind ip或者设置访问密码

699 appendonly yes
#开启AOF持久化(Redis能在发生服务器电源故障或操作系统仍然正常运行但Redis进程莫名挂掉的情况下,只丢失1秒的数据)

507 # requirepass foobared
#设置Redis访问密码

293 # masterauth <master-password>
#设置集群节点间访问密码,与requirepass中一致

将修改完的配置文件复制到其他节点目录下并作小修改

cd /usr/local/redis-cluster/8001
cp redis.conf /usr/local/redis-cluster/8002
cp redis.conf /usr/local/redis-cluster/8003
cp redis.conf /usr/local/redis-cluster/8004
cp redis.conf /usr/local/redis-cluster/8005
cp redis.conf /usr/local/redis-cluster/8006

vim /usr/local/redis-cluster/8002/redis.conf 
vim /usr/local/redis-cluster/8003/redis.conf 
vim /usr/local/redis-cluster/8004/redis.conf 
vim /usr/local/redis-cluster/8005/redis.conf 
vim /usr/local/redis-cluster/8006/redis.conf 
 :%s/8001/8002(3/4/5/6)/g
---wq

Ⅱ、配置完成

cd /usr/local/redis-cluster/

tree

redis 预分区 redis分布_数据

四、启动节点

redis-server /usr/local/redis-cluster/8001/redis.conf &
redis-server /usr/local/redis-cluster/8002/redis.conf &
redis-server /usr/local/redis-cluster/8003/redis.conf &
redis-server /usr/local/redis-cluster/8004/redis.conf &
redis-server /usr/local/redis-cluster/8005/redis.conf &
redis-server /usr/local/redis-cluster/8006/redis.conf &
ps -ef | grep redis

redis 预分区 redis分布_缓存_02

五、创建Redis集群

redis-cli --cluster create --cluster-replicas 1 192.168.116.22:8001 192.168.116.22:8002 192.168.116.22:8003 192.168.116.22:8004 192.168.116.22:8005 192.168.116.22:8006

上面的命令只能在新创健集群的时候执行一次,目的是为了建立内部各个节点的对应关系,比如主从关系,这些关系仅且只能在一个集群中初始化时对应一次;如果再此执行,则会出现错误

redis 预分区 redis分布_Redis_03

redis 预分区 redis分布_数据_04

六、查看群集信息

redis-cli -c -h 192.168.116.22 -p 8001
info cluster
#查看是否开启集群
cluster info
#查看集群信息
cluster nodes
#查看节点列表信息

Ⅰ、报错

注意这里登录集群模式要加-c,否则在进行一系列操作时,会报出如下错误提示

localhost:8001> set info 2
(error) MOVED 5642 127.0.0.1:8002

Ⅱ、集群节点信息

info cluster & cluster info

redis 预分区 redis分布_分布式_05

 cluster nodes

redis 预分区 redis分布_Redis_06

七、脚本开启集群

#!/bin/bash
echo "-----------正在开启redis集群------------"
redis-server /usr/local/redis-cluster/8001/redis.conf &
redis-server /usr/local/redis-cluster/8002/redis.conf &
redis-server /usr/local/redis-cluster/8003/redis.conf &
redis-server /usr/local/redis-cluster/8004/redis.conf &
redis-server /usr/local/redis-cluster/8005/redis.conf &
redis-server /usr/local/redis-cluster/8006/redis.conf &
sleep 5
if [ $(ps -ef | grep redis | grep -v grep | wc -l) -ge 6 ]
then
redis-cli --cluster create --cluster-replicas 1 192.168.116.22:8001 192.168.116.22:8002 192.168.116.22:8003 192.168.116.22:8004 192.168.116.22:8005 192.168.116.22:8006 && redis-cli -c -h localhost -p 8001 || redis-cli -c -h localhost -p 8001
else echo erro
fi