redis的cluster集群工作模式(rediscluster集群)
redis的cluster集群工作模式(rediscluster集群)
2024-06-02 06:05:51  作者:放蕩的心碎  网址:https://m.xinb2b.cn/life/lju177419.html
基本原理

Cluster模式实现了Redis的分布式存储,即每台节点存储不同的内容,来解决在线扩容的问题;

Cluster采用无中心结构,它的特点如下:

所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽节点的fail是通过集群中超过半数的节点检测失效时才生效客户端与redis节点直连,不需要中间代理层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可Cluster模式的具体工作机制:在Redis的每个节点上,都有一个插槽(slot),取值范围为0-16383当我们存取key的时候,Redis会根据CRC16的算法得出一个结果,然后把结果对16384求余数,这样每个key都会对应一个编号在0-16383之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作为了保证高可用,Cluster模式也引入主从复制模式,一个主节点对应一个或者多个从节点,当主节点宕机的时候,就会启用从节点当其它主节点ping一个主节点A时,如果半数以上的主节点与A通信超时,那么认为主节点A宕机了。如果主节点A和它的从节点都宕机了,那么该集群就无法再提供服务了

Cluster模式集群节点最小配置6个节点(3主3从,因为需要半数以上),其中主节点提供读写操作,从节点作为备用节点,不提供请求,只作为故障转移使用

Cluster模式的优缺点

优点:

无中心架构,数据按照slot分布在多个节点。集群中的每个节点都是平等的关系,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。可线性扩展到1000多个节点,节点可动态添加或删除能够实现自动故障转移,节点之间通过gossip协议交换状态信息,用投票机制完成slave到master的角色转换

缺点:

客户端实现复杂,驱动要求实现Smart Client,缓存slots mapping信息并及时更新,提高了开发难度。目前仅JedisCluster相对成熟,异常处理还不完善,比如常见的“max redirect exception”节点会因为某些原因发生阻塞(阻塞时间大于 cluster-node-timeout)被判断下线,这种failover是没有必要的数据通过异步复制,不保证数据的强一致性slave充当“冷备”,不能缓解读压力批量操作限制,目前只支持具有相同slot值的key执行批量操作,对mset、mget、sunion等操作支持不友好key事务操作支持有线,只支持多key在同一节点的事务操作,多key分布不同节点时无法使用事务功能不支持多数据库空间,单机redis可以支持16个db,集群模式下只能使用一个,即db 0

Redis Cluster模式不建议使用pipeline和multi-keys操作,减少max redirect产生的场景。

总结:主从复制模式能实现读写分离,但是不能自动故障转移;哨兵模式基于主从复制模式,能实现自动故障转移,达到高可用,但与主从复制模式一样,不能在线扩容,容量受限于单机的配置;cluster模式通过无中心化架构,实现分布式存储,可进行线性扩展,也能高可用,但对于像批量操作、事务操作等的支持性不够好一、配置文件

安装好 redis后,修改配置文件,主要参数:

port 7100 # 本示例6个节点端口分别为7100,7200,7300,7400,7500,7600 daemonize yes # 后台运行 pidfile /var/run/redis_7100.pid # pidfile文件对应7100,7200,7300,7400,7500,7600 cluster-enabled yes # 开启集群模式 masterauth passw0rd # 如果设置了密码,需要指定master密码logfile "/usr/local/redis/logs/redis_7100.log"cluster-config-file nodes_7100.conf # 集群的配置文件,同样对应7100,7200等六个节点cluster-node-timeout 15000 # 集群间请求超时的时间,默认15秒,可自行设置#如果使用 aof 持久化appendonly yesappendfilename "appendonly_7100.aof"

创建必要文件夹:

mkdir logs data pid

分别启动redis:

redis-server redis_7100.confredis-server redis_7200.conf...

二、创建集群然后通过命令将这个6个实例组成一个3主节点3从节点的集群,

redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7100 127.0.0.1:7200 127.0.0.1:7300 127.0.0.1:7400 127.0.0.1:7500 127.0.0.1:7600 -a passw0rdb# --cluster-replicas 1 表示希望为集群中的每个主节点创建一个从节点

执行过程截图:

redis的cluster集群工作模式(rediscluster集群)(1)

redis的cluster集群工作模式(rediscluster集群)(2)

可以看到 7100, 7200, 7300 作为3个主节点,分配的slot分别为 0-5460, 5461-10922, 10923-16383, 7600作为7100的slave, 7500作为7300的slave,7400作为7200的slave。我们连接7100设置一个值

[root@dev-server-1 cluster]# redis-cli -p 7100 -c -a passw0rdWarning: Using a password with '-a' or '-u' option on the command line interface may not be safe.127.0.0.1:7100> set site blog.jboost.cn-> Redirected to slot [9421] located at 127.0.0.1:7200OK127.0.0.1:7200> get site"blog.jboost.cn"127.0.0.1:7200>

注意添加 -c 参数表示以集群模式,否则报 (error) MOVED 9421 127.0.0.1:7200 错误, 以 -a 参数指定密码,否则报(error) NOAUTH Authentication required错误。

从上面命令看到key为site算出的slot为9421,落在7200节点上,所以有Redirected to slot [9421] located at 127.0.0.1:7200,集群会自动进行跳转。因此客户端可以连接任何一个节点来进行数据的存取。

通过cluster nodes可查看集群的节点信息;

172.19.195.223:7300> CLUSTER NODES3a4243032dbd56970e6797fea793f2c77f687b85 172.19.195.220:7100@17100 master - 0 1606180586372 1 connected 0-54606c77f772e707ab9e34c178c52c1704f6633587ac 172.19.195.220:7200@17200 slave fd70436e344c6a9b02cb506b446eb7bb7aab3540 0 1606180587375 3 connected59a9dbad8893c629e5475a89ad57632e4e49d843 172.19.195.223:7400@17400 slave 2079eba7cf5d7820146d2179ee8395bce912ecf9 0 1606180584370 5 connected2079eba7cf5d7820146d2179ee8395bce912ecf9 172.19.195.222:7500@17500 master - 0 1606180585372 5 connected 10923-16383fd70436e344c6a9b02cb506b446eb7bb7aab3540 172.19.195.223:7300@17300 myself,master - 0 1606180586000 3 connected 5461-10922c9d61f8c0acbdead01dcf6f6a002357f7d3c598c 172.19.195.222:7600@17600 slave 3a4243032dbd56970e6797fea793f2c77f687b85 0 1606180586000 6 connected172.19.195.223:7300>

