Docker搭建Redis集群

Docker搭建Redis集群

一 、搭建Redis集群的优点

先说说单个redis的缺点:
1、单个redis具有不稳定性。当redis服务死机了或者redis服务被kill掉了,就没有可用的redis服务了。
2、单个redis的读写能力是有限的。
再根据单个redis服务的缺点谈谈redis集群的优点:
搭建redis集群一般都基于redis主从复制,即有一到多台Master服务、一到多台Slave服务。当redis服务死机了或者redis服务被kill掉了,Slave服务就会顶替原来的Master服务继续照常运行,并且数据不会丢失。
因为redis集群使得redis服务变多了,所以也提高了redis的读写能力。

二 、Redis文件配置

1、基本环境说明

up-040bd11c74db1e74198d152bd18ab884eea.png

2、创建一个网卡

#创建redis网卡,后面配置redis集群的时候可以指定配置IP(不创建网卡系统会自动分配IP 不会产生影响)
docker network create redis --subnet 172.12.0.0/16

up-e888e8f88b46f8a1854b8d3a1314d464b1a.png

3、使用docker拉取redis镜像

root@LAPTOP-CHOA4ICV:/home# docker pull redis
root@LAPTOP-CHOA4ICV:/home# docker images

up-d1fc7db0d8c0f9fcfa2bd16fc964b537e2f.png

4、配置6个redis服务

因为是6个redis服务,单个配起来的话很麻烦,所以我选择使用 shell脚本 进行配置, redis_config.sh 脚本代码如下:

#!/bin/bashfor port in $(seq 1 6); \
do \
mkdir -p /home/redis/node0${port}/conf
touch /home/redis/node0${port}/conf/redis.conf
cat << EOF >/home/redis/node0${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file node.conf
cluster-node-timeout 5000
cluster-announce-ip 172.12.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
  • cluster-enabled yes 开启集群功能
  • cluster-node-timeout 集群节点的超时时限
  • cluster-announce-ip 集群节点IP
  • cluster-announce-port 集群节点映射端口
  • cluster-announce-bus-port 集群节点总线端口

运行配置脚本:

chmod +x redis_config.sh
./redis_config.sh

up-01bc689ecf290d44aee5dd4ec30d660ba6e.png

查看当前目录结构:

#如果没有 tree 命令先安装 
apt-get install tree
root@LAPTOP-CHOA4ICV:/home/# tree
.
├── redis
│   ├── node01
│   │   ├── conf
│   │   │   └── redis.conf
│   │   └── data
│   │       ├── appendonlydir
│   │       │   ├── appendonly.aof.1.base.rdb
│   │       │   ├── appendonly.aof.1.incr.aof
│   │       │   └── appendonly.aof.manifest
│   │       └── node.conf
│   ├── node02
│   │   ├── conf
│   │   │   └── redis.conf
│   │   └── data
│   │       ├── appendonlydir
│   │       │   ├── appendonly.aof.1.base.rdb
│   │       │   ├── appendonly.aof.1.incr.aof
│   │       │   └── appendonly.aof.manifest
│   │       └── node.conf
│   ├── node03
│   │   ├── conf
│   │   │   └── redis.conf
│   │   └── data
│   │       ├── appendonlydir
│   │       │   ├── appendonly.aof.1.base.rdb
│   │       │   ├── appendonly.aof.1.incr.aof
│   │       │   └── appendonly.aof.manifest
│   │       └── node.conf
│   ├── node04
│   │   ├── conf
│   │   │   └── redis.conf
│   │   └── data
│   │       ├── appendonlydir
│   │       │   ├── appendonly.aof.2.base.rdb
│   │       │   ├── appendonly.aof.2.incr.aof
│   │       │   └── appendonly.aof.manifest
│   │       ├── dump.rdb
│   │       └── node.conf
│   ├── node05
│   │   ├── conf
│   │   │   └── redis.conf
│   │   └── data
│   │       ├── appendonlydir
│   │       │   ├── appendonly.aof.2.base.rdb
│   │       │   ├── appendonly.aof.2.incr.aof
│   │       │   └── appendonly.aof.manifest
│   │       ├── dump.rdb
│   │       └── node.conf
│   └── node06
│       ├── conf
│       │   └── redis.conf
│       └── data
│           ├── appendonlydir
│           │   ├── appendonly.aof.2.base.rdb
│           │   ├── appendonly.aof.2.incr.aof
│           │   └── appendonly.aof.manifest
│           ├── dump.rdb
│           └── node.conf
├── redis_config.sh
└── redis_start.sh

三、 Redis集群启动

1、启动6个redis服务

同上启动的话也是使用shell脚本来完成, redis_start.sh 脚本如下:

#!/bin/bashfor port in $(seq 1 6); \
do \
docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port} \
-v /home/redis/node0${port}/data:/data \
-v /home/redis/node0${port}/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.12.0.1${port} redis redis-server /etc/redis/redis.conf
done
  • -p 端口映射
  • -v 数据卷挂载
  • -d 后台运行
  • –net 指定网络
  • redis-server /etc/redis/redis.conf redis-server指向配置文件启动

