Redis快速上手篇七(集群-六台虚拟机)

Redis集群

主从复制的场景无法吗满足主机单点故障时需要引入集群配置

一般数据库要处理的读请求远大于写请求 ,针对这种情况,我们优化数据库可以采用读写分离的策略。我们可以部 署一台主服务器主要用来处理写请求,部署多台从服务器 ,处理读请求。

基本原理

哨兵选举机制,如果过半数节点发现某个异常节点,共同决定更改异常节点的状态,如果该节点是主节点,对应的备节点自动顶替为主节点。

Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器。并能在被监视的主服务器下线时自动将下线主服务器下的某个从服务器升级为新的主服务器。

配置集群所需的环境

Redis集群至少需要三个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。

要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。

学习可以采用伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号。

分布式集群搭建:

1.在安装目录下新建目录redis_cluster,文件夹下新建文件redis7001.conf

2. vim redis7001.conf

在不同的服务器 这个可以不要

cluster-config-file nodes-7006.conf 伪集群每个节点这个文件一样所以需要加这个

引入的配置文件为安装目录下的 redis.conf 文件复制过来

cp usr/local/bin/redis.conf /usr/local/bin/redis_cluster

include /usr/local/bin/redis_cluster/redis.conf #引入配置文件
port 7001 #端口设置
pidfile "/var/run/redis_7001.pid" #存放进程ID防止启动多个进程副本
dbfilename "dump_7001.rdb" #持久化文件名称
dir "/usr/local/bin/redis_cluster" #持久化保存位置
logfile "/usr/local/bin/redis_cluster/redis_err_7001.log"
cluster-enabled yes    #开启集群
cluster-config-file nodes-7001.conf #节点名称
cluster-node-timeout 15000 #节点过期时间

集群一般不设置密码

3.后台启动,查看启动是否正常

4.关闭 建议使用 shutdown 不要使用 kill杀死进程

一台虚拟机多个节点需要 -h 指定 IP

5.完整克隆第一台虚拟机五次(关机后在进行克隆)

6.启动六台虚拟机并修改 IP 与 .conf

/etc/sysconfig/network-scripts/ifcfg-ens32(这个数值看个人网卡)

/etc/sysconfig/network-scripts/ifcfg-ens+tab(自动补全)

vim /usr/local/bin/redis_cluster/redis7001.conf(文件名不用更改即可)

service network restart         修改网络配置后重启网络服务

(1)

vim /etc/sysconfig/network-scripts/ifcfg-ens32

克隆的五台虚拟机需要删掉此行 UUID

(2)

按esc通过vim 底行指令快速修改

vim /usr/local/bin/redis_cluster/redis7001.conf

cluster-node-timeout 15000        1会被修改

        :%s/7001/7002/g        不会修改 15000

五台克隆的虚拟机均进行以上操作

保证:(1)不在同一个ip

           (2)不在同一个端口启动

如图:

ip                                                                redis运行端口

192.168.253.16                                                7001

192.168.253.21                                                7002

192.168.253.22                                                7003

192.168.253.23                                                7004

192.168.253.24                                                7005

192.168.253.25                                                7006

7.在6个虚拟机分别启动redis

因为没有更改文件名称,可以直接去每个虚拟机粘贴执行即可

 /usr/local/bin/redis-server /usr/local/bin/redis_cluster/redis7001.conf 

ps -ef | grep redis 查看进程

8.创建redis集群

/usr/local/bin/redis-cli  --cluster create  192.168.253.16:7001 192.168.253.21:7002 192.168.253.22:7003 192.168.253.23:7004 192.168.253.24:7005 192.168.253.25:7006 --cluster-replicas 1

cluster-replicas 1

1其实代表的是一个比例,就是主节点数/从节点数的比例。会按照命令中IP:PORT的顺序,先是3个主节点,然后是3个从节点。

分配原则尽量保证每个主数据库运行在不同的IP地址,每个从库和主库不在一个IP地址上。

这里输入 yes        如下图创建集群成功

切记 先开启服务端在连接客户端

9.使用cli连接redis集群

