redis集群简介

news2024/11/18 13:38:02

53545859d9da4ab39d58c7fae0c2f76b.jpg 集群的概念

 

所谓的集群,就是通过添加服务器的数量,提供相同的服务,从而让服务器达到一个稳定、高效的状态。

 

1.1.1 使用redis集群的必要性

问题:我们已经部署好了redis,并且能启动一个redis,实现数据的读写,为什么还要学习redis集群?

 

答:(1)单个redis存在不稳定性。当redis服务宕机了,就没有可用的服务了。

 

(2)单个redis的读写能力是有限的。

 

总结:redis集群是为了强化redis的读写能力。

 

1.1.2 如何学习redis集群

--说明:(1)redis集群中,每一个redis称之为一个节点。

 

      (2)redis集群中,有两种类型的节点:主节点(master)、从节点(slave)。

 

      (3)redis集群,是基于redis主从复制实现。

 

                         

 

所以,学习redis集群,就是从学习redis主从复制模型开始的。

 

1 redis主从复制

1.1 概念

    主从复制模型中,有多个redis节点。

 

    其中,有且仅有一个为主节点Master。从节点Slave可以有多个。

 

 

 

只要网络连接正常,Master会一直将自己的数据更新同步给Slaves,保持主从同步。

 

 

 

 

1.1 特点

(1)主节点Master可读、可写.

 

(2)从节点Slave只读。(read-only)

 

 

 

因此,主从模型可以提高读的能力,在一定程度上缓解了写的能力。因为能写仍然只有Master节点一个,可以将读的操作全部移交到从节点上,变相提高了写能力。

 

 

 

1.1 基于配置实现

1.1.1 需求

主节点

 

6380

 

从节点(两个)

 

6381、6382

 

 

 

1.1.2 配置步骤

(1)在/usr/local目录下,创建一个/redis/master-slave目录

 

[root@node0719 local]# mkdir -p redis/master-slave

 

 

 

(2)在master-slave目录下,创建三个子目录6380、6381、6382

 

[root@node0719 master-slave]# mkdir 6380 6381 6382

 

 

 

(3)依次拷贝redis解压目录下的redis.conf配置文件,到这三个子目录中。

 

[root@node0719 master-slave]# cp /root/redis-3.2.9/redis.conf ./6380/

 

[root@node0719 master-slave]# cp /root/redis-3.2.9/redis.conf ./6381/

 

[root@node0719 master-slave]# cp /root/redis-3.2.9/redis.conf ./6382/

 

 

 

(4)进入6380目录,修改redis.conf,将port端口修改成6380即可。

 

[root@node0719 master-slave]# cd ./6380

 

[root@node0719 6380]# vim redis.conf

 

 

 

 

 

 

 

(5)进入6381目录,修改redis.conf,将port端口改成6381,同时指定开启主从复制。

 

[root@node0719 6380]# cd ../6381

 

[root@node0719 6381]# vim redis.conf

 

 

 

 

 

 

 

 

 

(6)进入6382目录,修改redis.conf,将port端口改成6382,同时指定开启主从复制。

 

[root@node0719 6380]# cd ../6382

 

[root@node0719 6381]# vim redis.conf

 

 

 

 

 

 

 

 

 

1.1.1 测试

(1)打开三个xshell窗口,在每一个窗口中,启动一个redis节点。查看日志输出。(不要改成后台模式启动,看不到日志,不直观)

 

[root@node0719 master-slave]# cd 6380 && redis-server ./redis.conf

 

 

 

[root@node0719 master-slave]# cd 6381 && redis-server ./redis.conf

 

 

 

[root@node0719 master-slave]# cd 6382 && redis-server ./redis.conf

 

 

 

 

 

 

 

(2)另外再打开三个xshell窗口,在每一个窗口中,登陆一个redis节点

 

[root@node0719 ~]# redis-cli -p 6380

 

 

 

[root@node0719 ~]# redis-cli -p 6381

 

 

 

[root@node0719 ~]# redis-cli -p 6382

 

 

 

