当前位置: 首页 > news >正文

05- redis集群模式搭建(上) (包含云服务器[填坑])

目录

1. 准备环境: 

2. 简介:

-> 2.1 前言:

-> 2.2 Redis集群架构实现了对redis的水平扩容

-> 2.3 redis cluster集群原理

3.  搭建后特别需要注意的问题

->3.1 [重点]: 如果一个服务出现故障: 是否可以继续提供服务???

---> 3.1.1 如果集群中故障redis服务存在主从服务,

---> 3.1.2 如果redis集群中没有按官方推荐的去做主从备份

-> 3.2 理解: 

---> 3.2.1 修改配置 redis.conf

-> 3.3 单服务器部署多个节点是否会影响带宽

4. 实际操作

-> 4.1 创建文件夹

-> 4.2 进入目录

-> 4.3 创建模板 

 --> 4.3.1 文件输入内容

---> 4.3.2 模板注释

---> 4.3.3 特别注意宿主机ip

-> 4.4 在当前目录下操作

-> 4.5 创建docker 容器

-> 4.6 进入redis-8010容器

-> 4.7 创建redis-cluster集群配置

 -> 4.8 搭建成功了, 进入集群redis查看(内网ip)

-> 4.9 测试,如图所示, 也就解释了上述问题

5.出现异常, 执行下面重新来过

下一篇: java使用redis集群进行操作


1. 准备环境: 

云服务器<虚拟机也可以>, centos7.9, docker-ce , 有redis镜像

2. 简介:

-> 2.1 前言(云服务器请与06配合使用):

===> 传送门: 06-redis集群模式(中) 项目测试的云服务ip变内网等(解决大多数问题)

主从模式 哨兵模式, 都会在集群模式中体现出来, 官方推荐集群最少三主三从 6个redis服务

-> 2.2 Redis集群架构实现了对redis的水平扩容

即启动N个redis节点,将整个数据分布存储在这N个redis节点中,每个节点存储总数据的1/N。redis集群通过分区提供一定程度的可用性,即使集群中有一部分节点失效或无法进行通讯,集群也可以继续处理命令请求。

-> 2.3 redis cluster集群原理

redis cluster集群默认16384个hash槽,集群搭建成功之后,需要给每一个主节点分配hash槽。当外部数据插入的时候,会对key进行crc16然后对16384取模,这样就计算出哪个节点对该数据进行管理。创建集群时就已经分配哈希槽, 如果采用的3主3从的结构,主从模式通过哨兵模式,实现类主服务故障自动切换, 进而实现类服务的高可用

3.  搭建后特别需要注意的问题

->3.1 [重点]: 如果一个服务出现故障: 是否可以继续提供服务???

---> 3.1.1 如果集群中故障redis服务存在主从服务,

那么访问的时候回访问从redis服务,集群正常运行, 参考主从哨兵机制,

重新选举master 一般30秒

---> 3.1.2 如果redis集群中没有按官方推荐的去做主从备份

其中有一台redis服务故障挂掉,emm, 会导致整个集群则都不能使用,因为Redis集群的时候每一个Redis节点保存的数据不一样,如果一个节点有问题则整个数据就缺失。

-> 3.2 理解: 

假设是一个云平台, 每个数据存在不同服务里 其中正好存你的数据服务gg了, 并且还没从服务重新选举, emm 其他人没影响<需要做一下配置> , 你的数据查不出来了

---> 3.2.1 修改配置 redis.conf

取决于redis.conf中的参数cluster-require-full-coverage
如果某一段插槽的主从都挂掉,而cluster-require-full-coverage为yes ,整个集群都挂掉
如果某一段插槽的主从都挂掉,而cluster-require-full-coverage为no ,  该插槽数据全都不能使用,也无法存储。

-> 3.3 单服务器部署多个节点是否会影响带宽

相当会了 详细介绍引用他人文章了: Redis Cluster集群优势劣势已经介绍 

