第07讲:Redis集群之cluster

news2024/11/18 12:28:59

一、什么是Cluster?

        redis的哨兵模式基本已经可以实现高可用,读写分离 ,但是在这种模式下每台redis服务器都存储相同的数据,很浪费内存,所以在redis3.0上加入了cluster模式,实现的redis的分布式存储,也就是说每台redis节点上都可以存储不同的内容。
        Redis-Cluster采用无中心结构,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。
在这里插入图片描述

二、为什么要使用Cluster?

  • 数据分散存储
	Redis 集群没有并使用传统的一致性哈希来分配数据,而是采用另外一种叫做哈希槽 (hash slot)的方式来分配的。redis cluster 默认分配了 16384 个slot,当我们set一个key 时,会用CRC16算法来取模得到所属的slot,然后将这个key 分到哈希槽区间的节点上,具体算法就是:CRC16(key) % 16384。
	
	 举个栗子,我规定:号码为0-59总共60个小球,小明,小红,小李三个人分别拿0-19、20-39、40-59号码的小球,当你想拿到55号球的时候可以直接快速找到小李去拿到55号球。
  • 容错机制-投票
	为了防止主节点数据丢失,可以为每个主节点可以准备特点数目的备节点,主节点挂掉从节点可以升级为主节点(哨兵模式) 。

	容错机制指的是,如果半数以上master节点与故障节点通信超过(cluster-node-timeout),认为该节点故障,自动触发故障转移操作. 故障节点对应的从节点自动升级为主节点 , 如果某个主挂掉,而没有从节点可以使用,那么整个Redis集群进入宕机状态

以上内容参考自:Redis入门到精通(十二),Redis集群的意义(一)


三、开始实验

本实验模拟6台redis服务器,以一主一从为一组,共3组实例实现Cluster集群部署

第1步:确保redis.conf文件的daemonize 属性为yes

在这里插入图片描述

第2步:制作6个实例,6379,6380,6381,6389,6390,6391

在这里插入图片描述

首先制作一个6379,其他的复制粘贴,并且使用命令全局修改文件内容

mkdir redis_cluster #创建一个文件夹用于存放cluster的日志文件
vi redis6379.conf #创建一个文件

配置基本信息

include /usr/local/test/test-redis/redis.conf
port 6379
pidfile "/var/run/redis_6379.pid"
dbfilename "dump6379.rdb"
dir "/usr/local/test/test-redis/redis_cluster"
logfile "/usr/local/test/test-redis/redis_cluster/redis_err_6379.log"
#打开集群模式
cluster-enabled yes
#设定节点配置文件名
cluster-config-file nodes-6379.conf
#设定节点失联时间,超过该时间(毫秒),集群自动进行主从切换
cluster-node-timeout 15000

可以使用如下命令在文件中进行全局内容替换

:%s/6379/6389

第3步:保证6个redis服务都正常启动

redis-server redis6379.conf
redis-server redis6389.conf
redis-server redis6380.conf
redis-server redis6390.conf
redis-server redis6381.conf
redis-server redis6391.conf

在这里插入图片描述

第4步:合体,以集群方式启动

必须切换目录到redis/src目录下,然后再运行命令,ip地址不可以使用127.0.0.1
切换目录

cd /usr/local/apps/redis-5.0.4/src/

合体命令

redis-cli --cluster create --cluster-replicas 1 192.168.0.181:6379 192.168.0.181:6380 192.168.0.181:6381 192.168.0.181:6390 192.168.0.181:6391 192.168.0.181:6389

在这里插入图片描述
在这里插入图片描述

第5步:测试

以集群方式登陆客户端

-c 采用集群策略连接,设置数据会自动切换到相应的写主机

redis-cli -c -p 6379

在这里插入图片描述

四、jedis的集群开发

即使连接的不是主机,集群会自动切换主机存储。主机写,从机读。
无中心化主从集群。无论从哪台主机写的数据,其他主机上都能读到数据。

public class JedisClusterTest {
  public static void main(String[] args) { 
     Set<HostAndPort>set =new HashSet<HostAndPort>();
     set.add(new HostAndPort("192.168.31.211",6379));
     JedisCluster jedisCluster=new JedisCluster(set);
     jedisCluster.set("k1", "v1");
     System.out.println(jedisCluster.get("k1"));
  }
}

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

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

