本章节是在一个服务器上进行演示

一、准备工作

(1)创建redis集群使用的网络:redis-net

docker network create redis-net --subnet 172.38.0.0/16

(2)查看docker网络:docker network ls

(3)通过脚本创建6个redis配置

for port in $(seq 1 6); \
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF >/mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done

二、启动redis的容器 & 集群

(1)启动容器

docker run -p 6371:6379 -p 16371:16379 --name redis-1 \
-v /mydata/redis/node-1/data:/data \
-v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis-net --ip 172.38.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

# 启动第二个
docker run -p 6372:6379 -p 16372:16379 --name redis-2 \
-v /mydata/redis/node-2/data:/data \
-v /mydata/redis/node-2/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis-net --ip 172.38.0.12 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
# 启动第三个
docker run -p 6373:6379 -p 16373:16379 --name redis-3 \
-v /mydata/redis/node-3/data:/data \
-v /mydata/redis/node-3/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis-net --ip 172.38.0.13 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
# ...

(2)要启动6个,还是用shell脚本启动吧

#!/bin/bash

# Step1:记录脚本开始执行时间
start_time=$(date +%s) # Step2:查看是否有存活的redis容器,如果有存活的redis容器则将其清除掉.
redis_container_count=$(docker ps -a | grep -ci redis) if [ "$redis_container_count" -gt 0 ]; then
echo "There are $redis_container_count Redis containers. Proceeding to remove them..."
docker rm -f $(docker ps -aq --filter name=redis)
echo "Redis containers have been removed."
else
echo "No Redis containers found. Nothing to remove.Proceeding to start redis container..."
fi # Step3:启动redis容器
for no in $(seq 1 6);do
container_id=$(docker run -p 637${no}:6379 -p 1637${no}:16379 --name redis-${no} \
-v /mydata/redis/node-${no}/data:/data \
-v /mydata/redis/node-${no}/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis-net --ip 172.38.0.1${no} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf)
echo "Started Redis container redis-${no} with ID ${container_id}"
done # Step4:记录脚本结束执行时间
end_time=$(date +%s) # Step5:计算并输出总耗时
elapsed_time=$((end_time - start_time))
echo "Script execution completed at $(date).Total elapsed time: ${elapsed_time} seconds." # Step6:当前日期及时间
current_time=$(date +'%Y-%m-%d %H:%M:%S')
echo "Current date and time: ${current_time}."

(3)进入容器不能使用/bin/bash

(4)创建redis集群

redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1

(5)查看集群信息:cluster info

(6)查看集群节点信息:cluster nodes

但是第一次配置的时候,发现六个都是master!!

Q:为什么都是显示master?slave呢?

A:在启动redis集群时,redis-cli cluster create时少了--cluster-replicas 1

三、测试

(1)设置值:set a b,可以看到当前redis是哪个节点:172.38.0.13

(2)另外开个ssh会话窗口B,停掉redis集群主机的容器:docker stop [主机容器名]

(3)在之前的会话窗口执行:get a

可以看到master已经切换到redis-4,而redis-3则显示fail

四、删除redis集群

(1)删除redis的容器:docker rm -f $(docker ps -aq --filter name=redis)

