docker下搭建redis集群

news2024/9/23 1:26:25

1. 环境准备

准备好Linux系统机器,并安装好docker,阅读这篇文章前请先了解清楚docker的基本知识并且会熟悉运用docker的常用命令。学习docker基础知识可以参考这篇博文
安装好并启动docker后就可以开始搭建redis了

2. docker容器下安装redis

本篇文章我们安装redis6.0.6版本,执行以下命令直接下载redis6.0.6版本镜像

#dokcer pull 镜像名:版本号
docker pull redis:6.0.6

安装好后再执行 docker images命令,查看到redis6.0.6镜像则安装成功
在这里插入图片描述

3. 搭建redis集群

安装好redis镜像后,此时redis还只是单体,我们需要搭建集群,集群配置如下:

  • docker端口号→宿主机对外暴露的端口:7000→7000,7001→7001,7002→7002,7003→7003,7004→7004,7005→7005
  • 挂载目录:data(数据) → /usr/local/docker/redis/端口号/data/
    conf(配置文件)→ /usr/local/docker/端口号/redis.conf
  • 集群模式:三主三从
  • 节点容器名称:redis-7000,redis-7001,redis-7002,redis-7003,redis-7004,redis-7005

回到linux,首先创建好挂载目录

# 批量创建redis节点7000-7005目录
mkdir -p /usr/local/docker/redis/700{0,1,2,3,4,5}/data

然后分别创建个节点的配置文件,并添加配置信息

vim /usr/local/docker/redis/7000/redis.conf

# 添加以下配置信息
port: 7000									
protected-mode: no								
daemonize: no
appendonly: yes									
cluster-enabled: yes							
cluster-config-file: nodes.conf					
cluster-node-timeout: 20000						

----------------------------------------------------------------------
配置说明:
port: # 节点端口
protected-mode: # 保护模式,默认值 yes,即开启
daemonize: # 是否以守护线程的方式启动(后台启动),默认 no;
appendonly: # 是否开启 AOF 持久化模式,默认 no;
cluster-enabled: # 是否开启集群模式,默认 no
cluster-config-file: # 集群节点信息文件
cluster-node-timeout: # 集群节点连接超时时间(ms)

创建7000节点配置文件后将它复制到其他节点目录下,注意复制到其他目录需要将配置文件的port改为该节点的端口号

cp /usr/local/docker/redis/7000/redis.conf /usr/local/docker/redis/7001
cp /usr/local/docker/redis/7000/redis.conf /usr/local/docker/redis/7002
cp /usr/local/docker/redis/7000/redis.conf /usr/local/docker/redis/7003
cp /usr/local/docker/redis/7000/redis.conf /usr/local/docker/redis/7004
cp /usr/local/docker/redis/7000/redis.conf /usr/local/docker/redis/7005

接下来就可以创建每个节点的docker容器,以7000节点为例

# 创建7000节点容器
docker run \
-p 7000:7000 \
-v /usr/local/docker/redis/7000/redis.conf:/etc/redis/redis.conf \
-v /usr/local/docker/redis/7000/data:/data \
--name redis-7000 \
--net host \
-d redis:6.0.6 redis-server /etc/redis/redis.conf

----------------------------------------------------------------
命令说明
-p 7000:7000 \		#宿主机端口号:容器端口	端口映射
-v /usr/local/docker/redis/7000/redis.conf:/etc/redis/redis.conf \	#宿主机目录:容器目录  redis配置文件挂载
-v /usr/local/docker/redis/7000/data:/data \	#redis数据文件挂载
--name redis-7000 \		# 给容器起个名称
--net host \			# 指定网络类型为host,即与宿主机使用同一网络
-d redis:6.0.6 redis-server /etc/redis/redis.conf	#运行容器 并使用配置文件启动容器内的 redis-server  

然后分别执行以下命令创建并运行其他节点容器

# 创建7001节点容器
docker run \
-p 7001:7001 \
-v /usr/local/docker/redis/7001/redis.conf:/etc/redis/redis.conf \
-v /usr/local/docker/redis/7001/data:/data \
--name redis-7001 \
--net host \
-d redis:6.0.6 redis-server /etc/redis/redis.conf

# 创建7002节点容器
docker run \
-p 7002:7002 \
-v /usr/local/docker/redis/7002/redis.conf:/etc/redis/redis.conf \
-v /usr/local/docker/redis/7002/data:/data \
--name redis-7002 \
--net host \
-d redis:6.0.6 redis-server /etc/redis/redis.conf

