Redis集群搭建

Redis集群搭建

什么是Redis集群

Redis集群是一个分布式、容错的Redis实现,它由多个Redis节点组成,在多个Redis节点之间进行数据共享。集群可以使用的功能是普通单机Redis所能使用的功能的一个子集,他提供了复制和故障转移功能。

Redis集群中不存在中心节点和代理节点,而且不支持那些需要同时处理多个键的Redis命令。

Redis集群的设计目标是达到线性可扩展性。

Redis集群为了保证数据的一致性,而牺牲一部分容错性。

Redis集群通过分区来提供一定程度的可用性,当集群中有部分节点失效或无法提供服务时,集群也可以继续完成相关的命令请求。

Redis集群实现了单机Redis中所有处理单个数据库键的命令,它不支持多数据库功能。它默认使用0号数据库,并且不能使用SELECT命令。

使用集群的好处:

  1. 可以实现将数据自动切分到多个节点
  2. 当集群中有部分节点失效或者无法提供服务的时候,它依然可以继续完成相关的命令请求
  3. Redis集群的使用可以解决高并发、大数据量的问题

集群中的节点和槽

节点

一个Redis集群通常由多个节点(Node)组成。在没有搭建Redis集群之前,每个节点都是相互独立的,彼此之间没有关系,每个节点都只包含在自己的集群中,只有将多个节点连接在一起,才能组建一个可以工作的集群。

#连接各个独立的节点
#将这条命令发送个某个节点,就可让该节点与ip和port所指定的节点进行握手。当握手成功时,就表示该节点已经进入集群中 
CLUSTER MEET <ip> <port>

在开启集群模式的时候,服务器会创建一个 clusterState类型的结构来保存当前节点视角下的集群状态。

在集群模式中,每个节点都会使用cluster.h/clusterNode结构来保存自己的当前状态。

Redis集群为了能够存出大量的数据信息,采用分片的方式将大量方式保存在数据库中,这个数据库被划分为16384个槽(Slot)。槽是虚拟槽,槽是有一定的范围,在Redis中的范围是0~16383,每个槽映射一个大数据子集,一般比节点数大

集群搭建

image-20201010150317289

集群搭建步骤

Redis自带的集群搭建

三主三从集群

  • 主节点:7000、7001、7002
  • 主从关系:7003-->7000(7003是7000的从节点)、7004-->7001、7005-->7002

配置开启节点

  • port${port}:指定端口。
  • decmonize yes:以守护进程的方式启动。
  • dir "/home/redis/data":数据目录。
  • dfilename "dump-${port} .rdb": 指定RDB文件。
  • logfle "redis-cluster-${port}.log":指定日志文件。
  • cluster-enabled yes:开启集群模式,表示该节点是一个cluster节点。
  • cluster-config- file nodes-$ {port}.conf: 为cluster 节点指定配置文件。
  • cluster-enabled yes:开启集群模式,表示该节点是一个 cluster 节点。
  • cluster-node- timeout 15000:表示故障转移的时间或节点超时的时间,15s。
  • I cluster-config-file "nides.conf": 集群节点的配置。
  • lster-require fl-ovcrage yes:是否需要集群的所有节点都提供服务,才会认为这个集群是否是正常运行。

准备6个配置文件(7000->7005)

配置文件redis-cluster-7000.conf

port 7000
daemonize yes
dir "/home/redis/data"
logfile "cluster-7000.log"
dbfilename "dump-7000.rdb"
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-require-full-coverage no

配置文件redis-cluster-7001.conf

port 7001
daemonize yes
dir "/home/redis/data"
logfile "cluster-7001.log"
dbfilename "dump-7001.rdb"
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-require-full-coverage no

配置文件redis-cluster-7002.conf

port 7002
daemonize yes
dir "/home/redis/data"
logfile "cluster-7002.log"
dbfilename "dump-7002.rdb"
cluster-enabled yes
cluster-config-file nodes-7002.conf
cluster-require-full-coverage no

其它的三个配置文件也是这样配置。

启动节点

redis-server redis-cluster-7000.conf
redis-server redis-cluster-7001.conf
redis-server redis-cluster-7002.conf
redis-server redis-cluster-7003.conf
redis-server redis-cluster-7004.conf
redis-server redis-cluster-7005.conf
#查看集群信息
redis-cli -p 7000 cluster info

Redis集群中的节点的责任:

  • 保存客户端发送过来的键值对数据
  • 记录集群的状态,以及某个键到其所对应的节点映射
  • 自动发现其他节点,监控其他节点,当某个节点出现故障时进行故障转移

搭建集群

#分别建立7000与7002、7003、7004、7005节点的握手关系
redis-cli -p 7000 cluster meet 127.0.0.1 7002
redis-cli -p 7000 cluster meet 127.0.0.1 7003
redis-cli -p 7000 cluster meet 127.0.0.1 7004
redis-cli -p 7000 cluster meet 127.0.0.1 7005
#查看节点之间的关系
redis-cli -p 7005 cluster nodes

创建脚本文件,来为指定节点指派槽

vim addsloat.sh
start=$1
end=$2
port=$3
for slot in 'seq ${satrt} ${end}'
do
echo "slot:${slot}"
redis-cli -p ${port} cluster addslots ${slot}
done
#为7000节点指派0~5461范围内的槽
sh addsloat.sh 0 5461 7000
#查看集群和节点信息
cluster info
#为7001节点指派5462~10922范围内的槽
sh addsloat.sh 5462 10922 7001
#为7002节点指派10923~16383范围内的槽
sh addsloat.sh 10923 16383 7002

主从分配

#查看节点信息
redis-cli -p 7000 cluster nodes
#分配主从关系
redis-cli -p 7003 cluster replicate node-id	#node-id是节点信息里面的节点id
redis-cli -p 7004 cluster replicate node-id	#node-id是节点信息里面的节点id
redis-cli -p 7005 cluster replicate node-id	#node-id是节点信息里面的节点id
#查看主从关系
redis-cli -p 7003 replicate
posted @ 2020-10-11 09:57  striver-sc  阅读(61)  评论(0编辑  收藏  举报