docker - [14] redis集群部署
本章节是在一个服务器上进行演示
一、准备工作
(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集群部署的更多相关文章
- Docker | redis集群部署实战
前面已经简单熟悉过redis的下载安装使用,今天接着部署redis集群(cluster),简单体会一下redis集群的高可用特性. 环境准备 Redis是C语言开发,安装Redis需要先将Redis的 ...
- docker 实现redis集群搭建
摘要:接触docker以来,似乎养成了一种习惯,安装什么应用软件都想往docker方向做,今天就想来尝试下使用docker搭建redis集群. 首先,我们需要理论知识:Redis Cluster是Re ...
- Redis集群部署及命令
一.简介 redis集群是一个无中心的分布式Redis存储架构,可以在多个节点之间进行数据共享,解决了Redis高可用.可扩展等问题. redis集群提供了以下两个好处: 将数据自动切分(split) ...
- Docker Swarm redis 集群搭建
Docker Swarm redis 集群搭建 环境1: 系统:Linux Centos 7.4 x64 内核:Linux docker 3.10.0-693.2.2.el7.x86_64 Docke ...
- 基于Docker的redis集群搭建
Redis集群官方介绍:http://www.redis.cn/topics/cluster-tutorial.html 基于Docker搭建Redis集群 环境:6个节点,三主三从 制作Redis镜 ...
- Redis集群部署-windows
Redis集群部署-windows 前言 为了能体验一下部署Redis集群是一种怎么样的体验,所一边做一边写了这篇记录. 1.准备 从这里下载windows服务端 https://github.com ...
- Redis集群部署文档(Ubuntu15.10系统)
Redis集群部署文档(Ubuntu15.10系统)(要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如 ...
- Redis集群部署3.0
我用的Mac的终端 ------------------------- 1.Redis简介 centos(5.4) Redis是一个key-value存储系统.和Memcached类似,但是解决了断 ...
- Docker学习-Kubernetes - 集群部署
Docker学习 Docker学习-VMware Workstation 本地多台虚拟机互通,主机网络互通搭建 Docker学习-Docker搭建Consul集群 Docker学习-简单的私有Dock ...
- Redis集群部署与维护
Redis集群部署与维护 目录: 一. 集群架构 二. 集群部署 1. 创建redis-cluster目录 2. 编译redis 3. 编辑redis配置文件 4. 配置redis集群 5. redi ...
随机推荐
- RPM 与 YUM
RPM 与 YUM rpm 包的管理 rpm 用于互联网下载包的打包及安装工具,它包含在某些 Linux 分发版中.它生成具有.RPM 扩展名的文件.RPM是 RedHat Package Manag ...
- 痞子衡嵌入式:MCUXpresso IDE下C++源文件中嵌套定义的复合数据类型命名空间认定
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是MCUXpresso IDE下C++源文件中嵌套定义的复合数据类型命名空间认定. 痞子衡之前写过一篇文章 <MCUXpresso ...
- 实用干货分享(5)- Hive存储格式及压缩算法测试比对分析
编辑 Hive文件存储格式及优缺点 textfile 默认的文件格式,行存储.建表时不指定存储格式即为textfile,导入数据时把数据文件拷贝至hdfs不进行处理. 优点:最简单的数据格式,便 ...
- 【C#】【桌面应用开发】拖拽文件到文本框获得所拖拽文件的路径
步骤1:设置文本框属性 设置文本框属性,将属性AllowDrop改为True 使其允许拖拽文件 步骤2: 在控件事件管理中双击DragEnter,添加事件 private void Form_sett ...
- idea 2023.1.2 破解/激活
参考:(感谢作者提供的破解教程,谢谢) IntelliJ IDEA 2023.1.1最新激活破解教程(永久激活,亲测有效) - 异常教程 (exception.site) 下载idea : 链接:ht ...
- 解决docker 容器设置中文语言包出现的问题_docker
https://www.anquanclub.cn/5821.html 这篇文章主要介绍了解决docker 容器设置中文语言包出现的问题,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 ...
- 浅谈 IoT 如何助力制造业企业实现数字化落地
物联网作为新一代信息技术的重要组成部分,正在加速渗透到各行各业,成为经济社会数字化转型的关键支撑.根据中商产业研究院发布的<2022-2027 年中国物联网市场需求预测及发展趋势前瞻报告> ...
- Mybatis-plus 简单使用
Mybatis-plus 特点介绍: 1.无侵入:只做增强不做改变,引入它不会对现有工程产生影响 2.强大的CRUD操作:内置通用Mapper.Service,仅仅通过少量配置即可实现单表大部分CRU ...
- Qt开源作品27-鼠标定位十字线
一.前言 上次有个群友在咨询这个问题,如何用Qt绘制一个鼠标定位的十字线,花了两分钟整了个,最没有含金量的一个demo,就是用drawline绘制了两条线,这个效果在经典的CAD软件中很常用,还有一些 ...
- 成为百万架构师的第一课:设计模式:Spring中的设计模式
本文原文地址 Spring5 源码分析 一·.Spring 中常用的设计模式 1.我们通常说的23种经典设计模式: 分类 设计模式 创建型 工厂方法(Factory Method).抽象工厂模式(Ab ...