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

一、准备工作

(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. VTK 正交投影 透视投影

    VTK默认透视投影(近大远小),如果想改成正交投影(平行投影,远近一样): 1.调用vtkCamera的ParallelProjectionOn函数开启 2.通过vtkCamera的SetParall ...

  2. 所有 HTML attribute - prop 对照表

    attr global tags prop aria-activedescendant true all   aria-atomic true all   aria-autocomplete true ...

  3. django推导流程

    目录 一.纯手撸web框架 二.基于wsgiref模块 三.代码封装优化 四.动静态网页 五.jinja2模块 六.前端.后端.数据库三者联动 一.纯手撸web框架 1.web框架的本质 理解1:连接 ...

  4. 将现有的系统环境文件打包成Docker镜像文件

    一.现有A系统Centos7操作: 备注:A系统里最好不安装Docker,否则会报错 卸载不必要软件包 yum remove -y iwl* *firmware* --exclude=kernel-f ...

  5. Qt开发经验小技巧246-250

    在编写类中有时候需要对变量进行赋值和取值,这时候一般用 setxxx.getxxx 之类的函数进行处理,而且往往里面就一行代码,这时候你可能会思考为何不直接将变量改成public暴露出来使用,还可以省 ...

  6. Qt数据库应用19-图片转pdf

    一.前言 用户的需求真的是千奇百怪,刚做完不同页面横向纵向排版的需求,又来个需要图片转pdf的需求,提供静态函数直接使用. 经过这么些年的社会的毒打,我的原则是:用户是上帝和大爷,尽量站在用户的角度换 ...

  7. Datawhale冬令营第二期!😀Task 1

    Datawhale冬令营第二期-Task1:动手体验AI辅助编程:番茄钟 对应链接:https://www.datawhale.cn/activity/116/23/94?rankingPage=1 ...

  8. 安装Rational rose软件简单教程

    安装Rational rose软件简单教程 一.下载文件 百度云盘下载链接:https://pan.baidu.com/s/1QWmTgxKlQtE5flP7dXIF5w 提取码:wjnq 二.装虚拟 ...

  9. ofd文件拆分合并思路探索 -- 附下载程序

      前言  ofd文件拆分合并会在多个场合用到,但市面上此类工具并不多.拆分和合并虽然为两个功能,但从编程角度考虑,其处理思路有相同之处.文章就以合并为例,讲一下处理思路.作者也写了一个拆分合并小工具 ...

  10. CDS标准视图:银行对账单抬头 I_BankStatement

    视图名称:银行对账单抬头 I_BankStatement 视图类型:基础 视图代码: 点击查看代码 事务代码:FF67/ 视图结构: 字段名称 技术名称 短代码 BANKSTATEMENTSHORTI ...