在Centos7中模拟实现redis的分布式集群

分布式集群架构

sentinel弊端:内存的瓶颈

原来的集群是非分布式的:有集群中的redis服务器都是存储形同的内容!会做成内存的冗余!虽然有高可用性,但是内存会有浪费

所以我们才用分布式的集群架构!

说明:

​ 1.伪集群:一台服务器,启动了6个redis服务、通过端口号区分(7001~7006)

​ 2.真集群:6个节点或者和3个节点

伪集群(一主两从)
在这里插入图片描述

伪集群(一主两从)+哨兵
在这里插入图片描述分布式集群
在这里插入图片描述

replication

说明:

1:伪集群,一台服务器,启动6个redis服务、通过端口区分(7001~7006)

2:真集群:6个节点或者3个节点

分布式集群的基本原理:

​ 实质上就是如图所示:由原来的一主两从加上设置的哨兵,哨兵不存储东西,只负责监视和自动故障迁移!

由原来的三个服务都存储一样的数据,假设数据量是100G、那么他们三台所有的实质的数据量就是100G

​ 但是图三中的分布式的集群架构实现了纵向的高可用性和横向的内存扩展!!!共6台redis,分为三个主和三个从,每一个主都对应一个自己的从redis,每一对的主从都有100G的内存,实现了自身的好可用和横向的内存的扩展,实质的内存存储量能达到300G!!

​ 分布式的基本存储原理就是:假设有16384个插槽slot,数据的存储是通过hash算法来实现的,为每一条的数据在set的时候通过hash算法;用hash的key跟16384 进行取余得到的数目是一个0到16383的区间内数,又因为是三对redis服务来进行横向的扩展的,16384的数目会按照算法分配给三对服务redsi指定的数据区间,set的key跟16384取余后的结果是多少,这个结果在哪个区间就会将数据存储到对应的redis的对服务器上!!!

进行取数据的时候:因为get和set都是用的同一个hash算法来进行对同一key的跟16484的取余运算,所以结果是相同的,就能够锁定到set时所存储的redis的服务器!实现对数据的取!!

分布式集群搭建

1、后台杀掉所有的redis的进程

pkill -9 redis
#验证一下:
ps -ef|grep redis

在这里插入图片描述后台没有redis的进程了!!

2、把redis/data下的所有的数据文件清空(以前应该是存储的RDB和AOF数据文件)

在指定的目录下:

