【redis 3.2 集群】

目录

一、Redis主从复制

1.概念

2.作用

2.1 数据冗余

2.2 故障恢复

2.3 负载均衡

2.4 高可用

3.缺点

4.流程

4.1 第一步

4.2 第二步

4.3 第三步

4.4 第四步

5.搭建

5.1 主

5.2 从

6.验证

二、Reids哨兵模式

1.概念

2.作用

2.1 监控

2.2 自动故障转移

2.3 通知(提醒)

3.缺点

4.结构

4.1 哨兵节点

4.2 数据节点

5.搭建

6.验证

三、Redis集群

1.概述

2.原理

3.架构细节

3.1 细节一

3.2 细节二

3.3 细节三

3.4 细节四

4.选举过程

5.搭建

5.1 基础搭建

5.2 分别修改配置文件中

5.3 启动服务

5.4 构建集群

5.4.1 将其他节点加入集群

5.4.2 分配slot

5.4.3 建立主从关系

5.5 查看命令

5.6 重置集群命令


一、Redis主从复制

1.概念

是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。

2.作用

2.1 数据冗余

主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

2.2 故障恢复

当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。

2.3 负载均衡

在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。

2.4 高可用

除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

3.缺点

  • 故障恢复无法自动化
  • 写操作无法负载均衡
  • 存储能力受到单机的限制

4.流程

4.1 第一步

若启动一个Slave机器进程,则它会向Master机器发送一个“sync command”命令,请求同步连接。

4.2 第二步

