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作者是约瑟夫雷德蒙(Joseph Chet Redmon),他的网站:https://pjreddie.com/ YOLOv1网站:https://pjreddie.com/darknet/yolov1/ YOLOv2网站:https://pjreddie.com/darknet…...

提高APP安全性的必备加固手段——深度解析代码混淆技术
APP 加固方式 Android APP 加固是优化 APK 安全性的一种方法,常见的加固方式有混淆代码、加壳、数据加密、动态加载等。下面介绍一下 Android APP 加固的具体实现方式。 混淆代码: 使用 ProGuard 工具可以对代码进行混淆,使得反编译出来的代…...

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

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

java常见异常的处理方法
以下是一些常见的异常处理方法: 捕获和处理异常(try-catch): 使用try-catch语句块可以捕获并处理异常。在try块中编写可能抛出异常的代码,然后在catch块中指定异常类型,以便捕获并处理异常。 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 启蒙知识
系列文章目录 由于一些特殊原因: 系列文章链接:(其他系列文章,请点击链接,可以跳转到其他系列文章)或者参考我的专栏“ 瑞萨MCU ”,里面是 瑞萨RA2E1 系列文章。 24.RA2E1的 DMAC——数据传输 …...

2023年5月8日-5月14日(方案C,下班UE视频教程为主)
目前,ue视频教程进行到了智 慧 城 市(3.13),mysql(7.1),tf1(4.11),蓝图反射(1.9),moba(1.5)webapp(2.4),mmoarpg(00A_04),fps1_12(0:3…...

「MIAOYUN」:降本增效,赋能传统企业数字化云原生转型 | 36kr 项目精选
作为新经济综合服务平台第一品牌,36氪自2019年落地四川站以来,不断通过新锐、深度的商业报道,陪跑、支持四川的新经济产业。通过挖掘本土优质项目,36氪四川帮助企业链接更多资源,助力企业成长,促进行业发展…...

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

【Linux】exec函数族
目录 1、exec函数族的介绍2、exec相关函数 1、exec函数族的介绍 2、exec相关函数 #include <unistd.h> int execl(const char *pathname, const char *arg0, ... /* (char *)0 */ ); /* - path 需要指定的执行的文件的路径或者名称,相对路径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 min21xTPxqTxs.t.l≤Ax≤u 其中, P P P称为内核矩阵&#x…...

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

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

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

苹果mac清理软件CleanMyMac X v4.13兼容13系统,堪称Mac最好的系统清理工具
CleanMyMac X for mac是MacOS上一款Mac清理优化工具,不仅包含各种清理功能,更是具有卸载器、维护、扩展、碎纸机这些实用功能,可以同时代替很多工具。它可以清理,优化,保养和监测您的电脑,确保您的Mac运行…...

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

【最终截稿 | Springer 独立出版 | EI稳定检索】 2023年绿色建筑国际会议(ICoGB 2023)
会议简介 Brief Introduction 2023年绿色建筑国际会议(ICoGB 2023) 会议时间:2023年5月21日-23日 召开地点:瑞典斯德哥尔摩 大会官网:www.icogb.org ICoGB 2023将围绕“绿色建筑”的最新研究领域而展开,为研究人员、工程师、专家学…...

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

Ubuntu 20.04 系统配置 OpenVINO 2022.3 环境
由于 OpenVINO 2021 版本在调用 IECore 时会出现 Segmentation fault 的问题,因此需要将其升级为 2022 版本的。 1. 卸载原来版本的 OpenVINO 进入OpenVINO的卸载目录,通常在 /opt/intel 文件夹下, cd /opt/intel/openvino_2021/openvino_…...

浏览器存储技术:localStorage、sessionStorage和cookie的区别
随着互联网技术的不断发展,人们越来越依赖浏览器进行网页浏览和数据处理。浏览器存储技术是Web开发中非常重要的一部分,它可以帮助我们在浏览器端存储数据,而无需将数据传输到服务器。本文将介绍三种常见的浏览器存储技术:localSt…...

MySQL中的内连接和外连接
一、MySQL内连接(INNER JOIN) 内连接,又称为等值连接,是最常见的连接类型。它根据两个(或多个)表中具有相同列值的行来创建一个新的结果表。在内连接中,只有通过连接条件匹配的行才会被包含在结…...

node学习手册
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时,使 JavaScript 可以脱离浏览器环境运行在服务端。它提供了一组 API,可以让开发者轻松地进行服务器端编程。 以下是 Node.js 的学习手册: 安装 Node.js 首先,需要在官网…...

Java中的JSP是什么?如何实现JSP
JavaServer Pages(JSP)是一种Java技术,可以用于开发动态Web应用程序。它允许开发人员将Java代码嵌入到HTML页面中,以便生成动态内容。本文将介绍JSP的工作原理,以及如何在Java中实现JSP。 JSP的工作原理 JSP的工作原…...

c++之函数对象和谓词
目录 函数对象: 谓词: 一元谓词函数举例如下 二元谓词举例如下 函数对象和函数的区别 一元谓词的案例 二元函数对象案例 二元谓词案例 函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function obj…...

《Andorid开源》greenDao 数据库orm框架
一 前言:以前没用框架写Andorid的Sqlite的时候就是用SQLiteDatabase ,SQLiteOpenHelper ,SQL语句等一些东西,特别在写SQL语句来进行 数据库操作的时候是一件很繁琐的事情,有时候没有错误提示的,很难找到错误的地方&a…...

Android类似微信聊天页面教程(Kotlin)五——选择发送图片
前提条件 安装并配置好Android Studio Android Studio Electric Eel | 2022.1.1 Patch 2 Build #AI-221.6008.13.2211.9619390, built on February 17, 2023 Runtime version: 11.0.150-b2043.56-9505619 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Windows 11 …...

MongoDB:Win/Linux环境安装及一键部署脚本
1. Win安装 1.1 下载 MongoDB 安装程序 访问 MongoDB 官网,进入下载页面:Download MongoDB Community Server | MongoDB 选择 Windows 平台并下载最新版的 MongoDB 安装程序。 1.2 安装 MongoDB 双击安装程序,按照提示完成 MongoDB 的安装…...

KingbaseES V8R3 集群运维系列 -- failover切换后集群自动恢复
案例说明: KingbaseES V8R3集群默认在触发failover切换后,为保证数据安全,原主库需要通过人工介入后,恢复为新的备库加入到集群。在无人值守的现场环境,需要在触发failover切换后,主库可以自动恢复为新备…...