使用客户端链接集群 必须使用 -c 连接

/usr/local/bin/redis-cli -c -h 192.168.253.21 -p 7002

10.查看集群的节点的信息 :cluster nodes

11.检查集群的状态

/usr/local/bin/redis-cli --cluster check 192.168.253.21:7002

12.添加主节点

新建虚拟机,配置 ip 与 .conf文件,与前六台配置一样。

例如 IP 192.168.253.26 redis服务端口 7007

启动服务后

/usr/local/bin/redis-cli --cluster add-node 192.168.253.26:7007 192.168.253.21:7002

前面的IP加端口号是要添加的redis节点,后面的IP和端口号是集群中的任意一个节点。

13.配置从节点

新建虚拟机 配置 IP 与 端口

例如 IP 192.168.253.27 redis服务端口 7008

刚才添加的主节点还没有分配槽,所以无法使用

添加从节点之前需要设置从节点并启动节点

--cluster-master-id 为从节点对应主节点的id

列: 添加刚才主节点的从节点

/usr/local/bin/redis-cli --cluster add-node 192.168.253.27:7008 192.168.253.26:7007 --cluster-slave --cluster-master-id 刚才添加的主节点的id

14.重新分配slots

添加的主节点还不能使用,因为没有分配slots,

slot的概念。slot对于Redis集群而言,就是一个存放数据的地方,就是一个槽。对于每一个Master而言,会存在一个slot的范围,而Slave则没有。在Redis集群中,依然是Master可以读、写,而Slave只读

/usr/local/bin/redis-cli --cluster reshard 192.168.253.21:7002(要移动插槽的IP)

然后再执行后的输入框 输入 接收插槽的IP的id

最后输入 all 或 done 

all 代表从所有有数据据节点进行迁移到目的节点,也可以选择 目标节点id回车,最后以done进行结束

done 代表结束

15.删除主节点

--cluster del-node 节点id

删除主节点需要先使用 reshard 把主节点的slots移到其他节点才可以

/usr/local/bin/redis-cli --cluster del-node 节点IP:端口 节点id(要删除节点的slots要移动到的ip的id)

16.删除从节点

--cluster del-node 集群 节点id(要删除的从节点id)

/usr/java/redis/bin/redis-cli --cluster del-node 节点ip:端口 节点id(要删除的从节点id)

17.故障检测

验证集群是否生效

关闭一个主节点查看对应的备用节点是不是能够顶替主节点成为主节点

存/取数据的时候查看对应的端口号

(关闭主节点以后需要耐心等待一会儿 让他重新分配一下空间)

关闭的时候一定要使用shutdown命令不要使用kill命令

/usr/java/redis/bin/redis-cli -h 192.168.253.21 -p 7002 shutdown

关闭之后查看7006是否成为了主节点

7006变成了主节点 证明集群配置成功

下图为正常的

10-20秒左右查看集群状态发现 7006 已经成为主机,集群配置成功

主节点恢复后,主从关系会如何?主节点回来变成从机。

如果所有某一段插槽的主从节点都宕掉,redis服务是否还能继续?

如果某一段插槽的主从都挂掉,而cluster-require-full-coverage 为yes ,那么 ,整个集群都挂掉

如果某一段插槽的主从都挂掉,而cluster-require-full-coverage 为no ,那么,该插槽数据全都不能使用,也无法存储。

redis.conf中的参数 cluster-require-full-coverage

什么是slots

[OK] All 16384 slots covered.

一个 Redis 集群包含 16384 个插槽(hash slot), 数据库中的每个键都属于这 16384 个插槽的其中一个,

集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和 。

name 2 [0-5460]

集群中的每个节点负责处理一部分插槽。 举个例子, 如果一个集群可以有主节点, 其中:

节点 A 负责处理 0 号至 5460 号插槽。

节点 B 负责处理 5461 号至 10922 号插槽。

节点 C 负责处理 10923 号至 16383 号插槽。

在集群中录入值

在redis-cli每次录入、查询键值,redis都会计算出该key应该送往的插槽,如果不是该客户端对应服务器的插槽,redis会报错,并告知应前往的redis实例地址和端口。

