【2023】Redis cluster集群模式搭建

这篇具有很好参考价值的文章主要介绍了【2023】Redis cluster集群模式搭建。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.cluster集群介绍

Redis Cluster是Redis提供的一种分布式方案,可以将数据分散到多个节点上进行存储和处理,提高数据的可用性和性能。Redis Cluster采用哈希槽的方式来分片数据,将整个数据集分为16384个哈希槽,每个节点负责一部分哈希槽的数据存储和处理,节点之间通过gossip协议进行信息交换和数据同步,从而实现高可用和负载均衡。

Redis Cluster支持自动节点发现和故障转移,当节点出现故障或者添加新节点时,集群会自动进行重新分片和数据迁移,保证数据的一致性和可用性。同时,Redis Cluster还提供了一些监控和管理工具,方便管理人员进行集群的管理和维护。

优点:

  • 高性能,高可用,可扩展的分布式解决方案

2.搭建cluster集群

2.1.架构图

【2023】Redis cluster集群模式搭建

2.2.搭建集群

2.2.1.创建所需配置文件

  • /data/redis/redisConf目录下创建创建节点所需要的配置文件

master1,文件名:clusterMaster1.conf

port 6379
dir "/redisConfig"
logfile "clusterMaster1.log"
cluster-enabled yes
cluster-config-file nodes-6379.conf

以上配置:

第一行:指定端口
第二、三行:指定日志路径和文件名
第四行:开启cluster集群模式并加入集群
第五行:cluster集群相关的配置文件,该文件会自动生成

master2,文件名:clusterMaster2.conf

port 6380
dir "/redisConfig"
logfile "clusterMaster2.log"
cluster-enabled yes
cluster-config-file nodes-6380.conf

master3,文件名:clusterMaster3.conf

port 6381
dir "/redisConfig"
logfile "clusterMaster3.log"
cluster-enabled yes
cluster-config-file nodes-6381.conf

slave1,文件名:clusterSlave1.conf

port 16379
dir "/redisConfig"
logfile "clusterSlave1.log"
cluster-enabled yes
cluster-config-file nodes-16379.conf

slave2,文件名:clusterSlave2.conf

port 16380
dir "/redisConfig"
logfile "clusterSlave2.log"
cluster-enabled yes
cluster-config-file nodes-16380.conf

slave3,文件名:clusterSlave3.conf

port 16381
dir "/redisConfig"
logfile "clusterSlave3.log"
cluster-enabled yes
cluster-config-file nodes-16381.conf

2.2.2.创建集群所需容器

  • 容器master1-3,slave1-3创建命令
docker run -itd --name redisMaster1 -v /data/redis/redisConf:/redisConfig:rw -p 6379:6379 redis:6.0 redis-server /redisConfig/clusterMaster1.conf
docker run -itd --name redisMaster2 -v /data/redis/redisConf:/redisConfig:rw -p 6380:6380 redis:6.0 redis-server /redisConfig/clusterMaster2.conf
docker run -itd --name redisMaster3 -v /data/redis/redisConf:/redisConfig:rw -p 6381:6381 redis:6.0 redis-server /redisConfig/clusterMaster3.conf
docker run -itd --name redisSlave1 -v /data/redis/redisConf:/redisConfig:rw -p 16379:16379 redis:6.0 redis-server /redisConfig/clusterSlave1.conf
docker run -itd --name redisSlave2 -v /data/redis/redisConf:/redisConfig:rw -p 16380:16380 redis:6.0 redis-server /redisConfig/clusterSlave2.conf
docker run -itd --name redisSlave3 -v /data/redis/redisConf:/redisConfig:rw -p 16381:16381 redis:6.0 redis-server /redisConfig/clusterSlave3.conf
  • 打开master1节点的nodes文件,可以看到如下信息
[root@localhost redisConf]# cat nodes-6379.conf 
57adbc5123224d7510712906e7fb853b179ca88b :0@0 myself,master - 0 0 0 connected
vars currentEpoch 0 lastVoteEpoch 0

内容为该容器为主节点,只连接了自身,没有其他节点

  • 通过docker inspect查看得知,容器IP分别为172.17.0.2-7

2.2.3.创建集群:master1节点连接其他节点

  • 进入到master1节点容器,连接其他节点
[root@localhost ~]# docker exec -it redisMaster1 /bin/bash
root@a6ee8fb2d3f5:/data# redis-cli -p 6379 cluster meet 172.17.0.3 6380
OK
root@a6ee8fb2d3f5:/data# redis-cli -p 6379 cluster meet 172.17.0.4 6381
OK
root@a6ee8fb2d3f5:/data# redis-cli -p 6379 cluster meet 172.17.0.5 16379
OK
root@a6ee8fb2d3f5:/data# redis-cli -p 6379 cluster meet 172.17.0.6 16380
OK
root@a6ee8fb2d3f5:/data# redis-cli -p 6379 cluster meet 172.17.0.7 16381
OK
  • 连接master1服务器,查看集群状态