(3)在主节点6380上,进行读写操作,操作成功

 

[root@node0719 ~]# redis-cli -p 6380

 

127.0.0.1:6380> set user:name zs

 

OK

 

127.0.0.1:6380> get user:name

 

"zs"

 

127.0.0.1:6380>

 

 

 

(4)在从节点6381上

 

读操作执行成功,并且成功从6380上同步了数据

 

[root@node0719 ~]# redis-cli -p 6381

 

127.0.0.1:6381> get user:name

 

"zs"

 

 

 

写操作执行失败。(从节点,只能读,不能写)

 

127.0.0.1:6381> set user:age 18

 

(error) READONLY You can't write against a read only slave.

 

 

 

 

 

1 Sentinel哨兵模式

1.1 主从模式的缺陷

当主节点宕机了,整个集群就没有可写的节点了。

 

 

 

由于从节点上备份了主节点的所有数据,那在主节点宕机的情况下,如果能够将从节点变成一个主节点,是不是就可以解决这个问题了呢?

 

 

 

答:是的,这个就是Sentinel哨兵的作用。

 

 

 

1.2 哨兵的任务

Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:

 

监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。

 

提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。

 

自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会进行选举,将其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

 

 

 

1.2.1 监控(Monitoring)

(1)Sentinel可以监控任意多个Master和该Master下的Slaves。(即多个主从模式)

 

(2)同一个哨兵下的、不同主从模型,彼此之间相互独立。

 

(3)Sentinel会不断检查Master和Slaves是否正常。

 

 

 

 

 

 

1.2.2 自动故障切换(Automatic failover)

1.2.2.1 Sentinel网络

监控同一个Master的Sentinel会自动连接,组成一个分布式的Sentinel网络,互相通信并交换彼此关于被监视服务器的信息。下图中,三个监控s1的Sentinel,自动组成Sentinel网络结构。

 

 

 

 

疑问:为什么要使用sentinel网络呢?

 

答:当只有一个sentinel的时候,如果这个sentinel挂掉了,那么就无法实现自动故障切换了。

 

 

 

在sentinel网络中,只要还有一个sentinel活着,就可以实现故障切换。

 

1.1.1.1 故障切换的过程

(1)投票(半数原则)

 

当任何一个Sentinel发现被监控的Master下线时,会通知其它的Sentinel开会,投票确定该Master是否下线(半数以上,所以sentinel通常配奇数个)。

 

 

 

(2)选举

 

当Sentinel确定Master下线后,会在所有的Slaves中,选举一个新的节点,升级成Master节点。

 

其它Slaves节点,转为该节点的从节点。

 

  

 

 

 

 

 

 

 

         (1)投票 (2)选举

 

 

 

(3)原Master重新上线

 

当原Master节点重新上线后,自动转为当前Master节点的从节点。

 

 

 

 

 

 

 

(3)原master重新上线

 

1.1 哨兵模式部署

1.1.1 需求

前提:已经存在一个正在运行的主从模式。

 

 

 

另外,配置三个Sentinel实例,监控同一个Master节点。

 

 

 

1.1.2 配置Sentinel

(1)在/usr/local目录下,创建/redis/sentinels/目录

 

[root@node0719 local]# mkdir -p redis/sentinels

 

 

 

(2)在/sentinels目录下,以次创建s1、s2、s3三个子目录中

 

[root@node0719 sentinels]# mkdir s1 s2 s3

 

 

 

(3)依次拷贝redis解压目录下的sentinel.conf文件,到这三个子目录中

 

[root@node0719 sentinels]# cp /root/redis-3.2.9/sentinel.conf ./s1/

 

[root@node0719 sentinels]# cp /root/redis-3.2.9/sentinel.conf ./s2/

 

[root@node0719 sentinels]# cp /root/redis-3.2.9/sentinel.conf ./s3/

 

 

 

(4)依次修改s1、s2、s3子目录中的sentinel.conf文件,修改端口,并指定要监控的主节点。(从节点不需要指定,sentinel会自动识别)

 

 

 