redis-cli客户端提供了 –c 参数实现自动重定向。

如 redis-cli -c –p 7000登入后,再录入、查询键值对可以自动重定向。

不在一个slot下的键值,是不能使用mget,mset等多键操作。

可以通过{}来定义组的概念,从而使key中{}内相同内容的键值对放到一个slot中去。(按组分配插槽)

Redis 集群优点

实现扩容

分摊压力

无中心配置相对简单

Redis 集群的不足

多键操作是不被支持的

多键的Redis事务是不被支持的

由于集群方案出现较晚,很多公司已经采用了其他的集群方案,而代理或者客户端分片的方案想要迁移至redis cluster,需要整体迁移而不是逐步过渡,复杂度较大。

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

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

相关文章

pycharm 2023.2.3设置conda虚拟环境

分两步: (1)设置Virtualenv Environment (2)设值Conda Executable 加载conda环境,然后选择conda环境

异步 AIMD 收敛

给出的一直都是同步 AIMD 收敛,所以简单,但不至于 bbr 单流情形退化成简陋。 给出一个异步 AIMD 收敛过程是必要的,可见,它同样是简洁优美的: 虽然我没有标注太多,它始终没有成为一团乱麻。 和同步 AIM…

1-径向基(RBF)神经网络PID控制器仿真

1、内容简介 略 1-可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 4、参考论文 略 5、下载链接 链接:https://pan.baidu.com/s/1mNySkJC4voazGMLEEfIjDw 提取码:2exo

localhost知识

文章目录 一、localhost是什么?二、localhost 在平时用到的地方三、 localhost 与 127.0.01 一、localhost是什么? localhost 是一个特殊的主机名,通常指代本机。它被用来进行本地开发和测试,也常被用作网络配置中的占位符&#…

spring-代理模式

代理模式 一、概念1.静态代理2.动态代理 一、概念 ①介绍 二十三种设计模式中的一种,属于结构型模式。它的作用就是通过提供一个代理类,让我们在调用目标 方法的时候,不再是直接对目标方法进行调用,而是通过代理类间接调用。让不…

Qt Creator标准使用技巧

在任何一款编程的 IDE 软件里,都有相应的编程技巧。在这章里我们主要这两种最常用的技巧——Qt Creator 的快捷键的使用和 Qt 的帮助文档的使用。其中最重要的就是 Qt 的帮助文档里。可以说 Qt 帮助文档其实就是一本教程,任何其他的 Qt 教程都没有 Qt 文档写的详细,只不过是…

【JVM】垃圾回收机制

【JVM】垃圾回收机制 文章目录 【JVM】垃圾回收机制1. 方法区的回收2. 堆的回收2.1 引用计数法2.2 可达性分析算法 3. 对象引用3.1 强引用3.2 软引用3.3 弱引用3.4 虚引用和终结器引用 4. 垃圾回收算法4.1 标记清除算法4.2 复制算法4.3 标记整理算法4.4 分代垃圾回收算法 5. 垃…

FreeRTOS_信号量之二值信号量

目录 1. 信号量简介 2. 二值信号量 2.1 二值信号量简介 2.1.1 二值信号量无效 2.1.2 中断释放信号量 2.1.3 任务获取信号量成功 2.1.4 任务再次进入阻塞态 2.2 创建二值信号量 2.2.1 vSemaphoreCreateBinary() 2.2.2 xSemaphoreCreateBinary() 2.2.3 xSemaphoreCrea…

算法的时间复杂度及空间复杂度

