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.rhkb.cn/news/109914.html

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

相关文章

计算机视觉 – Computer Vision | CV

计算机视觉为什么重要&#xff1f; 人的大脑皮层&#xff0c; 有差不多 70% 都是在处理视觉信息。 是人类获取信息最主要的渠道&#xff0c;没有之一。 在网络世界&#xff0c;照片和视频&#xff08;图像的集合&#xff09;也正在发生爆炸式的增长&#xff01; 下图是网络上…

LVS集群 (四十四)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、集群概述 1. 负载均衡技术类型 2. 负载均衡实现方式 二、LVS结构 三、LVS工作模式 四、LVS负载均衡算法 1. 静态负载均衡 2. 动态负载均衡 五、ipvsadm命令详…

【分析绘图】R语言实现一些常见的绘图

微生信-在线绘图网站 线性图 library(ggplot2)x <- rnorm(100, 14, 5) # rnorm(n, mean 0, sd 1) y <- x rnorm(100, 0, 1) ggplot(data NULL, aes(x x, y y)) # 开始绘图geom_point(color "darkred") # 添加点annotate("text",x 13,…

Mybatis小记

目录 Mybatis第一个程序 xml文件 测试类 错误排查 Mybatis第一个程序 1.搭建实验数据库 2.导入MyBatis相关jar包 3.编写MyBatis核心配置文件 4.编写MyBatis工具类 5.创建实体类、 6.编写Mapper接口类 7.编写Mapper.xml配置文件 8.编写测试类 对象传参只引用需要的属性就可…

springcloud3 GateWay章节-Nacos+gateway(跨域,filter过滤等5

一 常用工具类 1.1 结构 1.2 跨域 Configuration public class CorsConfig {Beanpublic CorsWebFilter corsFilter() {CorsConfiguration config new CorsConfiguration();config.addAllowedMethod("*");config.addAllowedOrigin("*");config.addAllowe…

lua的函数

1.一个示例实现列表的元素的求和 [root]# more funcAdd.lua function add(a)local sum 0for i 1,#a dosum sum a[i]endreturn sum enda {1,2,3,4,5,6}local sum add(a)print(sum)

Flask入门一 ——虚拟环境及Flask安装

Flask入门一 ——虚拟环境及Flask安装 在大多数标准中&#xff0c;Flask都算是小型框架&#xff0c;小到可以称为“微框架”&#xff0c;但是并不意味着他比其他框架功能少。Flask自开发伊始就被设计为可扩展的框架。Flask具有一个包含基本服务的强健核心&#xff0c;其他功能…

大模型理解之CLIP

前言 2021年2月份&#xff0c;CLIP模型被提出&#xff0c;想法很简单&#xff0c;性能高效&#xff0c;而且具备很好的泛化性。我在这里简单谈论下我对CLIP模型的理解&#xff0c;以及发现的一些问题。 我是在沐神的视频中了解的CLIP, 里面提到CLIP最大的贡献在于打破了固定类…

ELK之LogStash介绍及安装配置

一、logstash简介 集中、转换和存储数据 Logstash 是免费且开放的服务器端数据处理管道&#xff0c;能够从多个来源采集数据&#xff0c;转换数据&#xff0c;然后将数据发送到您最喜欢的“存储库”中。 Logstash 能够动态地采集、转换和传输数据&#xff0c;不受格式或复杂度的…

10.Oracle中decode函数

【函数格式】&#xff1a; decode ( expression, condition_01, result_01, condition_02, result_02, ......, condition_n, result_n, result_default) 【函数说明】&#xff1a; 若表达式expression值与condition_01值匹配&#xff0c;则返回result_01&#xff0c;…

[ DPU / SmartNIC/ 网卡 ]系统级的测试验证

开局一张图&#xff0c;其他慢慢来编 信雅纳DPU测试解决方案荣获第三届DPU峰会的“匠芯技术奖” 看完这张&#xff0c;小编再送一张&#xff1a;&#xff1a;&#xff1a; 网卡进化 更智能的加速卡SmartNIC/DPU 例如&#xff0c;将部分网络协议处理的功能卸载到 DPU 网卡&am…

初试Eureka注册中心

Eureka是spring cloud中的一个负责服务注册与发现的组件。遵循着CAP理论中的A(可用性)P(分区容错性)。一个Eureka中分为eureka server和eureka client。其中eureka server是作为服务的注册与发现中心。 搭建eureka服务 引入eureka依赖 引入SpringCloud为eureka提供的starter依…

Arcgis colorRmap

arcgis中colorRmap对应的名称&#xff1a; 信息来源&#xff1a;https://developers.arcgis.com/documentation/common-data-types/raster-function-objects.htm 在arcpy中使用方法&#xff1a; import arcpy cr arcpy.mp.ColorRamp("Yellow to Red")python中 ma…

Python“牵手”淘宝商品列表数据,关键词搜索淘宝API接口数据,淘宝API接口申请指南

淘宝平台API接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范&#xff0c;淘宝API接口是指通过编程的方式&#xff0c;让开发者能够通过HTTP协议直接访问淘宝平台的数据&#xff0c;包括商品信息、店铺信息、物流信息等&#xff0c;从而实现淘宝平台…

【面试题】MVC、MVP与MVVM模式是什么?

MVC模式 MVC是应用最广泛的软件架构之一&#xff0c;一般MVC分为&#xff1a; Model&#xff08; 模型 &#xff09;、Controller&#xff08; 控制器 &#xff09;、View&#xff08; 视图 &#xff09;。 这主要是基于分层的目的&#xff0c;让彼此的职责分开。View 一般…

leetcode875. 爱吃香蕉的珂珂(java)

二分查找 爱吃香蕉的珂珂二分查找 上期经典 爱吃香蕉的珂珂 难度 - 中等 LC - 875.爱吃香蕉的珂珂 珂珂喜欢吃香蕉。这里有 n 堆香蕉&#xff0c;第 i 堆中有 piles[i] 根香蕉。警卫已经离开了&#xff0c;将在 h 小时后回来。 珂珂可以决定她吃香蕉的速度 k &#xff08;单位&…

Apache StreamPark系列教程第一篇——安装和体验

一、StreamPark介绍 实时即未来,在实时处理流域 Apache Spark 和 Apache Flink 是一个伟大的进步,尤其是Apache Flink被普遍认为是下一代大数据流计算引擎, 我们在使用 Flink & Spark 时发现从编程模型, 启动配置到运维管理都有很多可以抽象共用的地方, 我们将一些好的经验…

Unity关键概念

Unity是一款跨平台的游戏引擎和开发工具&#xff0c;用于创建2D和3D游戏、交互式内容和应用程序。它提供了一个强大的开发环境&#xff0c;使开发者能够轻松地设计、开发和部署高质量的游戏和应用程序。 以下是Unity的几个关键概念&#xff1a; 游戏对象&#xff08;Game Obj…

基于Visual studio创建API项目

API&#xff08;英文全称&#xff1a;Application Programming Interface,中文&#xff1a;应用程序编程接口&#xff09; 为什么要 通过API接口可以与其他软件实现数据相互通信&#xff0c;API这项技术能够提高开发效率。 本文是基于vs2017 .net平台搭建API。希望可以帮助到学…

法律小程序开发:让法律咨询更便捷

在现代社会&#xff0c;法律咨询服务越来越受到人们的重视和需求。为了方便用户预约法律咨询&#xff0c;很多律所都开始使用小程序来提供在线预约服务。那么&#xff0c;如何制作一款律所预约小程序呢&#xff1f; 首先&#xff0c;我们可以选择乔拓云网作为制作小程序的平台。…