# 创建7003节点容器
docker run \
-p 7003:7003 \
-v /usr/local/docker/redis/7003/redis.conf:/etc/redis/redis.conf \
-v /usr/local/docker/redis/7003/data:/data \
--name redis-7003 \
--net host \
-d redis:6.0.6 redis-server /etc/redis/redis.conf

# 创建7004节点容器
docker run \
-p 7004:7004 \
-v /usr/local/docker/redis/7004/redis.conf:/etc/redis/redis.conf \
-v /usr/local/docker/redis/7004/data:/data \
--name redis-7004 \
--net host \
-d redis:6.0.6 redis-server /etc/redis/redis.conf

# 创建7005节点容器
docker run \
-p 7005:7005 \
-v /usr/local/docker/redis/7005/redis.conf:/etc/redis/redis.conf \
-v /usr/local/docker/redis/7005/data:/data \
--name redis-7005 \
--net host \
-d redis:6.0.6 redis-server /etc/redis/redis.conf

此时我们已经创建好了所有节点,但各个节点还是相互独立的,我们需要将他们整合成集群,执行以下命令建立集群

redis-cli --cluster create --cluster-replicas 1 \
192.168.93.71:7000 192.168.93.71:7001 192.168.93.71:7002 \
192.168.93.71:7003 192.168.93.71:7004 192.168.93.71:7005

出现以下结果则表示集群创建成功

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

我们可以执行以下命令进入其中一个节点查看集群信息

# 进入7000节点容器
docker exec -it redis-7000 bash
# 进入redis
redis-cli -p 7000
# 查看集群喜喜
cluster nodes

出现以下结果表示集群创建成功

在这里插入图片描述

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

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

相关文章

数据链路层(必备知识)

文章目录1、数据链路层的作用2、认识以太网<1>以太网帧格式<2>认识MAC地址<3>认识MTU<4>查看硬件地址和MTU3、ARP协议<1>什么是ARP协议<2>ARP数据报格式<3>ARP协议的工作机制4、其他重要协议或技术<1> DNS<2>NAT技术1、…

《MySQL实战45讲》——学习笔记19 “SQL查一行执行慢的排查、锁等待/一致性读“【建议收藏】

由于SQL本身的写法问题&#xff08;如join太多表、未走索引/索引失效、一次查太多数据等&#xff09;&#xff0c;或是MySQL节点CPU占用率很高或IO利用率很高&#xff0c;都会导致一条SQL执行的比较慢&#xff1b;但是有时候&#xff0c;"只查一行数据"&#xff0c;也…

内存优化之重新认识内存

我们知道&#xff0c;手机的内存是有限的&#xff0c;如果应用内存占用过大&#xff0c;轻则引起卡顿&#xff0c;重则导致应用崩溃或被系统强制杀掉&#xff0c;更严重的情况下会影响应用的留存率。因此&#xff0c;内存优化是性能优化中非常重要的一部分。但是&#xff0c;很…

深入体会线程状态的切换

✨✨hello&#xff0c;愿意点进来的小伙伴们&#xff0c;你们好呐&#xff01; &#x1f43b;&#x1f43b;系列专栏&#xff1a;【JavaEE初阶】 &#x1f432;&#x1f432;本篇内容&#xff1a;线程状态详解 &#x1f42f;&#x1f42f;作者简介:一名现大二的三非编程小白&am…

微机-------CPU与外设之间的数据传送方式

目录 一、无条件方式二、查询方式三、中断方式四、DMA方式一、无条件方式 外设要求:简单、数据变化缓慢。 外设被认为始终处于就绪状态。始终准备好数据或者始终准备好接收数据。 IN AL,数据端口 数据端口的地址通过CPU的地址总线送到地址译码器进行译码,同时该指令进行的是…

JAVASE(复习)——异常

所有的异常都是在java.lang包中的Throwable类中 一、Exception 和 Error 的区别 exception&#xff1a;程序本身发生的异常&#xff0c;可以捕获抛出异常&#xff0c;一般用try—catch—finally捕获。 error&#xff1a;发生在jvm层面的错误&#xff0c;程序无法处理。 二…

Git 如何调整 commit 的顺序

title: Git 如何调整 commit 的顺序 date: 2022-12-02 23:11 tags: [git] 〇、问题 使用哪条命令调整commit的顺序&#xff1f; git rebase -i 一、前言 今天测试了git hooks&#xff0c;产生了大量的commit&#xff0c;而后又进行了正常的commit&#xff0c;因此在这里是想要…

java——mybatis——Mybatis注解开发——@Update——修改数据