目录 一、前言 二、时间复杂度 1.时间复杂度定义 2.时间复杂度描述方法 三、实例代码 实例1(取影响最大的项) 实例2(舍去系数) 实例3(不确定大小关系的用max函数取最大) 实例4(常数次的…

编译运行windows+OpenMVG+OpenMVS+vs2017

安装vcpkg过程需要翻墙!!! github下载代码 git clone https://github.com/microsoft/vcpkg git clone https://github.com/cdcseacave/VCG.git git clone https://github.com/cdcseacave/openMVS.git src安装vcpkg包 cd .\vcpkg .\bootstr…

“第五十五天”

定点数: 原码的乘法: 乘法的符号位是单独处理的(通过对被乘数和乘数的符号位进行异或实现),数值位去绝对值进行运算。这里的乘法实际上是通过多次加法实现的。 这里被乘数是放在x寄存器,乘数放在MQ寄存器…

【SpringBoot】Docker部署

docker部署是主流的部署方式,极大的方便了开发部署环境,保持了环境的统一,也是实现自动化部署的前提。 1 项目的目录结构 package: 点击打包,生成 xxx-SNAPSHOT.jar target目录: 打包生成目录,生成的jar存放位置Docke…

【网络安全】Seeker内网穿透追踪定位

Seeker追踪定位对方精确位置 前言一、kali安装二、seeker定位1、ngrok平台注册2、获取一次性邮箱地址3、ngrok平台登录4、ngrok下载5、ngrok令牌授权6、seeker下载7、运行seeker定位8、运行隧道开启监听9、伪装链接10、用户点击(获取定位成功)11、利用经…

iTransformer: INVERTED TRANSFORMERS ARE EFFECTIVE FOR TIME SERIES FORECASTING

#论文题目:ITRANSFORMER: INVERTED TRANSFORMERS ARE EFFECTIVE FOR TIME SERIES FORECASTING #论文地址:https://arxiv.org/abs/2310.06625 #论文源码开源地址:https://github.com/thuml/Time-Series-Library #论文所属会议:Mach…

基于单片机的智能清洁小车设计—控制系统设计

收藏和点赞,您的关注是我创作的动力 文章目录 概要 一、研究的主要内容和目标二、总体方案设计2.1智能清洁小车的硬件系统组成2.2智能清洁小车的硬件结构图 三、 小车结构设计5.1基本布局和功能分析5.2小车二维及三维图小车三维图: 四、 原理图程序 五、…

在CentOS 7中手工打造和运行xml文件配置的Servlet,然后使用curl、浏览器、telnet等三种工具各自测试

下载Openjdk并配置环境变量 https://jdk.java.net/java-se-ri/11-MR2是官网下载Openjdk 11的地方。 sudo wget https://download.java.net/openjdk/jdk11.0.0.1/ri/openjdk-11.0.0.1_linux-x64_bin.tar.gz下载openjdk 11。 sudo mkdir -p /usr/openjdk11创建目录&#xff…

UE5 日记(人物连招:蒙太奇动画通知(含视频链接))

教程https://www.youtube.com/watch?vsWpENaVGj2M&listPLiSlOaRBfgkcPAhYpGps16PT_9f28amXi&index10&ppiAQB 相关蓝图 连招逻辑 动画通知类 逻辑分析 1.用户输入 已搭载战斗系统模块,可以收到输入指令 2.连击 第一次攻击: 第一次攻击,…

vulnhub momentum 靶机复盘

环境配置 到学校了 原来的桥接配置要改 这里记录几个点备忘 1.virtualbox 桥接 未指定 重新安装驱动VBoxNetLwf.inf 2.配置完靶机启动失败 手动安装VBoxNetLwf.inf 不要用virtualbox自带的netlwfinstall 3.配置完nmap扫不到 rw init/bin/bash 进去看看网卡配置 信息收集…

C语言_字符串和内存函数

文章目录 前言一. strlen二. strcpy三.strcat四. strcmp (字符串比较)五. strncpy六. strncmp七. strstr八. strtok九 . strerror perror十. 字符分类函数十一. memcpy (内存拷贝)十二. memmove(可以重叠拷贝 也可以实现不重叠的内存拷贝) 前…

VC++程序崩溃时,使用Visual Studio静态分析dump文件

Window环境下的C程序如果发生异常崩溃,首先会和客户联系,让帮忙取特定目录下的dump文件和log文件来分析崩溃的原因。不过发生崩溃的话,从log一般分析不出特定原因,这时候dump文件就起作用了。可以通过Visual Studio和Windbg来静态…