相关文章

pycharm运行显示未安装包,但其实已经安装

问题描述 在下载了专业版的pycharm后&#xff0c;在pycharm终端运行项目的时候&#xff0c;无论什么包&#xff0c;只要你下载&#xff0c;就是显示已经存在&#xff08;当然存在了&#xff0c;我虚拟环境之前都下的有&#xff09; REquirement already statisfied&#xff1a;…

【OpenCV-Python】教程:9-1 级联分类器

OpenCV Python 级联分类器 【目标】 Haar 级联目标检测器工作方式&#xff1b;Haar 级联分类器检测人脸和人眼 【理论】 基于Haar特征的级联分类器的目标检测是Paul Viola和Michael Jones在2001年的论文中提出的一种有效的目标检测方法。这是一种基于机器学习的方法&#x…

Swift 周报 第二十期

前言 本期是 Swift 编辑组自主整理周报的第十一期&#xff0c;每个模块已初步成型。各位读者如果有好的提议&#xff0c;欢迎在文末留言。 欢迎投稿或推荐内容。目前计划每两周周一发布&#xff0c;欢迎志同道合的朋友一起加入周报整理。 在这个来去匆匆风云变幻的季节&…

工厂设备管理难点与解决方案

工厂设备管理中经常会遇到哪些问题&#xff1f; 设备是生产力的重要组成部分&#xff0c;是工厂从事生产经营的重要工具&#xff0c;生产设备无论从企业资产的占有率&#xff0c;还是从管理工作的内容上都占据相当大的比重&#xff0c;管好、用好设备&#xff0c;提高设备管理…

JS 之 对象、继承

目录 JS对象 1.通过new Object()创建 2.工厂模式 3.构造函数模式 4.原型模式 5.组合使用构造函数与原型对象 6.动态原型模式 7. 寄生构造函数模式 8.稳妥构造函数模式 原型对象 原型链 继承 1.原型链继承 2.借用构造函数&#xff08;经典继承 | 伪造函数&#xff…

CTF之密码学题目-classical coding

CTF系列文章 第一篇 CTF之密码学题目-classical && coding 文章目录CTF系列文章前言一、题目是什么&#xff1f;二、解题步骤1.下载文件&#xff0c;解压2.解码Unicode3.ASCII码解码4.BrainFunk解码5.莫斯码解码6.字频解密总结前言 在CTF比赛中&#xff0c;有关密码学…

Memtiter-benchmark源码解析2--shared_connection

shard_connection.h class shad_connection private members Line 161 行 bufferevent* m_bev&#xff1b;重要的bufferevent_event important methods setup_event shard_connection.cpp bufferevent_setcb 设置了 m_bev 的读事件的函数回调&#xff0c;没有设置写事件的函…

如何策划一场银行校招线上笔试?

策划一场银行校园招聘线上笔试&#xff0c;只需要4步。 牛客基于服务的上千家企业现状发现&#xff0c;银行业大多数企业在校园招聘的笔试环节会面临这些核心问题&#xff1a; 缺乏出题专业度&#xff1a;大多数企业出题者为业务部门员工&#xff0c;技能水平不一&#xff0c…

Educational Codeforces Round 97 (Rated for Div. 2) D. Minimal Height Tree

Problem - D - Codeforces 翻译&#xff1a; Monocarp有一棵树&#xff0c;它由&#x1d45b;个顶点组成&#xff0c;并以顶点1为根。他决定研究BFS(宽度优先搜索)&#xff0c;所以他在他的树上运行BFS&#xff0c;从根开始。BFS可以用下面的伪代码描述: A [] #处理顶点的顺序…

欧几里得空间

文章目录1 欧几里得范数2 距离3 标准内积4 柯西-施瓦茨不等式5 正交6 叉乘7 平行四边形法则8 欧几里得运动线性空间里最重要的就是欧几里得空间了&#xff0c;这是线性代数学习绕不过去的槛。欧几里得空间&#xff0c;学习起来我觉得吧&#xff0c;主要是三个点&#xff1a;内积…