无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照保存到数据文件中(执行rdb操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中。 

4.3 第三步

后台进程完成缓存操作之后,Maste机器就会向Slave机器发送数据文件,Slave端机器将数据文件保存到硬盘上,然后将其加载到内存中,接着Master机器就会将修改数据的所有操作一并发送给Slave端机器。若Slave出现故障导致宕机,则恢复正常后会自动重新连接。

4.4 第四步

Master机器收到Slave端机器的连接后,将其完整的数据文件发送给Slave端机器,如果Mater同时收到多个Slave发来的同步请求,则Master会在后台启动一个进程以保存数据文件,然后将其发送给所有的Slave端机器,确保所有的Slave端机器都正常。

5.搭建

5.1 主

修改配置文件
    bind  0.0.0.0
    port  6379
    protected-mode = no
    daemonize = yes

5.2 从

修改配置文件
    bind  0.0.0.0
    port  6380
    protected-mode = no
    daemonize = yes
    slaveof 192.168.115.160 6379

6.验证

使用redis-cli命令行登录redis服务器,输入role指令查看状态
在master节点上,录入数据,在slave节点上查看到对应数据即可

 

 

 

二、Reids哨兵模式

1.概念

是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的 Master 并将所有 Slave 连接到新的 Master。所以整个运行哨兵的集群的数量不得少于3个节点。

:依托于主从模式

2.作用

2.1 监控

哨兵会不断地检查主节点和从节点是否运作正常。

2.2 自动故障转移

当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。

2.3 通知(提醒)

哨兵可以将故障转移的结果发送给客户端。

3.缺点

  • 写操作无法负载均衡
  • 存储能力受到单机的限制
  • 哨兵无法对从节点进行自动故障转移,在读写分离场景下,从节点故障会导致读服务不可用,需要对从节点做额外的监控、切换操作。

4.结构

4.1 哨兵节点

哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据。

4.2 数据节点

主节点和从节点都是数据节点。

5.搭建

vim /etc/redis-sentinel.conf

        bind 0.0.0.0
        port 26379                        Redis哨兵默认的监听端口
        protected-mode no           关闭保护模式
        daemonize  yes
        sentinel monitor mymaster 主IP 6379 2  
        修改 指定该哨兵节点监控ip:6379这个主节点,该主节点的名称是mymaster,最后的2的含义          与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移

        
        sentinel down-after-milliseconds mymaster 30000        判定服务器down掉的时间周期,默认          30000毫秒

        sentinel failover-timeout mymaster 180000        故障节点的最大超时时间为180000毫秒

 

 

指定日志存放路径
logfile "/var/log/sentinel.log"

指定数据库存放路径
dir "/var/lib/redis"

6.验证

停止master后,slave会通过选举产生新的master
哨兵配置文件会自动修改监听的master节点地址为新的master节点地址

 

 

 

 

 

 

三、Redis集群

1.概述

Redis3.0版本以上开始支持cluster,采用的是hashslot(hash槽),可以将多个Redis实例整合在一起,形成一个群集,也就是将数据分散到群集的多台机器上。

2.原理

Redis Cluster是一个无中心的结构,每个节点都保存数据和整个群集的状态。每个节点都会保存其他节点的信息,知道其他节点所负责的槽,并且会与其他节点定时发送心跳信息,能够及时感知群集中异常的节点。

3.架构细节

3.1 细节一

所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。

3.2 细节二

节点的失效(fail)在群集中超过半数的主(master)节点检测失效时才生效。

3.3 细节三

客户端与 redis 节点直连,不需要中间代理(proxy)层,客户端不需要连接群集所有节点,连接群集中任何一个可用节点即可。

3.4 细节四

redis-cluster 把所有的物理节点映射到【0-16383】slot 上,cluster 负责维护 node<->slot<->key。

4.选举过程

  • 选举过程是群集中所有master参与,如果半数以上master节点与当前 master 节点通信超时(cluster—node—timeout),认为当前 master 节点挂掉。以下两种情况为整个群集不可用(cluster_state:fail),当群集不可用时,所有对群集的操作都不可用,收到((error)CLUSTEFDOWN The cluster is down)错误。
  • 如果群集任意 master挂掉,且当前 master 没有 slave,则群集进入 fail状态,也可以理解成群集的slot映射【0 ~16383】不完整时进入fail状态。
  • 如果群集中超过半数的master挂掉,无论是否有slave,群集都进入 fail状态。
  • 默认情况下,每个群集的节点都使用两个TCP端口.一个是6379,一个是16379;6379服务于客户端的连接,16379 用于群集总线,即使用二进制协议的节点到节点通信通道。节点使用群集总线进行故障检测、配置更新、故障转移授权等。如果开启了防火墙,需要开放这两个端口。

5.搭建

5.1 基础搭建

mkdir /etc/redis
mv /etc/redis.conf /etc/redis/6379.conf
cd /etc/redis
for i in {0..4};do cp ./6379.conf ./638${i}.conf;done
for i in {0..4};do sed -i "s/port 6379/port 638${i}/" ./638${i}.conf;done
sed -i "s/dir \/var\/lib\/redis/dir \/var\/lib\/redis\/6379/" ./6379.conf
for i in {0..4};do sed -i "s/dir \"\/var\/lib\/redis\/6379\"/dir \"\/var\/lib\/redis\/638${i}\"/" ./638${i}.conf;done
cd /var/lib/redis
mkdir 6379 638{0..4}

5.2 分别修改配置文件

port
cluster-enabled yes
cluster-config-file nodes-【6379~6384】.conf
cluster-node-timeout 15000

5.3 启动服务

for((i=6379;i<=6384;i++));do redis-server /etc/redis/${i}.conf;done

5.4 构建集群

5.4.1 将其他节点加入集群

 CLUSTER MEET 192.168.42.138 6380
 CLUSTER MEET 192.168.42.138 6381
 CLUSTER MEET 192.168.42.138 6382
 CLUSTER MEET 192.168.42.138 6383
 CLUSTER MEET 192.168.42.138 6384

:只此步骤在某数据库内部执行

5.4.2 分配slot

redis-cli -h 192.168.42.138 -p 6379 cluster addslots {0..5461}
redis-cli -h 192.168.42.138 -p 6381 cluster addslots {5462..10922}
redis-cli -h 192.168.42.138 -p 6383 cluster addslots {10923..16383}

5.4.3 建立主从关系

redis-cli -h 192.168.42.138 -p 6380 cluster replicate 
redis-cli -h 192.168.42.138 -p 6382 cluster replicate  

redis-cli -h 192.168.42.138 -p 6384 cluster replicate 

5.5 查看命令

cluster nodes        查看所有群集节点
cluster info            查看群集状态

 

5.6 重置集群命令

cluster reset
数据的key不能相同

:每个节都要重置

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

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

相关文章

ArcGIS Pro基础:【按顺序编号】工具实现属性字段的编号自动赋值

本次介绍一个字段的自动排序编号赋值工具&#xff0c;基于arcgis 的字段计算器工具也可以实现类似功能&#xff0c;但是需要自己写一段代码实现&#xff0c; 相对而言不是很方便。 如下所示&#xff0c;该工具就是【编辑】下的【属性】下的【按顺序编号】工具。 其操作方法是…

redis基础

目录 前言 一、概述 1.NoSQL 2.Redis 二、安装 1.编译安装 2.RPM安装 三、目录结构 四、命令解析 五、redis登录更改 六、数据库操作 &#xff08;一&#xff09;、登录数据库 1.本地 2.远程登录 &#xff08;二&#xff09;、数据操作 1.数据库操作 2.数据操作 …

C++笔记之将定时器加入向量并设置定时器的ID为i

C笔记之将定时器加入向量并设置定时器的ID为i code review! 文章目录 C笔记之将定时器加入向量并设置定时器的ID为i关于代码中的void operator()() 运行 代码 #include <chrono> #include <iostream> #include <thread> #include <vector>// 定义定时…

京东秋招攻略,备考在线测评和网申笔试

京东秋招简介 伴随着社会竞争越来越激烈&#xff0c;人们投递简历的岗位也变得越来越多元&#xff0c;而无论人们的选择面变成何样&#xff0c;那些知名度较高的企业&#xff0c;永远都备受关注&#xff0c;只要其一发布招聘公告&#xff0c;总有人第一时间踊跃报名。而作为这…

linux自启动程序

嵌入式linux下有软件需要自启动&#xff0c;只需要在/etc/init.d/rcS末尾添加所要启动的程序即可&#xff0c;开机就会自动运行 vi /etc/init.d/rcS在文件末尾添加 例&#xff1a;

Zabbix6 对接飞书告警

文章目录 Zabbix对接飞书告警背景创建飞书群组Zabbix配置创建告警媒介类型创建动作用户关联飞书告警 Zabbix对接飞书告警 背景 运维 你看下他的进程是不是挂了&#xff0c;之前在9点28分有发消息的&#xff0c;这次没有发消息 哐哐哐的去看了一通&#xff0c;确实有个进程之前…

Nginx的优化和防盗链

一、Nginx的优化 1、隐藏版本号 curl -I http://192.168.79.28 #查看信息&#xff08;版本号等&#xff09;方法一&#xff1a;修改配置文件 vim /usr/local/nginx/conf/nginx.conf vim /usr/local/nginx/conf/nginx.conf http {include mime.types;default_type ap…

【Grafana】中文界面配置 v10.0.3

比如通过 docker run -d -p 3000:3000 -v /e/code/monitor/grafana/grafana.ini.txt:/etc/grafana/grafana.ini grafana/grafana运行一个容器&#xff08;最新是v10.0.3&#xff09;。 在 /admin/settings 可以看到 users 部分有一个 default_language 配置。 所以在挂载到 …

在vue项目使用数据可视化 echarts ,柱状图、折线图、饼状图使用示例详解及属性详解

官网地址&#xff1a;Apache ECharts ​一、下载插件并在页面中引入 npm install echarts --save 页面导入&#xff1a; import * as echarts from echarts 全局导入&#xff1a; main.js 中&#xff0c;导入并注册到全局 import echarts from echarts Vue.prototype.$echart…

【算法】双指针——leetcode盛最多水的容器、剑指Offer57和为s的两个数字

盛水最多的容器 &#xff08;1&#xff09;暴力解法 算法思路&#xff1a;我们枚举出所有的容器大小&#xff0c;取最大值即可。 容器容积的计算方式&#xff1a; 设两指针 i , j &#xff0c;分别指向水槽板的最左端以及最右端&#xff0c;此时容器的宽度为 j - i 。由于容器…

2、简单上手+el挂载点+v-xx(v-text、v-html、v-on、v-show、v-if、v-bind、v-for)

官网&#xff1a; vue3&#xff1a;https://cn.vuejs.org/ vue2&#xff1a;https://v2.cn.vuejs.org/v2/guide/ 简单上手&#xff1a; 流程&#xff1a; 导入开发版本的Vue.js <!--开发环境版本&#xff0c;包含了有帮助的命令行警告--> <script src"https…

SD-MTSP:光谱优化算法LSO求解单仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)