运行启动脚本:

chmod +x redis_start.sh
./redis_start.sh

up-25c77b9d95fc7eca267fc810ae7fe075be2.png

2、创建集群

(1)首先随便进入一个redis容器

docker exec -it redis-1 sh

(2)启动集群服务

redis-cli --cluster create 172.12.0.11:6379 172.12.0.12:6379 172.12.0.13:6379 172.12.0.14:6379 172.12.0.15:6379 172.12.0.16:6379 --cluster-replicas 1

中途手动输入yes,看到这个就代表集群启动成功啦!!!

up-3c92db8b9e84c05f0838088877f4bfb73e7.png

四 、测试Redis集群服务

#redis-cli -c 为使用集群 不加-c则是单个redis服务
redis-cli -c#查看nodes
127.0.0.1:6379> cluster nodes

up-c775611749bd4079261c23447a79f28d41b.png

使用get set测试

set name SummerGao
get name

up-0dc2644420c3771c94df42d2fcab045c760.png

发现是由 172.12.0.12 处理的 get set 命令也就是 redis-2 ,此时我将 redis-2 容器停止,看从服务器是否能顶替 redis-2

docker stop redis-2

up-dfc7f4e2070f5d9d7d6cf360edd12f07f5b.png

再使用 get name 命令看是否能返回 SummerGao ?

up-444c7734979b6479a9d2a36580aaaed99d4.png

发现依然返回 SummerGao,但此次是由172.12.0.16执行的get命令,再查看nodes。

up-80fb0b160d73383e71bba4c66474b7ff540.png

此时发现redis-2节点已经fail ,原来的redis-6节点也从slave变成了master。证实了集群的高可用性!!!

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

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

相关文章

借助frp的xtcp+danted代理打通两边局域网p2p方式访问

最终效果 实现C内网所有设备借助c1内网代理访问B内网所有服务器 配置公网服务端A frps 配置frps.ini [common] # 绑定frp穿透使用的端口 bind_port 7000 # 使用token认证 authentication_method token token xxxx./frps -c frps.ini启动 配置service自启(可选) /etc/…

计算机视觉:比SAM快50倍的分割一切视觉模型FastSAM

目录 引言 1 FastSAM介绍 1.1 FastSAM诞生 1.2 模型算法 1.3 实验结果 2 FastSAM运行环境构建 2.1 conda环境构建 2.2 运行环境安装 2.3 模型下载 3 FastSAM运行 3.1 命令行运行 3.1.1 Everything mode 3.1.2 Text prompt 3.1.3 Box prompt (xywh) 3.1.4 Points p…

网络安全--wazuh环境配置及漏洞复现

目录 一、wazuh配置 二、wazuh案例复现 一、wazuh配置 1.1进入官网下载OVA启动软件 Virtual Machine (OVA) - Installation alternatives (wazuh.com) 1.2点击启动部署&#xff0c;傻瓜式操作 1.3通过账号&#xff1a;wazuh-user&#xff0c;密码&#xff1a;wazuh进入wazuh…

系统架构:数据库

文章目录 数据库设计关系代数规范化理论求候选键特殊函数依赖Armstrong公理范式无损分解 数据库设计 步骤产出说明1.根据数据要求和处理要求进行需求分析数据流图、数据字典、需求说明书等分析数据流向、数据详细含义等&#xff0c;分析具体需求2.对现实世界进行抽象&#xff0…

Day3: 前端路由(基础篇)

❝ 「目标」: 持续输出&#xff01;每日分享关于web前端常见知识、面试题、性能优化、新技术等方面的内容。 ❞ ❝ 「主要面向群体&#xff1a;」前端开发工程师&#xff08;初、中、高级&#xff09;、应届、转行、培训等同学 ❞ Day3-今日话题 想必大家经常会在面试中或者工作…

AD域组策略开机脚本客户端不执行:解决方法

本例实现的计算机开机重置本地管理员的密码 1、创建组策略 2、在AD域中添加脚本 3、注意脚本的路径&#xff1a;就是打开 Show Files 目录 4、本例建了2个脚本&#xff0c;一个是用来测试的 &#xff08;1&#xff09;CreateFile.ps1 文件&#xff1a;用来在D盘创建一个 file…

Linux权限

Linux中一切皆文件&#xff0c;那么文件就应该有相对于的类型&#xff0c;而在Linux当中&#xff0c;类型不是直接看后缀来决定的。 -普通文件、文本、可执行、归档文件等d目录b块设备、block、磁盘c字符设备、键盘、显示器p管道文件s网络socket文件l链接文件 link 然后后面的九…