4. 实际操作

-> 4.1 创建文件夹

mkdir -p /usr/local/src/docker/redis-cluster

-> 4.2 进入目录

cd /usr/local/src/docker/redis-cluster

-> 4.3 创建模板 

vim redis-cluster.tmpl

 --> 4.3.1 文件输入内容

port ${PORT}
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 10.0.4.*
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes
bind 0.0.0.0
protected-mode no

---> 4.3.2 模板注释

port: 节点端口(对外通信)

cluster-enabled: 开启集群

cluster-config-file: 集群的配置是 nodes.conf 

cluster-node-timeout:连接超时时间5000毫秒

cluster-announce-ip:宿主机ip 

cluster-announce-port:集群节点映射端口 

cluster-announce-bus-port:集群总线端口

appendonly:持久化模式 aof是否开启

---> 4.3.3 特别注意宿主机ip

1 可以是内网ip(如果想远端必须是公网ip)

ps: 但是公网ip需要进行下面操作: ===> 传送门:  06-redis集群模式(中) 项目测试的云服务ip变内网等(解决大多数问题)

2 可以使用域名解析

3 不可以使用172.0.0.1 

-> 4.4 在当前目录下操作

for port in $(seq 8010 8015); \
do \mkdir -p ./${port}/conf  \&& PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \&& mkdir -p ./${port}/data; \
done

解释一下: shell脚本 循环 参数传递 生成配置文件 

-> 4.5 创建docker 容器

for port in $(seq 8010 8015); \
do \docker run -it -d -p ${port}:${port} -p 1${port}:1${port} \--privileged=true -v /usr/local/src/docker/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \--privileged=true -v /usr/local/src/docker/redis-cluster/${port}/data:/data \--restart always --name redis-${port} --net redis-net \--sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; \
done

-> 4.6 进入redis-8010容器

docker exec -it redis-8010 bash

-> 4.7 创建redis-cluster集群配置

redis-cli --cluster create 10.0.4.*:8010 10.0.4.*:8011 10.0.4.*:8012 10.0.4.*:8013 10.0.4.*:8014 10.0.4.*:8015 --cluster-replicas 1

 -> 4.8 搭建成功了, 进入集群redis查看(内网ip)

redis-cli -c -h 10.0.4.* -p 8010

cluster nodes   #查看集群节点数
cluster info #查看集群基本信息

-> 4.9 测试,如图所示, 也就解释了上述问题

5.出现异常, 执行下面重新来过

  批量删除容器 批量删除目录挂载

docker ps -a | grep -i "redis-801*" | awk '{print $1}' | xargs docker stop
docker ps -a | grep -i "redis-801*" | awk '{print $1}' | xargs docker rm -f#shell脚本 删除redis容器
for i in $(seq 8010 8015); \
do docker rm -f redis-${i}; \
done;rm -rf 801{0..5}/conf/redis.conf
rm -rf 801{0..5}

[留下拓展, 正式生产环境 配置密码等配置, 后续补充]

预告06篇: 06-redis集群模式(中) 项目测试的云服务ip变内网等(解决大多数问题)

预告07篇: java使用redis集群进行操作, 常规配置解释等

相关文章:

05- redis集群模式搭建(上) (包含云服务器[填坑])

目录 1. 准备环境: 2. 简介: -> 2.1 前言: -> 2.2 Redis集群架构实现了对redis的水平扩容 -> 2.3 redis cluster集群原理 3. 搭建后特别需要注意的问题 ->3.1 [重点]: 如果一个服务出现故障: 是否可以继续提供服务??? ---> 3.1.1 如果集群中故障re…...

【AI】YOLOV1原理详解

AI学习目录汇总 0、前言 YOLOv1~3作者是约瑟夫雷德蒙&#xff08;Joseph Chet Redmon&#xff09;&#xff0c;他的网站&#xff1a;https://pjreddie.com/ YOLOv1网站&#xff1a;https://pjreddie.com/darknet/yolov1/ YOLOv2网站&#xff1a;https://pjreddie.com/darknet…...