Golang面试宝典——Go语言实现排序算法之快速排序

关于Golang面试宝典 最近几年&#xff0c;Go的热度持续飙升&#xff0c;国内外很多大公司都在大规模的使用Go。Google是Go语言诞生的地方&#xff0c;其他公司如Facebook、腾讯、阿里、字节跳动、百度、京东、小米等都在拥抱和转向Go。Go语言的开源项目也非常多&#xff0c;如…

无人驾驶(四)---远程桌面控制工具: NoMachine踩坑记录

NoMachine for mac是一款免费的远程桌面访问工具&#xff0c;这款软件的连接到远程桌面后延迟可以非常低&#xff0c;NX协议在高延迟低带宽的链路上提供了近乎本地速度的响应能力&#xff0c;打破空间和时间的障碍&#xff0c;让您的桌面环游世界。 1.环境配置 服务端&#x…

西门子PLC各类通信协议差异对比

西门子PLC有4大类&#xff0c;几十个型号类型&#xff0c;PLC不同所支持的通讯协议也不相同。 S7-200系列支持的协议有&#xff1a;PPI、MPI、PROFIBUS、以太网、S7协议、AS-INTERFACE、USS、MODBUS、自由口。 S7-300\400系列支持的协议有&#xff1a;MPI、PROFIBUS、ETHERNE…

陌陌综合案例

注&#xff1a;大家觉得博客好的话&#xff0c;别忘了点赞收藏呀&#xff0c;本人每周都会更新关于人工智能和大数据相关的内容&#xff0c;内容多为原创&#xff0c;Python Java Scala SQL 代码&#xff0c;CV NLP 推荐系统等&#xff0c;Spark Flink Kafka Hbase Hive Flume等…

【python3】10.python高阶内容:装饰器

10.python高阶内容&#xff1a;装饰器 2022.12.28 装饰器装饰器(Decorators)是 Python 的一个重要部分。简单地说&#xff1a;他们是修改其他函数的功能的函数。参数可以是函数&#xff0c;返回值也可以是函数。 10.1 形式 def decorator(fn):def wrapper(name):print(name&…

【Linux进程】进程的基本概念,fork的使用,各种状态的含义,孤儿和僵尸进程的含义

目录 1.进程的基本概念 2.描述进程-PCB 3.fork创建子进程 4.各种状态对应的含义及进程大概的运行原理 5.僵尸进程 ​6.孤儿进程 7.进程的优先级 1.进程的基本概念 2.描述进程-PCB PCB概念:进程信息被放在一个叫做进程控制块的数据结构中&#xff0c;可以理解为进程属性的集…

ChatGPT注册教程

ChatGPT是最近很火的AI智能对话聊天软件。我们是能够去用来进行更加自由的智能内容讨论和聊天。有的小伙伴还不知道怎么注册。 官方地址&#xff1a;chat.openai.com/chat 注册步骤 1、进入官网后&#xff0c;点击注册按钮。 2、点击创建账号。 3、输入自己的邮箱账号。 4、…

整合Kafka

Main Concepts 一些服务器形成了存储层&#xff0c;被称为broker&#xff0c;其他服务器运行kafka连接去不断地导入和导出数据作为事件流&#xff0c;将kafka和关系型数据库等存在的系统集成。 Servers: Kafka is run as a cluster of one or more servers that can span mult…

高手不用Redis内存数据库一

不是说Redis不好&#xff0c;不用Redis用别的(比如:Memcached 2、VoltDB 3、MongoDB 4、Hazelcast 5、Aerospike) No! No! No!!! Redis 很好&#xff0c;我不拦着您用…… 而是说&#xff0c;我们的水平更高了以后&#xff0c;您一定会感受到 内存数据库 不够用、不够灵活、不…

JavaScript基础篇2之日期时间函数

一、计算机中时间字母表示的预知识储备&#xff1a; G&#xff08;age&#xff0c;时代年龄等意思&#xff09;&#xff1a;时代标志&#xff0c;如AD&#xff08;Anno Domini公元&#xff09;、BC&#xff08;Before Christ公元前&#xff09;。 y&#xff08;year&#xff…