一、光谱优化算法LSO 光谱优化算法&#xff08;Light Spectrum Optimizer&#xff0c;LSO&#xff09;由Mohamed Abdel-Basset等人于2022年提出。 参考文献&#xff1a; [1]Abdel-Basset M, Mohamed R, Sallam KM, Chakrabortty RK. Light Spectrum Optimizer: A Novel Physi…

React Native 样式布局基础知识

通过此篇笔记能够学习到如下的几个知识点 在 React Native 中使用样式的一些细节了解 React Native 的 Flex 布局概念了解 React Native 的 flex 布局属性React Native 如何添加多样式属性React Native 中绝对布局和相对布局 React Native 中的 Flex 布局概念 1、主轴和交叉…

JVM运行时五大数据区域详解

前言&#xff1a; java虚拟机再执行Java程序的时候把它所拥有的内存区域划分了若干个数据区域。这些区域有着不同的功能&#xff0c;各司其职。这些区域不但功能不同&#xff0c;创建、销毁时间也不同。有些区域为线程私有&#xff0c;如&#xff1a;每个线程都有自己的程序计数…

《Zookeeper》源码分析(七)之 NIOServerCnxn的工作原理

目录 NIOServerCnxnreadPayload()handleWrite(k)process() NIOServerCnxn 在上一节IOWorkRequest的doWork()方法中提到会将IO就绪的key通过handleIO()方法提交给NIOServerCnxn处理&#xff0c;一个NIOServerCnxn代表客户端与服务端的一个连接&#xff0c;它用于处理两者之间的…

