docker部署RedisCluster集群简单介绍

本文介绍自己建立一个redis-cluster集群的实践,三主三从,使用docker搭建。

其实搭建很简单,就是建立6个容器,每个容器配置不同的端口号,其他的都是一样的。

假设建立6个端口号分别为 5555到5560。

配置文件

port 5555
cluster-enabled yes 
cluster-config-file nodes.conf 
cluster-node-timeout 5000 
appendonly yes 
daemonize no 
bind 0.0.0.0
protected-mode no 
pidfile /tmp/redis/redis-cluster/55555/redis.pid

上面的参数都是必要的。不过如果protected-mode设置为了no,bing可以不加。cluster-enabled是打开了cluster开关,允许使用集群。 cluster-config-file会自动生成,关于该节点的配置信息。 cluster-node-timeout是非常关键的参数,它的值直接影响到了集群通信的效率。看源码就会看到集群节点间的通信都会使用这个值,是单向通信超时的最大时间。

OK 配置好了,就直接编写docker-compose。就是配置各个service,不过下面的教法不准确,这时我们并没指定哪个是主,哪个是从。主从是redis替我们做的工作。

docker-compose文件:


version: '3'networks:redis-cluster-net:external:name: redis-cluster-netservices:redis-master-1:image: redis    #依赖的基础镜像restart: always  #是否遇到异常时自动自动重启container_name: redis-master-1command: [ "redis-server", "/home/redis/cluster/redis.conf" ]  #启动命令networks:redis-cluster-net:ipv4_address: 192.168.200.11volumes:   #redis数据挂载到宿主机- /tmp/redis/redis-cluster/55555/data:/data- /tmp/redis/redis-cluster/55555/redis.conf:/home/redis/cluster/redis.confports:- 5555:5555       #服务端口- 15555:15555   #集群端口redis-master-2:image: redisrestart: alwayscontainer_name: redis-master-2command: [ "redis-server", "/home/redis/cluster/redis.conf" ]networks:redis-cluster-net:ipv4_address: 192.168.200.12volumes:- /tmp/redis/redis-cluster/55557/data:/data- /tmp/redis/redis-cluster/55557/redis.conf:/home/redis/cluster/redis.confports:- 5557:5557       #服务端口- 15557:15557   #集群端口redis-master-3:image: redisrestart: alwayscontainer_name: redis-master-3command: [ "redis-server", "/home/redis/cluster/redis.conf" ]networks:redis-cluster-net:ipv4_address: 192.168.200.13volumes:- /tmp/redis/redis-cluster/55559/data:/data- /tmp/redis/redis-cluster/55559/redis.conf:/home/redis/cluster/redis.confports:- 5559:5559       #服务端口- 15559:15559   #集群端口redis-slave-1:image: redisrestart: alwayscontainer_name: redis-slave-1command: [ "redis-server", "/home/redis/cluster/redis.conf" ]networks:redis-cluster-net:ipv4_address: 192.168.200.14volumes:- /tmp/redis/redis-cluster/55556/data:/data- /tmp/redis/redis-cluster/55556/redis.conf:/home/redis/cluster/redis.confports:- 5556:5556      #服务端口- 15556:15556   #集群端口redis-slave-2:image: redisrestart: alwayscontainer_name: redis-slave-2command: [ "redis-server", "/home/redis/cluster/redis.conf" ]networks:redis-cluster-net:ipv4_address: 192.168.200.15volumes:- /tmp/redis/redis-cluster/55558/data:/data- /tmp/redis/redis-cluster/55558/redis.conf:/home/redis/cluster/redis.confports:- 5558:5558       #服务端口- 15558:15558   #集群端口redis-slave-3:image: redisrestart: alwayscontainer_name: redis-slave-3command: [ "redis-server", "/home/redis/cluster/redis.conf" ]networks:redis-cluster-net:ipv4_address: 192.168.200.16volumes:- /tmp/redis/redis-cluster/55510/data:/data- /tmp/redis/redis-cluster/55510/redis.conf:/home/redis/cluster/redis.confports:- 5510:5510       #服务端口- 15510:15510   #集群端口