提高APP安全性的必备加固手段——深度解析代码混淆技术

APP 加固方式 Android APP 加固是优化 APK 安全性的一种方法&#xff0c;常见的加固方式有混淆代码、加壳、数据加密、动态加载等。下面介绍一下 Android APP 加固的具体实现方式。 混淆代码&#xff1a; 使用 ProGuard 工具可以对代码进行混淆&#xff0c;使得反编译出来的代…...

想让行车记录仪协助道路病害自动化检测?可以!

针对【RGB3DS道路表观病害信息智慧检测系统】&#xff0c;我们着重介绍过其与道路检测车做集成预装或者处理道路检测车数据的极大便利&#xff0c;其中之一便是可高效输出带有道路检测车桩号标记的病害报表&#xff0c;这是因为道路检测车数据本身具有规范性。 那么如果使用道…...

git上传大大大文件项目好折磨人

本来想把unity项目的源码上传上gitee啊&#xff0c;但是那个项目有1个多G&#xff0c;还是个半成品&#xff0c;要是写完&#xff0c;都不知道行不行 正常的上传 所用到的命令&#xff1a; 1、 git init 初始化&#xff0c;创建本地仓库 2、 git add . 添加到本地仓库 3、 git…...

java常见异常的处理方法

以下是一些常见的异常处理方法&#xff1a; 捕获和处理异常&#xff08;try-catch&#xff09;&#xff1a; 使用try-catch语句块可以捕获并处理异常。在try块中编写可能抛出异常的代码&#xff0c;然后在catch块中指定异常类型&#xff0c;以便捕获并处理异常。 try {// 可能抛…...

上传图片到阿里云服务器base64 上传

//上传图片到阿里云服务器 function upload_Ali($remoteImage){$imageData $this->n_img_base_64($remoteImage);if ($imageData ! false) {// 初始化 cURL 句柄$ch curl_init();// 设置请求 URL 和一些 cURL 选项curl_setopt($ch, CURLOPT_URL, http://dev.com/index/aja…...

【致敬未来的攻城狮计划】— 连续打卡第二十六天:瑞萨RA Cortex-M 内核RA2E1 RT-Thread BSP 启蒙知识

系列文章目录 由于一些特殊原因&#xff1a; 系列文章链接&#xff1a;&#xff08;其他系列文章&#xff0c;请点击链接&#xff0c;可以跳转到其他系列文章&#xff09;或者参考我的专栏“ 瑞萨MCU ”&#xff0c;里面是 瑞萨RA2E1 系列文章。 24.RA2E1的 DMAC——数据传输 …...

2023年5月8日-5月14日(方案C,下班UE视频教程为主)

目前&#xff0c;ue视频教程进行到了智 慧 城 市&#xff08;3.13&#xff09;&#xff0c;mysql(7.1)&#xff0c;tf1(4.11),蓝图反射(1.9)&#xff0c;moba&#xff08;1.5&#xff09;webapp&#xff08;2.4&#xff09;&#xff0c;mmoarpg(00A_04)&#xff0c;fps1_12(0:3…...

「MIAOYUN」:降本增效,赋能传统企业数字化云原生转型 | 36kr 项目精选

作为新经济综合服务平台第一品牌&#xff0c;36氪自2019年落地四川站以来&#xff0c;不断通过新锐、深度的商业报道&#xff0c;陪跑、支持四川的新经济产业。通过挖掘本土优质项目&#xff0c;36氪四川帮助企业链接更多资源&#xff0c;助力企业成长&#xff0c;促进行业发展…...

Python突破JS加密限制,进行逆向解密

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 目录标题 前言开发环境:模块使用:逆向目标逆向过程参数 JS 加密关键代码Python 登录关键代码尾语 &#x1f49d; 开发环境: Python 3.8 Pycharm 模块使用: time >>> 时间模块&#xff0c;属于内置&#xff0c;无…...