BGP实验

题目 IP地址配置 172.16.X.0/24为模拟用户环回接口接口 172.16.7.X/32为BGP邻居关系建立的环回接口 R1&#xff1a; R2&#xff1a; R3&#xff1a; R4&#xff1a; R5&#xff1a; R6&#xff1a; R7&#xff1a; R8&#xff1a; BGP邻居关系建立、宣告和反射器、联邦配置 R…

Web压测工具http_load原理分析

01、前言 http_load是一款测试web服务器性能的开源工具&#xff0c;从下面的网址可以下载到最新版本的http_load&#xff1a; http://www.acme.com/software/http_load/ 这个软件一直在保持着更新&#xff08;不像webbench&#xff0c;已经是十年的老古董了。 webbench的源…

定制 ChatGPT 以满足您的需求 自定义说明

推荐&#xff1a;使用 NSDT场景编辑器 快速助你搭建可二次编辑的3D应用场景 20 月 <> 日&#xff0c;OpenAI 宣布他们正在引入带有自定义说明的新流程&#xff0c;以根据您的特定需求定制 ChatGPT。 什么是自定义说明&#xff1f; 新的测试版自定义指令功能旨在通过防止…

【C++从0到王者】第二十站:模板进阶

文章目录 前言一、typename 和 class的一些区别二、非类型模板参数1.非类型模板参数介绍2.array容器 三、模板的特化1.函数模板的特化2.类模板的特化1.全特化2.偏特化&#xff08;半特化&#xff09; 三、模板的分离编译四、总结 前言 在前面我们使用模板主要是为了解决两类问…

Kubernetes(K8s)入门

一、Kubernetes是什么 Kubernetes是什么? 首先&#xff0c;它是一个全新的基于容器技术的分布式架构领先方案。这个方案虽然还很新&#xff0c;但它是谷歌十几年以来大规模应用容器技术的经验积累和升华的一个重要成果。确切地说&#xff0c;Kubernetes是谷歌严格保密十几年的…