DAO接口&#xff1a; package com.sunxl.dao;import com.sunxl.pojo.User; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.SelectKey; import org.apache.ibatis.annotations.Update;impo…

SpringBoot+Thymeleaf上传头像并回显【表单提交】

参考文章&#xff1a;springbootthymeleaf实现图片上传并回显https://www.wanmait.com/note/shaowei/javaee/b3717a24fde24d3e89c47765a1a63214.html 一、新建SpringBoot项目 添加 spring web和 thymeleaf 的依赖 二、在templates新建页面 在页面中添加一个表单和一个文件上传…

8086,8088CPU管脚,奇偶地址体, ready信号,reset复位信号。规则字和非规则字

8086/8088均为40条引线&#xff0c;双列直插式封装&#xff0c;某些引线有多重功能&#xff0c;其功能转换有两种情况&#xff1a;一种是分时复用&#xff0c;一种是按组态定义。 用8088微处理器构成系统时&#xff0c;有两种不同的组态&#xff1a; 最小组态&#xff1a;808…

@AutoWired与@Resource

参考 : Qualifier - 搜索结果 - 知乎 Autowired和Resource的区别是什么&#xff1f; - 知乎 面试突击78&#xff1a;Autowired 和 Resource 有什么区别&#xff1f; - 掘金 目录 同一类型多个Bean报错问题 Resource注解 Resource的查找顺序 Resource注解实现依赖注入 Reso…

网课题库接口调用方法

网课题库接口调用方法 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点…

QT对象树机制

Qt提供了对象树机制&#xff0c;能够自动、有效的组织和管理继承自QObject的Qt对象。 每个继承自QObject类的对象通过它的对象链表&#xff08;QObjectList&#xff09;来管理子类对象&#xff0c;当用户创建一个子对象时&#xff0c;其对象链表相应更新子类对象信息&#xff0…

Docker快速入门

容器Docker技术的演进 1.曾经部署应用&#xff0c;使用物理机部署&#xff0c;这可能会因为不同应用所依赖的版本号不同&#xff0c;不得已购买一套全新的机器&#xff0c;所以成本高、部署慢、资源浪费、难以迁移和拓展、可能会被限定硬件厂商。 2.之后引入了VMVare&#xff…

使用JPA和Hibernate查询分页

介绍 受到我最近给出的StackOverflow答案的启发&#xff0c;我决定是时候写一篇关于使用JPA和Hibernate时查询分页的文章了。 在本文中&#xff0c;您将了解如何使用查询分页来限制 JDBC大小并避免获取不必要的数据。ResultSet 如何在#Hibernate中使用查询分页来限制 JDBC 结…

pytorch深度学习实战lesson32

第三十二课 分布式训练 这个是15年的时候沐神在 CMU 装的一个小机群&#xff0c;里面有30台机器&#xff0c;各机群有大概60块 GPU &#xff0c; 60块 GPU一共花了三四万美金的样子&#xff0c;就是大概20万人民币。沐神表示最亏的是当年他们跑了太多深度学习的实验&#xff0c…

C语言-const char*,char const*,char *const理解

By: Ailson Jack Date: 2022.12.04 个人博客&#xff1a;http://www.only2fire.com/ 本文在我博客的地址是&#xff1a;http://www.only2fire.com/archives/150.html&#xff0c;排版更好&#xff0c;便于学习&#xff0c;也可以去我博客逛逛&#xff0c;兴许有你想要的内容呢。…

传奇外网开服教程-GEE传奇外网全套架设教程

版本不同&#xff0c;所用的引擎和配置也会不同&#xff0c;但是架设方法都是大同小异&#xff0c;今天明杰给大家分享GEE引擎的外网架设教程。​ 需要准备的东西&#xff1a;DBC200版本&#xff0c;补丁&#xff0c;客户端&#xff0c;服务器&#xff0c;备案域名&#xff0c…

【Typora】Typora 新手入门参数配置记录

目录 写在前面 更改图片大小 更换高亮背景 更换主题 写在前面 最近发现一款记笔记的软件——Typora&#xff0c;极简清爽的外观一下子就把我给吸引住了&#xff0c;它支持Markdown 的格式记录&#xff0c;可以让笔记更加有条理、美观&#xff0c;至于 typora 的一些写作语法…

Android入门第43天-Activity与Activity间的互相传值

介绍 今天的课程会比较好玩&#xff0c;我们在之前的Service篇章中看到了一种putExtras和getExtras来进行activity与service间的传值。而恰恰这种传值其实也是Android里的通用传值法。它同样可以适用在activity与activity间传值。 Android中的传值 传单个值 传多个值 具体我…