root@a6ee8fb2d3f5:/data# redis-cli
127.0.0.1:6379> cluster info
cluster_state:fail
cluster_known_nodes:6
  • 为三个主节点分配哈希槽

为master1注入哈希槽

root@a6ee8fb2d3f5:/redisConfig# for i in $(seq 0 5460);do /usr/local/bin/redis-cli -h 172.17.0.2 -p 6379 CLUSTER ADDSLOTS $i;done

为master2注入哈希槽(进入容器内部执行)

for i in $(seq 5461 10922);do /usr/local/bin/redis-cli -h 172.17.0.3 -p 6380 CLUSTER ADDSLOTS $i;done

为master3注入哈希槽(进入容器内部执行)

for i in $(seq 10923 16383);do /usr/local/bin/redis-cli -h 172.17.0.4 -p 6381 CLUSTER ADDSLOTS $i;done
  • 回到master1容器内部查看集群状态
root@a6ee8fb2d3f5:/data# redis-cli
127.0.0.1:6379> CLUSTER INFO
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6

可以看到集群运行正常,16384个哈希槽也分配完成

2.2.4.配置从节点,完成三主三从

  • 在master1容器内查看各节点id
127.0.0.1:6379> CLUSTER nodes
9357e7ff8892533ea056a52bef836f811d57b27a 172.17.0.7:16381@26381 master - 0 1686132119000 5 connected
28d44b6219bb1b29e032c7ed1d89f5fc4b1331db 172.17.0.6:16380@26380 master - 0 1686132121109 4 connected
930cdb19e676169c4c1bc155408efa6876236fae 172.17.0.5:16379@26379 master - 0 1686132122117 3 connected
57adbc5123224d7510712906e7fb853b179ca88b 172.17.0.2:6379@16379 myself,master - 0 1686132119000 1 connected 0-5460
86b66441b357d59c68660eb09f3d9bb20ea99346 172.17.0.4:6381@16381 master - 0 1686132120000 2 connected 10923-16383
f4e9388ae47aff89a9512e39c88eea4a5ecfa4b0 172.17.0.3:6380@16380 master - 0 1686132121000 0 connected 5461-10922

知道id后就可以进行主从关系配置

  • 进入到slave1容器内部,进行配置
[root@localhost ~]# docker exec -it redisSlave1 /bin/bash
root@1f8209b74008:/data# redis-cli -p 16379
127.0.0.1:16379> cluster replicate 57adbc5123224d7510712906e7fb853b179ca88b
OK
  • 进入到slave2容器内部,进行配置
[root@localhost ~]# docker exec -it redisSlave2 /bin/bash
root@90692280afb4:/data# redis-cli -p 16380
127.0.0.1:16380> cluster replicate f4e9388ae47aff89a9512e39c88eea4a5ecfa4b0
OK
  • 进入到slave3容器内部,进行配置
[root@localhost ~]# docker exec -it redisSlave3 /bin/bash
root@2906e497f3d4:/data# redis-cli -p 16381
127.0.0.1:16381> cluster replicate 86b66441b357d59c68660eb09f3d9bb20ea99346
OK
  • 查看集群状态
127.0.0.1:16381> cluster nodes
930cdb19e676169c4c1bc155408efa6876236fae 172.17.0.5:16379@26379 slave 57adbc5123224d7510712906e7fb853b179ca88b 0 1686132676594 1 connected
86b66441b357d59c68660eb09f3d9bb20ea99346 172.17.0.4:6381@16381 master - 0 1686132678000 2 connected 10923-16383
f4e9388ae47aff89a9512e39c88eea4a5ecfa4b0 172.17.0.3:6380@16380 master - 0 1686132676000 0 connected 5461-10922
28d44b6219bb1b29e032c7ed1d89f5fc4b1331db 172.17.0.6:16380@26380 slave f4e9388ae47aff89a9512e39c88eea4a5ecfa4b0 0 1686132678611 0 connected
57adbc5123224d7510712906e7fb853b179ca88b 172.17.0.2:6379@16379 master - 0 1686132677601 1 connected 0-5460
9357e7ff8892533ea056a52bef836f811d57b27a 172.17.0.7:16381@26381 myself,slave 86b66441b357d59c68660eb09f3d9bb20ea99346 0 1686132675000 2 connected

至此集群内三主三从的工作已完成

3.在cluster集群内读写数据

  • 在当前的slave3容器创建数据测试
127.0.0.1:16381> set name 'zhangsan'
(error) MOVED 5798 172.17.0.3:6380

报错,内容是这个键应该放在172.17.0.3:6380的5798哈希槽内

  • +c参数进行正常写入
root@2906e497f3d4:/data# redis-cli -p 16381 -c
127.0.0.1:16381> set name 'zhangsan'
-> Redirected to slot [5798] located at 172.17.0.3:6380
OK
  • 这个时候在172.17.0.3节点上可以查看到数据
[root@localhost ~]# docker exec -it redisMaster2 /bin/bash
root@aa2cb23a71c1:/data# redis-cli -p 6380
127.0.0.1:6380> get name
"zhangsan"