(2)清除数据和配置文件(位置:/mydata/redis

(3)重新启动redis的容器 (^U^)ノ点此跳转

— 要养成终身学习的习惯 —

docker - [14] redis集群部署的更多相关文章

  1. Docker | redis集群部署实战

    前面已经简单熟悉过redis的下载安装使用,今天接着部署redis集群(cluster),简单体会一下redis集群的高可用特性. 环境准备 Redis是C语言开发,安装Redis需要先将Redis的 ...

  2. docker 实现redis集群搭建

    摘要:接触docker以来,似乎养成了一种习惯,安装什么应用软件都想往docker方向做,今天就想来尝试下使用docker搭建redis集群. 首先,我们需要理论知识:Redis Cluster是Re ...

  3. Redis集群部署及命令

    一.简介 redis集群是一个无中心的分布式Redis存储架构,可以在多个节点之间进行数据共享,解决了Redis高可用.可扩展等问题. redis集群提供了以下两个好处: 将数据自动切分(split) ...

  4. Docker Swarm redis 集群搭建

    Docker Swarm redis 集群搭建 环境1: 系统:Linux Centos 7.4 x64 内核:Linux docker 3.10.0-693.2.2.el7.x86_64 Docke ...

  5. 基于Docker的redis集群搭建

    Redis集群官方介绍:http://www.redis.cn/topics/cluster-tutorial.html 基于Docker搭建Redis集群 环境:6个节点,三主三从 制作Redis镜 ...

  6. Redis集群部署-windows

    Redis集群部署-windows 前言 为了能体验一下部署Redis集群是一种怎么样的体验,所一边做一边写了这篇记录. 1.准备 从这里下载windows服务端 https://github.com ...

  7. Redis集群部署文档(Ubuntu15.10系统)

    Redis集群部署文档(Ubuntu15.10系统)(要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如 ...

  8. Redis集群部署3.0

    我用的Mac的终端 ------------------------- 1.Redis简介 centos(5.4)  Redis是一个key-value存储系统.和Memcached类似,但是解决了断 ...

  9. Docker学习-Kubernetes - 集群部署

    Docker学习 Docker学习-VMware Workstation 本地多台虚拟机互通,主机网络互通搭建 Docker学习-Docker搭建Consul集群 Docker学习-简单的私有Dock ...

  10. Redis集群部署与维护

    Redis集群部署与维护 目录: 一. 集群架构 二. 集群部署 1. 创建redis-cluster目录 2. 编译redis 3. 编辑redis配置文件 4. 配置redis集群 5. redi ...

随机推荐

  1. RPM 与 YUM

    RPM 与 YUM rpm 包的管理 rpm 用于互联网下载包的打包及安装工具,它包含在某些 Linux 分发版中.它生成具有.RPM 扩展名的文件.RPM是 RedHat Package Manag ...

  2. 痞子衡嵌入式:MCUXpresso IDE下C++源文件中嵌套定义的复合数据类型命名空间认定

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是MCUXpresso IDE下C++源文件中嵌套定义的复合数据类型命名空间认定. 痞子衡之前写过一篇文章 <MCUXpresso ...

  3. 实用干货分享(5)- Hive存储格式及压缩算法测试比对分析

    ​ ​编辑 Hive文件存储格式及优缺点 textfile 默认的文件格式,行存储.建表时不指定存储格式即为textfile,导入数据时把数据文件拷贝至hdfs不进行处理. 优点:最简单的数据格式,便 ...

  4. 【C#】【桌面应用开发】拖拽文件到文本框获得所拖拽文件的路径

    步骤1:设置文本框属性 设置文本框属性,将属性AllowDrop改为True 使其允许拖拽文件 步骤2: 在控件事件管理中双击DragEnter,添加事件 private void Form_sett ...

  5. idea 2023.1.2 破解/激活

    参考:(感谢作者提供的破解教程,谢谢) IntelliJ IDEA 2023.1.1最新激活破解教程(永久激活,亲测有效) - 异常教程 (exception.site) 下载idea : 链接:ht ...

  6. 解决docker 容器设置中文语言包出现的问题_docker

    https://www.anquanclub.cn/5821.html 这篇文章主要介绍了解决docker 容器设置中文语言包出现的问题,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 ...

  7. 浅谈 IoT 如何助力制造业企业实现数字化落地

    物联网作为新一代信息技术的重要组成部分,正在加速渗透到各行各业,成为经济社会数字化转型的关键支撑.根据中商产业研究院发布的<2022-2027 年中国物联网市场需求预测及发展趋势前瞻报告> ...

  8. Mybatis-plus 简单使用

    Mybatis-plus 特点介绍: 1.无侵入:只做增强不做改变,引入它不会对现有工程产生影响 2.强大的CRUD操作:内置通用Mapper.Service,仅仅通过少量配置即可实现单表大部分CRU ...

  9. Qt开源作品27-鼠标定位十字线

    一.前言 上次有个群友在咨询这个问题,如何用Qt绘制一个鼠标定位的十字线,花了两分钟整了个,最没有含金量的一个demo,就是用drawline绘制了两条线,这个效果在经典的CAD软件中很常用,还有一些 ...

  10. 成为百万架构师的第一课:设计模式:Spring中的设计模式

    本文原文地址 Spring5 源码分析 一·.Spring 中常用的设计模式 1.我们通常说的23种经典设计模式: 分类 设计模式 创建型 工厂方法(Factory Method).抽象工厂模式(Ab ...