C++入门:引用是什么

目录 1.引用的概念 2.引用的特征 3.常引用 4.引用使用场景 5.传值&#xff0c;传引用效率比较 6.引用与指针的区别 1.引用的概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空 间&#xff0c;它和它引用…

Can‘t find end of central directory : is this a zip file ? at XMLHttpRequest

导出woed出现这个报错,原因其实很简单,路径写错了, 这个word首先必须是docx格式,然后必须放在public文件包下 如果放在public文件包下还没有用,则放在public包下 参考帖子: https://www.cnblogs.com/hejun26/p/13647927.html

数据结构——栈和队列

栈和队列的建立 前言一、栈1.栈的概念2.栈的实现3.代码示例&#xff08;1&#xff09;Stack.h&#xff08;2&#xff09;Stack.c&#xff08;3&#xff09;Test.c&#xff08;4&#xff09;运行结果&#xff08;5&#xff09;完整代码演示 二、队列1.队列的概念2.队列的实现3.代…

容器和云原生(三):kubernetes搭建与使用

目录 单机K8S docker containerd image依赖 kubeadm初始化 验证 crictl工具 K8S核心组件 上文安装单机docker是很简单docker&#xff0c;但是生产环境需要多个主机&#xff0c;主机上启动多个docker容器&#xff0c;相同容器会绑定形成1个服务service&#xff0c;微服务…

在vue中使用codemirror格式化JSON

1. 下载指定版本的包 (避免引发不必要的错误) yarn add codemirror^5.64.02. 导入需要的文件 import CodeMirror from codemirrorimport codemirror/addon/lint/lint.cssimport codemirror/addon/fold/foldgutter.cssimport codemirror/lib/codemirror.cssimport codemirror/t…

【C++/C 实现球球大作战】

目录 1.引言2.游戏设计&#xff1a;概述游戏的玩法和操作方式。3.游戏实现&#xff08;1&#xff09;函数 GameInit() 初始化游戏的函数。&#xff08;2&#xff09;函数 GameDraw() 用于绘制游戏场景的函数。&#xff08;3&#xff09;函数 keyControl(int speed) 负责处理键盘…

《动手学深度学习》-20卷积层里的填充和步幅

沐神版《动手学深度学习》学习笔记&#xff0c;记录学习过程&#xff0c;详细的内容请大家购买书籍查阅。 b站视频链接 开源教程链接 卷积层里的填充和步幅 应用5x5大小的卷积核&#xff0c;输入32x32&#xff0c;输出会变为28x28。 更大的卷积核更快地减小输出大小。 导致网…

鲁图中大许少辉博士八一新书《乡村振兴战略下传统村落文化旅游设计》山东省图书馆典藏

鲁图中大许少辉博士八一新书《乡村振兴战略下传统村落文化旅游设计》山东省图书馆典藏

ubuntu 安装 postgresql以及 wal回滚

安装 sudo apt install postgresql postgresql-contrib设置远程连接 修改/etc/postgresql/12/main/postgresql.conf **将listen_addresses 改成 ***修改/etc/postgresql/12/main/pg_hba.conf 找到如下信息 #IPv4 local connections: 修改为 host all all 0.0.0.0/0 md5 重启…

Git问题:解决“ssh:connect to host github.com port 22: Connection timed out”

操作系统 Windows11 使用Git IDEA 连接方式&#xff1a;SSH 今天上传代码出现如下报错&#xff1a;ssh:connect to host github.com port 22: Connection timed out 再多尝试几次&#xff0c;依然是这样。 解决 最终发现两个解决方案&#xff1a;&#xff08;二选一&#xf…

反转链表II

江湖一笑浪滔滔&#xff0c;红尘尽忘了 题目 示例 思路 链表这部分的题&#xff0c;不少都离不开单链表的反转&#xff0c;参考&#xff1a;反转一个单链表 这道题加上哨兵位的话会简单很多&#xff0c;如果不加的话&#xff0c;还需要分情况一下&#xff0c;像是从头节点开始…

淘宝Tmall1688京东API接口系列,海量数据值得get!

Api接口也就是所谓的应用程序接口&#xff0c;api接口的全称是Application Program Interface&#xff0c;通过API接口可以实现计算机软件之间的相互通信&#xff0c;开发人员可以通过API接口程序开发应用程序&#xff0c;可以减少编写无用程序&#xff0c;减轻编程任务&#x…

HJ53 杨辉三角的变形

以上三角形的数阵&#xff0c;第一行只有一个数1&#xff0c;以下每行的每个数&#xff0c;是恰好是它上面的数、左上角数和右上角的数&#xff0c;3个数之和&#xff08;如果不存在某个数&#xff0c;认为该数就是0&#xff09;。 求第n行第一个偶数出现的位置。如果没有偶数…