启动:docker-compose up -d

容器启动之后,6个节点的redis还是完全独立的,需要手动建立cluster集群。直接使用redis-cli的命令即可。

/tmp/redis/redis-cluster$ redis-cli --cluster create 10.231.23.240:5555 10.231.23.240:5556 10.231.23.240:5557 10.231.23.240:5558 10.231.23.240:5559 10.231.23.240:5510 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 10.231.23.240:5559 to 10.231.23.240:5555
Adding replica 10.231.23.240:5510 to 10.231.23.240:5556
Adding replica 10.231.23.240:5558 to 10.231.23.240:5557
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 69cf0edf78f88458535c05446deaad8bce0123eb 10.231.23.240:5555slots:[0-5460] (5461 slots) master
M: ef9eaf11a9664a023c2a686186b4d69c44415bb3 10.231.23.240:5556slots:[5461-10922] (5462 slots) master
M: 17debd2a9e30af742956428d959d87ad3b2f6fd9 10.231.23.240:5557slots:[10923-16383] (5461 slots) master
S: b5983582f3c04ff7639e09b405fb8ef82c6cbb5d 10.231.23.240:5558replicates 69cf0edf78f88458535c05446deaad8bce0123eb
S: 326176c22211e64b94697ddc12748e15ffd98402 10.231.23.240:5559replicates ef9eaf11a9664a023c2a686186b4d69c44415bb3
S: 738f0fe576d1433302c967d954fc09a92ccbba46 10.231.23.240:5510replicates 17debd2a9e30af742956428d959d87ad3b2f6fd9
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
Waiting for the cluster to join>>> Performing Cluster Check (using node 10.231.23.240:5555)
M: 69cf0edf78f88458535c05446deaad8bce0123eb 10.231.23.240:5555slots:[0-5460] (5461 slots) master1 additional replica(s)
S: 738f0fe576d1433302c967d954fc09a92ccbba46 192.168.200.1:5510slots: (0 slots) slavereplicates 17debd2a9e30af742956428d959d87ad3b2f6fd9
S: b5983582f3c04ff7639e09b405fb8ef82c6cbb5d 192.168.200.1:5558slots: (0 slots) slavereplicates 69cf0edf78f88458535c05446deaad8bce0123eb
S: 326176c22211e64b94697ddc12748e15ffd98402 192.168.200.1:5559slots: (0 slots) slavereplicates ef9eaf11a9664a023c2a686186b4d69c44415bb3
M: 17debd2a9e30af742956428d959d87ad3b2f6fd9 192.168.200.1:5557slots:[10923-16383] (5461 slots) master1 additional replica(s)
M: ef9eaf11a9664a023c2a686186b4d69c44415bb3 192.168.200.1:5556slots:[5461-10922] (5462 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

看上面的信息已经很清晰了,建立了三个master,并分别指派了slot范围。此外,还添加了三个从节点。

集群建立后,查看集群信息:

10.231.23.240:5555> 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
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:1872
cluster_stats_messages_pong_sent:1877
cluster_stats_messages_sent:3749
cluster_stats_messages_ping_received:1872
cluster_stats_messages_pong_received:1872
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:3749

查看集群节点:

10.231.23.240:5555> cluster nodes
738f0fe576d1433302c967d954fc09a92ccbba46 192.168.200.1:5510@15510 slave 17debd2a9e30af742956428d959d87ad3b2f6fd9 0 1605753009829 3 connected
b5983582f3c04ff7639e09b405fb8ef82c6cbb5d 192.168.200.1:5558@15558 slave 69cf0edf78f88458535c05446deaad8bce0123eb 0 1605753009527 1 connected
326176c22211e64b94697ddc12748e15ffd98402 192.168.200.1:5559@15559 slave ef9eaf11a9664a023c2a686186b4d69c44415bb3 0 1605753010834 2 connected
17debd2a9e30af742956428d959d87ad3b2f6fd9 192.168.200.1:5557@15557 master - 0 1605753009000 3 connected 10923-16383
ef9eaf11a9664a023c2a686186b4d69c44415bb3 192.168.200.1:5556@15556 master - 0 1605753010029 2 connected 5461-10922
69cf0edf78f88458535c05446deaad8bce0123eb 192.168.200.11:5555@15555 myself,master - 0 1605753010000 1 connected 0-5460

测试一下添加数据:

127.0.0.1:5555> set test1 haibo
OK
127.0.0.1:5555> set test2 haibo
-> Redirected to slot [8899] located at 192.168.200.1:5557
OK
192.168.200.1:5557> get test2
"haibo"
192.168.200.1:5557> get test1
-> Redirected to slot [4768] located at 192.168.200.1:5555
"haibo"
192.168.200.1:5555> get test2
-> Redirected to slot [8899] located at 192.168.200.1:5557
"haibo"
192.168.200.1:5557> 

现在三主三从的Redis-cluster集群已经正常运行了,现在我们像其中加入两个节点,一主一从。首先还是用docker启动两个容器,端口5561,5562。

首先将5561加入到集群为master节点:

redis-cli --cluster add-node 10.231.23.240:5561 10.231.23.240:5555
>>> Adding node 10.231.23.240:5561 to cluster 10.231.23.240:5555
>>> Performing Cluster Check (using node 10.231.23.240:5555)
M: 69cf0edf78f88458535c05446deaad8bce0123eb 10.231.23.240:5555slots:[0-5460] (5461 slots) master1 additional replica(s)
S: 738f0fe576d1433302c967d954fc09a92ccbba46 192.168.200.1:5510slots: (0 slots) slavereplicates 17debd2a9e30af742956428d959d87ad3b2f6fd9
S: b5983582f3c04ff7639e09b405fb8ef82c6cbb5d 192.168.200.1:5558slots: (0 slots) slavereplicates 69cf0edf78f88458535c05446deaad8bce0123eb
S: 326176c22211e64b94697ddc12748e15ffd98402 192.168.200.1:5559slots: (0 slots) slavereplicates ef9eaf11a9664a023c2a686186b4d69c44415bb3
M: 17debd2a9e30af742956428d959d87ad3b2f6fd9 192.168.200.1:5557slots:[10923-16383] (5461 slots) master1 additional replica(s)
M: ef9eaf11a9664a023c2a686186b4d69c44415bb3 192.168.200.1:5556slots:[5461-10922] (5462 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...

加入之后,slot还没有分片,新加入节点的slot还是空的。

现在执行重新分片操作:

redis-cli --cluster reshard 10.231.23.240:5561 --cluster-from 69cf0edf78f88458535c05446deaad8bce0123eb,ef9eaf11a9664a023c2a686186b4d69c44415bb3,17debd2a9e30af742956428d959d87ad3b2f6fd9 --cluster-to 10cc93e09a91e0e9cfd749d58e4ae1220f5f412c  --cluster-slots 4000

分片之后,可以看到新节点已经指派了slot:

192.168.200.1:5556> cluster nodes
17debd2a9e30af742956428d959d87ad3b2f6fd9 192.168.200.1:5557@15557 master - 0 1605756921113 3 connected 12256-16383
738f0fe576d1433302c967d954fc09a92ccbba46 192.168.200.1:5510@15510 slave 17debd2a9e30af742956428d959d87ad3b2f6fd9 0 1605756921615 3 connected
b5983582f3c04ff7639e09b405fb8ef82c6cbb5d 192.168.200.1:5558@15558 slave 69cf0edf78f88458535c05446deaad8bce0123eb 0 1605756920000 1 connected
326176c22211e64b94697ddc12748e15ffd98402 192.168.200.1:5559@15559 slave ef9eaf11a9664a023c2a686186b4d69c44415bb3 0 1605756921514 2 connected
10cc93e09a91e0e9cfd749d58e4ae1220f5f412c 192.168.200.1:5561@15561 master - 0 1605756920109 7 connected 0-1332 5461-6794 10923-12255
ef9eaf11a9664a023c2a686186b4d69c44415bb3 192.168.200.14:5556@15556 myself,master - 0 1605756920000 2 connected 6795-10922
69cf0edf78f88458535c05446deaad8bce0123eb 192.168.200.1:5555@15555 master - 0 1605756920000 1 connected 1333-5460

上面是使用docker部署Redis的简单过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/666488.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis相关问题

面试官:什么是缓存穿透 ? 怎么解决 ? 候选人: 嗯~~,我想一下 缓存穿透是指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到 DB 去查询,可能导致 D…

树莓派突然不能ssh远程连接的踩坑记录及解决方案

在家研究树莓派,远程连接树莓派吃了不少苦,总是一些意想不到的问题出现,明明昨天还能远程连接,今天又不能了。经过一系列排查,终于锁定: 因为我之前设置的树莓派的静态ip地址,但是可能因为是家…

ai创作软件有哪些?这5个软件了解一下

ai创作软件有哪些?随着科技的飞速发展,人工智能(AI)在各个领域都展现出了惊人的实力。特别是在内容创作领域,AI技术已经成为了助力创作者们提高效率、释放创意的得力助手。今天,我们将为大家介绍五款AI创作…

开源模型应用落地-业务优化篇(四)

一、前言 经过线程池优化、请求排队和服务实例水平扩容等措施,整个AI服务链路的性能得到了显著地提升。但是,作为追求卓越的大家,绝不会止步于此。我们的目标是在降低成本和提高效率方面不断努力,追求最佳结果。如果你们在实施AI项目方面有经验,那一定会对GPU服务器的高昂…

软件工程(最简式总结)

目录 第一章:概述 1.软件危机的表现原因 2.常见的软件开发方法包括: 3.软件工程基本原则 4.软件工程三要素 5.设计模式的分类 6.针对变换型数据流设计步骤 7.针对事务型数据流设计步骤 第二章:软件过程 1.软件生命周期 2.软件过程模型 &…

视觉惯性SLAM系列——ORB-SLAM3的重定位线程(Relocalization Thread)(九)

ORB-SLAM3的重定位线程(Relocalization Thread)(九) 重定位线程(Relocalization Thread)在ORB-SLAM3系统中扮演着关键的角色,尤其是在跟踪丢失的情况下。这个线程的主要任务是在相机失去当前轨迹…

flask_django_python五金电商网络营销的可视化分析研究

前面部分完成了系统需求分析,了解到新闻数据业务方面的需求,系统主要分为用户管理、五金信息管理、在线留言、系统管理等功能。销的可视化研究,并对这些数据进行处理, 然后对这些数据进行可视化分析和统计。 Python 爬虫技术目前来…

Element-plus之el-upload上传图片后回显,以及将回显的图片再次上传

在实际的业务中往往需要把提交但尚未上传的图片显示回前端&#xff0c;等待上传&#xff0c;以下方法是将提交后的图片回显的方法 <template><el-uploadaction"/api/imageContainer/saveOrUpdate"accept"image/bmp,image/jpeg,image/jpg,image/png,ima…

优雅的从HuggingFace下载模型

1. 下载全部文件 以下都以下载bloom模型为例 git lfs install git lfs clone https://huggingface.co/bigscience/bloom-7b1这种方式下载会显示下载的进度及网速&#xff0c;因此一般推荐使用这种方式下载。如果直接使用git clone https://huggingface.co/bigscience/bloom-7…

【云计算】opentack的高级服务部署与调优

opentack的高级服务部署与调优 swift 对象存储 安装 Swift 服务。安装完成后&#xff0c;使用命令创建一个名叫 examcontainer 的容器&#xff0c;将 cirros-0.3.4-x86_64-disk.img 镜像上传到 examcontainer 容器中&#xff0c;并 设置分段存放&#xff0c;每一段大小为 10…

js数组和字符串之间的转换方式以及数组的一些方法

一、数组和字符串之间的转换方式 1&#xff09;将字符串切割成字符串数组—stringObject.split(separator, howmany) seperator-----字符串、正则表达式&#xff0c;必需 howmany------指定返回的数组的最大长度&#xff0c;可省略&#xff0c;省略后全量返回 源代码 var str&q…

Linux内核与驱动面试经典“小”问题集锦(1)

笔者混迹职场这么多年来换了不少工作。头些年做的是单片机工程师&#xff0c;后来转入了Linux。转入Linux后&#xff0c;一开始做BSP和驱动工程师&#xff08;当然后来应用工程师的事也没少干&#xff09;&#xff0c;近几年来专做了Linux内核与系统工程师。由打转入Linux后&am…

c++阶梯之类与对象(一)

目录 1.面向过程与面向对象 c语言的视角&#xff1a; c的视角 2. 类的引入 3. 类的定义 3.1 类的两种定义方式 3.2 成员变量如何命名 4. 类的访问限定符与封装 4.1 访问限定符 4.2 封装 5. 类的作用域 6. 类的实例化 7. 类对象模型 7.1 怎么计算一个类对象的…

redis布隆过滤器(Bloom)详细使用教程

文章目录 布隆过滤器1. 原理2. 结构和操作3. 特点和应用场景4. 缺点和注意事项 应用-redis插件布隆过滤器使用详细过程安装以及配置springboot项目使用redis布隆过滤器下面是布隆过滤器的一些基础命令 扩展 布隆过滤器 Bloom 过滤器是一种概率型数据结构&#xff0c;用于快速判…

解决方案必备PPT网站

解决方案工作过程中&#xff0c;必备的技能: 1.word排版&#xff08;投标文件的编写等...&#xff09; 2.PPT汇报&#xff08;如何快速找到你需要的模版&#xff0c;并且输入汇报资料&#xff09; 免费&#xff08;免费使用&#xff0c;同时也不需要注册&#xff09; 1.优…

【ETOJ P1013】小e的书架 题解(二分查找)

题目描述 小e要把 n n n 本规格相同的书放进书架里&#xff0c;对于每一本书&#xff0c;他可以横着放也可以竖着放&#xff08;不能斜着放&#xff09;。 书的宽度为 1 1 1&#xff0c;高度为 h h h&#xff0c;书架的高度为 t t t&#xff0c;意味着如果你横着放&#…

CUDA/TensorRT部署知识点

CUDA相关: 1、CUDA核函数嵌套核函数的用法多吗? 答:这种用法非常少,主要是因为启动一个kernel本身就有一定延迟,会造成执行的不连续性。 2、如下代码里的 grid/block 对应硬件上的 SM 的关系是什么? 答:首先需要理解grid/block是软件层的概念,而SM是硬件层的概念。所…

前端学习之路(4) vue2和vue3的区别

一. 根节点不同 vue2中必须要有根标签vue3中可以没有根标签&#xff0c;会默认将多个根标签包裹在一个fragement虚拟标签中&#xff0c;有利于减少内存。 二. 组合式API和选项式API 在vue2中采用选项式API&#xff0c;将数据和函数集中起来处理&#xff0c;将功能点切割了当…

C语言如何控制输出最⼩宽度?

一、问题 数据的美观性问题&#xff0c;不仅需要使⽤标志进⾏占位&#xff0c;还需要对宽度等进⾏控制。那么如何控制宽度呢&#xff1f; 二、解答 控制宽度的问题&#xff0c;处理起来其实很简单。如果输出数据的实际位数⼤于定义的宽度&#xff0c; 则按实际位数输出&#x…

springboot151基于web的人力资源管理系统的设计与实现

人力资源管理系统的设计与实现 摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;员工信息因为其管理内容繁杂&#xff0c;管理数量繁…