如果当该节点故障无法使用,该键回设置到其他节点上,实现故障自动恢复的效果。文章来源地址https://www.toymoban.com/news/detail-478874.html

本节内容到此为止,内容总结自基于docker的redis入门与实战

到了这里,关于【2023】Redis cluster集群模式搭建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis 主从复制 + 哨兵模式 + Cluster 集群

    redis群集有三种模式: 分别是主从同步/复制、哨兵模式、Cluster,下面会讲解一下三种模式的工作方式,以及如何搭建cluster群集 主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡

    2024年02月09日
    浏览(38)
  • 【Redis】三种集群模式(主从复制、哨兵模式、Cluster)

    redis有三种集群模式,其中主从是最常见的模式。Sentinel 哨兵模式是为了弥补主从复制集群中主机宕机后,主备切换的复杂性而演变出来的。哨兵顾名思义,就是用来监控的,主要作用就是监控主从集群,自动切换主备,完成集群故障转移。cluster 模式是redis官方提供的集群模

    2024年01月21日
    浏览(60)
  • Docker 搭建Redis Cluster 集群

    环境: centos7 redis:7.0.5 三主三从,六个节点 一、下载redis镜像 docker pull redis:7.0.5 二、创建虚拟网卡 网卡类型为bridge桥接类型 三、准备redis配置文件 redis.conf 配置解释: port :节点端口; requirepass :设置密码,访问时需要验证 masterauth: 设置主从复制密码 protected-mode :保护模

    2024年02月09日
    浏览(40)
  • redis7部署集群:包含主从模式、哨兵模式、Cluster集群模式等三种模式

    前言: redis部署集群常见的一般有三种模式:主从模式,Sentinel(哨兵模式),Redis Cluster(高可用Cluster集群),根据不同的需求可自定义选择部署方式。 Redis 主从模式(Replication) 优点: 数据备份:主节点的数据会复制到从节点,提供了数据冗余和一定程度的故障恢复能力

    2024年01月20日
    浏览(94)
  • 使用docker搭建 redis cluster 集群

    目录 1.拉取redis镜像 2.创建network 3.创建redis配置文件 4.创建redis容器 5.创建Redis Cluster集群 6.测试 1.拉取redis镜像 2.创建network docker容器创建的应用会默认使用 bridge,但是每次重启docker此网络的ip会动态变更,因此需要我们自己手动创建一个固定的network 其它虚拟网卡相关命令

    2024年02月02日
    浏览(39)
  • Redis追本溯源(四)集群:主从模式、哨兵模式、cluster模式

    Redis 有多种集群搭建方式,比如,主从模式、哨兵模式、Cluster 模式。 Redis 主从模式还解决了单点的问题。Redis 主库在进行修改操作的时候,会把相应的写入命令近乎实时地同步给从库,从库回放这些命令,就可以保证自己的数据与主库保持一致。那么,当主库发生宕机的时

    2024年02月14日
    浏览(42)
  • Redis 7 第八讲 集群模式(cluster)架构篇

    Redis 集群架构图         Redis 集群是一个提供在多个Redis节点间共享数据的程序集;Redis集群可以支持多个master  Redis集群支持多个master,每个master又可以挂载多个slave 读写分离 支持数据的高可用 支持海量数据的读写存储操作 集群自带Sentinel的故障转移机制,内置支持高可用,

    2024年02月10日
    浏览(34)
  • redis高可用——主从复制、哨兵模式、cluster集群

    目录 1、redis群集有三种模式 2、主从复制 2.1、概述: 2.2、Redis主从复制有以下几个重要作用: 2.3、主从复制流程: 2.4、redis主从复制实验 3、哨兵模式. 3.1、概述: 3.2、 哨兵的核心功能: 3.3、哨兵模式原理: 3.6、 哨兵模式的作用; 3.7、故障转移机制 3.8、主节点的选举: 3.9、主

    2024年02月09日
    浏览(38)
  • Redis高可用(主从复制、哨兵模式和Cluster集群)

    目录 一、Redis高可用 1.持久化 2.主从复制 3.哨兵 4.Cluster集群 二、主从复制 1.概念 2.作用 3.主从复制流程 4.配置主从复制 三、哨兵模式 1.功能 2.作用 3.组成 4.故障转移机制 5.主节点选举依据 6.配置哨兵模式 7.故障模拟 8.恢复故障节点 四、Cluster群集 1.简介 2.作用 (1)数据分区

    2024年02月15日
    浏览(42)
  • redis — redis cluster集群模式下如何实现批量可重入锁?

    一、redis cluster 集群版 在Redis 3.0版本以后,Redis发布了Redis Cluster。该集群主要支持搞并发和海量数据处理等优势,当 Redis 在集群模式下运行时,它处理数据存储的方式与作为单个实例运行时不同。这是因为它应该准备好跨多个节点分发数据,从而实现水平可扩展性。具体能力表

    2024年01月21日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包