我们将7200通过 kill -9 pid杀死进程来验证集群的高可用,重新进入集群执行cluster nodes可以看到7200 fail了,但是7400成了master,重新启动7200,可以看到此时7200已经变成了slave。

  • 隔着玻璃晒后背管用吗?隔着玻璃晒太阳
  • 2024-06-02隔着玻璃晒后背管用吗?隔着玻璃晒太阳隔着玻璃晒太阳能不能补钙,这是我今天晚上在头条上看到的一篇文章,忽然想起今天中午在阳台上隔着玻璃晒了一会太阳,心里想着能不能补钙,谁知道晚上可有了答案才知道晒太阳要在外面晒才能补钙,。
  • 气象与气候学第三版重点(地理老师雷亚鸣)
  • 2024-06-02地理老师雷亚鸣万万没想到,突如其来的一场雨,硬生生把期盼已久的中秋节给过成了泼水节俗话说:一场秋雨一场寒,十场秋雨穿上棉整个中秋假期,哪有什么秋高气爽,有的只有窝在被窝里一边瑟瑟发抖,一边寻思啥时供暖中秋下雨不可怕。
  • 猛虫过江3亿票房(猛虫过江票房破亿)
  • 2024-06-02猛虫过江票房破亿小沈阳自导自演的电影《猛虫过江》在这几天可以说是话题量很高了因为这是小沈阳第一次做导演,所以在这部电影上映之前,就被炒得很热,再加上小沈阳非常卖力的宣传,还有其师傅的鼎力支持,到现在这部电影的票房已经。
  • 漏电保护器采用的工作原理(漏电保护器的工作原理和应用)
  • 2024-06-02漏电保护器的工作原理和应用国内外多年的运行经验表明,推广使用漏电保护器,对防止触电伤亡事故,避免因漏电而引起的火灾事故,具有明显的效果本文就广泛使用的电流型漏电保护器(以下简称漏电保护器)的工作原理及应用作些介绍1漏电保护器的。
  • 为什么不拿养老金的人老谈养老金(一定要参与个人养老金)
  • 2024-06-02一定要参与个人养老金从长远来看,个人养老金制度将会获得非常好的发展,这是由它的几个特点决定的一是参加的条件比较简单目前参加基本养老保险的在职人员不论是什么样的就业形态,即不论是单位就业人员还是灵活就业人员,不受就业地域、。
  • 考驾照新手学员都该看看(拿本记2说说我考驾照)
  • 2024-06-02拿本记2说说我考驾照93分,顺利考过了科目一!十月金秋,刚接手初二的教学工作和班主任,搭档的一群小年轻都敬业,没事就往班里跑,我得以抽出时间来练车去科目二从倒车入库开始练起教练把每一步都详细说明反复示范,然后换到副驾位置。
  • 娱乐圈真正的贵公子(王子气质却出身低微)
  • 2024-06-02王子气质却出身低微有王子的名字,却没有王子的出身,他是立威廉立威廉1976年7月30日出生于新加坡,爷爷是英国人,奶奶是日本与德国混血,母亲则是新加坡华人拥有四国混血,外形俊美,长着一副贵族王子脸的他,当年可是标配版的。
  • 燕子爱在屋檐下好吗(燕子有一种爱叫不打扰)
  • 2024-06-02燕子有一种爱叫不打扰文|燕子编辑|燕子图片|网络喜欢阅文、触心、分享------燕子语此时此刻,我舍不得午休,此时此刻,我特想写一文阅后感受,《有一种爱,叫不打扰》,此文,是昨晚睡前随意浏览的,喜欢题目,内容触心,感同身。
  • 家常小炒鸡(家常小炒鸡的做法)
  • 2024-06-02家常小炒鸡的做法嫩仔鸡250克,生姜5克,芹菜10克,红椒1只,鲜木耳10克,花生油12克,盐6克,味精2克,胡椒粉少许,湿生粉适量,麻油1克嫩仔鸡斩成条,生姜去皮切丝,芹菜去叶、根切段,鲜木耳洗净切条红椒切条嫩仔鸡。
  • 出狱犯人做殡葬行业脸上一道疤 他们做起了殡葬师
  • 2024-06-02出狱犯人做殡葬行业脸上一道疤 他们做起了殡葬师△12月1日,沈阳,辣椒在工作的殡葬店前擦洗自己的车,隔天要当出殡的头车1993年,在一家游戏厅,辣椒因小事和一个人“吵吵”起来,他用一支五连发猎枪朝对方连开三枪,辣椒被判死缓,直到2013年释放,“。
  • dnf勇士币使用教程(DNF还有勇士币的勇士们)
  • 2024-06-02DNF还有勇士币的勇士们大家买国庆套所得到的勇士币是不是还没有花光呢,另外说一个小技巧,在心悦充值返利界面充值DNF点券多返20%勇士币,比例为:1000点券=12勇士币(小数位舍去)心悦俱乐部推出了一个DPL谁是冠军的活动。
  • 小米智能动感单车评测(可以骑的健身环)
  • 2024-06-02可以骑的健身环游戏锻炼二合一,任天堂:健身环为何如此热卖我可太熟悉了因为疫情原因,好多人居家的时间变多了,尤其是对健身爱好者来说这可是煎熬,没有户外新鲜空气的有氧运动,在家买了一堆大大小小的健身器具,可终归是高估了。