rm -rf ./*

在这里插入图片描述

3、在redis文件夹下创建cluster-conf目录!

mkdir cluster-conf

在这里插入图片描述

4、从源码包复制redis.conf到指定目录

[root@zhuxm01 server]# cp redis-6.0.8/redis.conf /export/server/redis/cluster-conf/

在这里插入图片描述

在redis/cluster-conf文件夹下创建6个文件redis7001–7006配置文件

vi redis7001.conf

第二步:分别配置每个redis的配置文件,详细配置如下,注意区分端口

include /export/server/redis/cluster-conf/redis.conf
port 7001
#redis的进程文件
pidfile /var/run/redis7001.pid
#rdb文件名
dbfilename redis7001.rdb
#aof文件名
appendfilename "appendonly7001.aof"
# 集群
cluster-enabled yes
# 生成的node文件
cluster-config-file nodes7001.conf
#守护进程
daemonize yes
#aof、rdb文件存储目录
dir /export/server/redis/data/
bind 0.0.0.0

在这里插入图片描述

#如果redis设置密码,加上如下配置
requirepass "123456"
masterauth "123456"

在这里插入图片描述

第三步:启动每个redis服务
在redis/bin/目录下!!!

[root@zhuxm01 redis]# ./redis-server /export/server/redis/cluster-conf/redis7001.conf 
[root@zhuxm01 redis]# ./redis-server /export/server/redis/cluster-conf/redis7002.conf 
[root@zhuxm01 redis]# ./redis-server /export/server/redis/cluster-conf/redis7003.conf 
[root@zhuxm01 redis]# ./redis-server /export/server/redis/cluster-conf/redis7004.conf 
[root@zhuxm01 redis]# ./redis-server /export/server/redis/cluster-conf/redis7005.conf 
[root@zhuxm01 redis]# ./redis-server /export/server/redis/cluster-conf/redis7006.conf 
[root@zhuxm01 redis]# ps -ef|grep redis
root      11186      1  0 09:51 ?        00:00:00 redis-server 192.168.234.131:7001 [cluster]
root      11195      1  0 09:51 ?        00:00:00 redis-server 192.168.234.131:7002 [cluster]
root      11203      1  0 09:51 ?        00:00:00 redis-server 192.168.234.131:7003 [cluster]
root      11212      1  0 09:51 ?        00:00:00 redis-server 192.168.234.131:7004 [cluster]
root      11220      1  0 09:51 ?        00:00:00 redis-server 192.168.234.131:7005 [cluster]
root      11229      1  0 09:51 ?        00:00:00 redis-server 192.168.234.131:7006 [cluster]
root      11240   7691  0 09:52 pts/0    00:00:00 grep --color=auto redis
[root@zhuxm01 redis]# 

![在这里插入图片描述](https://img-blog.csdnimg.cn/27a34967864f4f529f738dc47e51f420.png

在这里插入图片描述在这里插入图片描述

第四步:创建集群

#在redis/bin下面执行的命令!注意要用自己虚拟机的ip地址!!我的是192.168.37.126
./redis-cli --cluster create 192.168.37.126:7001 \
192.168.37.126:7002 \
192.168.37.126:7003 \
192.168.37.126:7004 \
192.168.37.126:7005 \
192.168.37.126:7006 \
--cluster-replicas 1 

#最后的那个cluster-replicas 1 指的是每一个主节点都有一个从节点

在这里插入图片描述输入yes同意其分配的策略!

自动帮我们按照hash算法分配好了三对的主从redis服务器 和器对应的卡槽的区间;

>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.234.131:7005 to 192.168.234.131:7001
Adding replica 192.168.234.131:7006 to 192.168.234.131:7002
Adding replica 192.168.234.131:7004 to 192.168.234.131:7003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 7e88abdfa256140ab11dc3c2173b00c5868a0479 192.168.234.131:7001
   slots:[0-5460] (5461 slots) master
M: e5845e3494d58b5400fa21d4b3c34ccafce43024 192.168.234.131:7002
   slots:[5461-10922] (5462 slots) master
M: 5dbec321866665aceb8ae0c6791e2ded39464368 192.168.234.131:7003
   slots:[10923-16383] (5461 slots) master
S: 8ad824d12b9f1a16a75e227266e9940aa8610422 192.168.234.131:7004
   replicates 5dbec321866665aceb8ae0c6791e2ded39464368
S: 8ca84b32509e178181585206eaa736c6323dbd3a 192.168.234.131:7005
   replicates 7e88abdfa256140ab11dc3c2173b00c5868a0479
S: 7a518a28534593c44694215e3a83b3311704e4d4 192.168.234.131:7006
   replicates e5845e3494d58b5400fa21d4b3c34ccafce43024
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster

第五步:连接集群

在redis/bin目录下

#别忘了-c 按照集群  当用的虚拟机的本机连接本机的redis的服务时不需要加-h和后面的内容  --raw 是不修改编码格式的方式运行,这样可以显示中文不乱码
./redis-cli -h 192.168.37.126 -p 7002 -c  --raw
#连接上客户端后可以执行命令查看redis节点详情
info replication

在这里插入图片描述
可以看到配置信息中:

当前连接的端口的redis的角色是master

他的从redis是7004端口

测试集群

测试集群的hash分配测试当我们在7002端口进行set key时,hash算法计算key并与总卡槽数16384进行取余得到数的区间在分配的7001的端口上,于是就将数据存储在了7001的端口上,我们要get这个key会自动跳转到7001的端口get到这个key!!!
hash算法的分配存储的集群实现!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值