Linux之部署Redis集群(三主三从)

一、redis集群的介绍

1. redis集群的介绍

Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误。Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令。Redis 集群的优势:

  • 自动分割数据到不同的节点上。
  • 整个集群的部分节点失败或者不可达的情况下能够继续处理命令。

2. redis集群的数据分片

redis集群没有使用一致性hash,而是引用了哈希槽的概念。redis集群中有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置到那个槽,集群的每个节点都会负责一部分的hash槽。这种哈希槽结构很容易添加或删除节点,要想添加一个节点,只需要从其他节点上取部分hash槽分配到新节点上即可添加到集群中。删除某一节点,则将该节点上的哈希槽全部转移到其他可用的节点上,然后将没有任何槽的节点从集群中移除。由于从一个节点将哈希槽移动到另一个节点并不会停止服务,所以无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态。要注意的是,如果哈希槽不完整,会导致整个redis集群的宕机。

二、部署redis集群

实验准备:

在server1(172.25.5.1)上安装redis软件,并开启redis

1. 设置内存分配策略(可根据服务器的实际情况进行设置)

cd /proc/sys/vm
echo 1 > overcommit_memory 	
#1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何
#0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程
#2:表示内核允许分配超过所有物理内存和交换空间总和的内存
cat overcommit_memory

2. 创建集群工作目录及启动脚本

cd /usr/local
mkdir redis-cluster
cd redis-cluster/
mkdir 700{1..6}
##在每个700X目录下均编写redis.conf,注意端口不能相同,可以按顺序设置7001、7002、7003...
vim 7001/redis.conf
port 7001    #redis 服务的端口号
cluster-enabled yes    #开启实例的集群模式
cluster-config-file nodes.conf    #设置保存节点配置文件的路径,默认值为nodes.conf,节点配置文件无需人为修改,redis集群启动时创建,并在有需要时自动进行更新
cluster-node-timeout 5000    #超时5s,则切换为master
appendonly yes    #追加执行命令到文件中
daemonize yes    #定制 redis 服务是否以守护模式运行
cp 7001/redis.conf 7002
redis-server ./redis.conf    #分别启动redis的6个实例

创建新目录, 并创建六个以端口号为名字的子目录, 在将每个目录中运行一个 Redis 实例 

Linux之部署Redis集群(三主三从)_第1张图片

在其他子目录中,同样写入这些参数,注意其他子目录中redis.conf文件的port端口号不能一样(port——7001、7002、7003、7004、7005、7006)

Linux之部署Redis集群(三主三从)_第2张图片

3. 创建集群

redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1    #--cluster-replicas 1 表示一个master只有一个slave

通过--cluster-replicas 1参数,我们使得这6个实例中有三个master和三个slave ,通过id我们可以看出master与slave的对应关系,7001——7004、7002——7005、7003——7006

Linux之部署Redis集群(三主三从)_第3张图片

4. 集群中的存储

redis-cli -c -p 7001
set name westos
get name

Linux之部署Redis集群(三主三从)_第4张图片

我们可以看出redis集群中通过缓存记录中的哈西曹与节点地址之间的映射,直接将命令发送到正确的节点上,在集群中的任意节点进行数据的查询,该命令会转向到正确的且存储数据的节点上。这种映射只会在集群的配置出现某些修改时变化,比如说,在一次故障转移后,或者系统管理员通过添加节点或移除节点来修改集群的布局后,会出现转向的修改。

5. 测试集群的特性

挂掉一个master(7002),观察7005是否转变为master

redis-cli -p 7002 shutdown
redis-cli --cluster check 127.0.0.1:7005

Linux之部署Redis集群(三主三从)_第5张图片

关闭7002后,7005主动切换为master,我们通过redis命令行查看redis中的数据,会发现数据转向变为7005

Linux之部署Redis集群(三主三从)_第6张图片

通过redis-server redis.conf命令可以开启该节点

6. 集群宕机的原因

(1)集群中超过一半的master同时宕机

(2)哈希槽不完整(处于同一哈希槽中的master和slave均宕机)

你可能感兴趣的:(搭建redis集群)