【Linux】exec函数族

目录 1、exec函数族的介绍2、exec相关函数 1、exec函数族的介绍 2、exec相关函数 #include <unistd.h> int execl(const char *pathname, const char *arg0, ... /* (char *)0 */ ); /* - path 需要指定的执行的文件的路径或者名称&#xff0c;相对路径or绝对路径- arg …...

OSQP二次规划求解库使用说明

OSQP二次规划求解库使用说明 贺志国 2023.5.10 1. 凸二次规划的一般表达式 m i n 1 2 x T P x q T x s . t . l ≤ A x ≤ u min \quad \frac{1}{2}x^T Px q^Tx \qquad s.t. \quad l \leq Ax \leq u min21​xTPxqTxs.t.l≤Ax≤u 其中&#xff0c; P P P称为内核矩阵&#x…...

Elasticsearch(一)

Elasticsearch&#xff08;一&#xff09; 初始elasticsearch 什么是elasticsearch elasticsearch是一款非常强大的开源搜索引擎&#xff0c;可以帮助我们从海量数据中快速查找到需要的内容 elasticsearch结合kibana、Logstash、Beats&#xff0c;也就是elastic stack&…...

深入探究Java中的枚举类型:定义、特性和应用

引言&#xff1a; 在Java编程中&#xff0c;枚举类型是一种强大而灵活的工具&#xff0c;用于定义一组具名的常量。它不仅提供了代码可读性和可维护性的优势&#xff0c;还为开发人员提供了一种更安全和结构化的方式来处理固定的常量集合。本文将深入探讨Java中的枚举类型&…...

linux密码忘了?一招解决

目录 一、前言 二、进入编辑界面 三、单用户模式 四、修改密码 五、更新信息 六、退出 七、验证 一、前言 版本&#xff1a;centos7.9、VMware15.5 在我们学习linux运行级别的时候&#xff0c;面试题可能会出如何找回root密码&#xff0c;下面来详细的介绍一波&#xff…...

苹果mac清理软件CleanMyMac X v4.13兼容13系统,堪称Mac最好的系统清理工具

CleanMyMac X for mac是MacOS上一款Mac清理优化工具&#xff0c;不仅包含各种清理功能&#xff0c;更是具有卸载器、维护、扩展、碎纸机这些实用功能&#xff0c;可以同时代替很多工具。它可以清理&#xff0c;优化&#xff0c;保养和监测您的电脑&#xff0c;确保您的Mac运行…...

FPGA实现Cordic算法求解arctan和sqr(x*2 + y* 2)

一. 简介 由于在项目中需要使用的MPU6050&#xff0c;进行姿态解算&#xff0c;计算中设计到**arctan 和 sqr(x2 y 2),**这两部分的计算&#xff0c;在了解了一番之后&#xff0c;发现Cordic算法可以很方便的一次性求出这两个这两部分的计算。另外也可以一次性求出sin和cos的…...

【最终截稿 | Springer 独立出版 | EI稳定检索】 2023年绿色建筑国际会议(ICoGB 2023)

会议简介 Brief Introduction 2023年绿色建筑国际会议(ICoGB 2023) 会议时间&#xff1a;2023年5月21日-23日 召开地点&#xff1a;瑞典斯德哥尔摩 大会官网&#xff1a;www.icogb.org ICoGB 2023将围绕“绿色建筑”的最新研究领域而展开&#xff0c;为研究人员、工程师、专家学…...

Flutter常用状态管理框架及优缺点

Flutter 中常见的状态管理框架有以下几种&#xff1a; Provider&#xff1a; Provider 是一个轻量级的状态管理框架&#xff0c;可用于单个 Widget 或整个 Widget 树中分发状态。它通过 InheritedWidget 和 ChangeNotifier 来实现状态管理&#xff0c;并支持依赖项注入。Redux…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...