S1哨兵配置如下:

 

 

 

 

 

 

 

 

S2哨兵配置如下:

 

 

 

 

 

 

 

 

S3哨兵配置如下:

 

 

 

 

(5)再打开三个xshell窗口,在每一个窗口中,启动一个哨兵实例,并观察日志输出

 

[root@node0719 sentinels]# redis-sentinel ./s1/sentinel.conf

 

 

 

[root@node0719 sentinels]# redis-sentinel ./s2/sentinel.conf

 

 

 

[root@node0719 sentinels]# redis-sentinel ./s3/sentinel.conf

 

 

 

核心日志输出:

 

 

 

 

1.1.3 测试

(1)先关闭6380节点。发现,确实重新指定了一个主节点

 

 

 

 

 

 

(2)再次上线6380节点。发现,6380节点成为了新的主节点的从节点。

 

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

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

相关文章

鸿蒙 HDF 框架介绍

鸿蒙 HDF 框架介绍鸿蒙 HDF 框架介绍HDF 驱动框架框图HDF 驱动框架工作原理HDF 驱动框架工作原理框图:HDF 驱动加载过程分析HDF 驱动加载过程分析——驱动实现1HDF 驱动加载过程分析——驱动实现2HDF 驱动加载过程分析——获取驱动列表HDF 驱动加载过程分析——获取…

buu刷题记录

[ACTF新生赛2020]crypto-aes from Cryptodome.Cipher import AES import os import gmpy2 from flag import FLAG from Cryptodome.Util.number import *def main():keyos.urandom(2)*16ivos.urandom(16)print(bytes_to_long(key)^bytes_to_long(iv))aesAES.new(key,AES.MODE_…

第五章. 可视化数据分析图表—综合应用(双y轴,堆叠柱形图,颜色渐变饼形图,等高线图)

第五章. 可视化数据分析图 5.7 综合应用 1.双Y轴可视化数据分析图表的实现 (柱形图折线图) 双y轴,顾名思义就是两个y轴,可以通过双y轴看出发展情况的同时,还可以看到正常速度。 1).注意: add_subplot一定要…

【自学Python】Python2代码转Python3代码

Python2代码转Python3代码 Python2代码转Python3代码教程 由于 Python 存在 Python2 和 Python3 两个主要的版本方向,经常会有将 Python2 的代码转到 Python3 的环境下运行的需求。 尤其是跑一些神经网络的代码时有很多是在 Python2 的环境下写的。在 Python3 下…

EXCEL的查找:如何按 行号+列号 进行查询

0 首先用match()等取得行号,列号 如果想根据行号列号,精确查找,另外一个区域的数据,可以用如下方法 INDIRECT("Sheet2!r"&MATCH($C11,Sheet2!$A:$A,0)&"C"&MATCH(D$10,Sheet2!$1:$1,0),FALSE) …

使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus)

vite官网 一:初始化项目 1.需要在创建项目的位置cmd目录下执行 2. npm init vitelatest 回车 npm init vitelatest3.填上自己的项目名称 回车 4.选择vue 回车 5.选择TypeScript回车 6.项目创建完成 或者一步到位通过附加的命令行选项直接指定项目名称和你想要使用的…

网络流量监控为某图书馆系统排忧解难(一)

前言 某学校图书馆信息中心老师反应,用户反馈系统有访问慢的情况,需要通过流量分析系统来了解图书馆系统的运行情况,此报告专门针对图书馆系统的性能数据做了分析。 信息中心已部署NetInside流量分析系统,使用流量分析系统提供实…

PB数据库开发技术(七)-PowerBuilder小型数据库应用系统开发

PowerBuilder小型数据库应用系统开发 实验目的 利用前面学过的知识设计一个“图书馆管理系统”,从而进一步掌握powerbuilder数据库开发的基本步骤和方法。 二.实验步骤 建立数据库“图书管理系统”,向数据库中添加操作员表、借书还书表、图书表以及相应数据

Unity 项目中怎样正确的使用 Lua?

(图源siki学院-狸墨老师) 什么是Lua Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。可以方便的与c/c进行相互调用。但…

Redis:二、Redis常见命令

2. Redis常见命令 2.1 Redis数据结构介绍 Redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样 Redis为了方便我们学习,将操作不同数据类型的命令也做了分组,在官网( http://www.redis.cn/…

【JAVA进阶】常用API

📃个人主页:个人主页 🔥系列专栏:JAVASE基础 目录 1.API概述 2.Object类 3.Objects 4.StringBuilder 5.日期与时间 Date 类 SimpleDateFormat Calendar 6.JDK8新增日期类 1.API概述 什么是API? API(Application Program…

Kettle(二)数据同步、迁移(基础版)

目录 1.配置源数据库A 1.1 文件-->数据库连接 1.2 配置数据库,选择自己的数据库并配置。 1.3 数据库配置可能会报错,原因是缺少数据库驱动 2.配置目标数据库(与源数据库一致) 3.数据迁移(举例) 3.…

IntelliJ IDEA的代码搁置功能

使用场景 当遇到需要临时修改的 bug,但当前正在开发的内容不能删掉,这个时候就需要把当前已经开发的代码另外保存下来(即保存现场),当把 bug 改完后再恢复,来回归之前的开发工作,IntelliJ IDEA…

数据可视化系列-02各类图表的综合使用介绍及实践

文章目录3.各类图表的综合使用介绍及实践3.1了解数据功能图1、可视化中的数据2、基于数据的研究3、数据的可视化组件4、可视化图表的作用、制作流程和类型3.2北极星指标展示1、指标类知识回顾:指标类简介、指标类主要场景2、指标类图表:指标看板、指标趋…

Win11的两个实用技巧系列之更新进度条不动的三种解决方法、重置失败未做更改五种解决方法

目录 Win11更新进度条不动怎么办?Win11更新进度条不动的三种解决方法 方法一: 方法二: 方法三: Win11重置失败未做更改怎么办?Win11重置失败未做更改五种解决方法 方法一、重新启用Windows RE 方法二、使用SFC修复系统文件 方法三、从恢复…

java忽略证书验证(兼容http,https)

概述 日常上传、下载文件时可能有不需要验证证书的场景,比如证书过期、不正确之类的也可以正常的上传下载文件。 Java中使用https协议时,是通过X.509证书进行校验的。 首先我们先了解下什么是X.509证书。 什么是X.509证书 X.509是公钥基础设施&#x…

k8s部署prometheus

k8s部署prometheus 1.下载prometheus文件 cd /soft/src git clone -b release-0.5 --single-branch https://github.com/coreos/kube-prometheus.git2.部署 这里部署之前最好改一下alertmanager-alertmanager.yaml这个文件,将replicas:改成2或者3,当为…

Spark 3.0 - 17 ML PCA 主成分分析理论与实战

目录 一.引言 二.PCA 理论 1.主成分分析定义 2.数学基础 A.数据归一化 B.协方差矩阵计算 C.计算协方差矩阵的特征向量和特征值,以识别主成分 D.构造特征向量矩阵 E.沿着主成分轴重新计算数据 三.PCA 实战 1.数据准备 2.PCA 初始化 3.数据降维 四.总结 …

举一反三-自建zabbix监控php

php-fpm监控需要通过nginx服务。因此需要开启相关配置。 php-fpm如果是yum安装的,那么在/etc/php-fpm.d/www.config中编辑如下选项: pm.status_path /php_status 保存并退出编辑。重启php-fpm服务。 接下来编辑nginx配置项。编辑如下: l…

Linux下cal命令C/C++实现(显示日历信息)

大多数用户自然会将计算机上的日历视为GUI应用程序,或直接从桌面显示的东西。但也可以在Linux中使用cal命令通过命令行终端查看日历。 如果您通常使用Linux上的桌面环境,或者您来自Windows或MacOS操作系统,可能会认为这是一种过于复杂的日历…