Redis集群技术

news2024/11/16 22:00:22

目录

一、Redis安装部署

二、Redis主从复制

三、Redis哨兵模式

1、开启Redis哨兵模式

2、Redis哨兵模式选举MASTER全过程

3、Redis哨兵模式数据丢失风险的解决方案

四、Redis Cluster

1、Redis集群部署

2、Redis集群扩容

1、加入MASTER集群

2、分配槽位

3、添加slave节点

3、Redis集群维护

1、移除槽位

2、移除MASTER及SLAVE


一、Redis安装部署

实验环境:基于红帽9系统搭建Redis一主两从集群架构

源码安装

[root@redis-node1 ~]# tar zxf redis-7.4.0.tar.gz

[root@redis-node1 ~]# dnf install make gcc initscripts-10.11.5-1.el9.x86_64 -y

#执行编译命令
[root@redis-node1 redis-7.4.0]# make
[root@redis-node1 redis-7.4.0]# make install

启动Redis

[root@redis-node1 utils]# vim install_server.sh
#bail if this system is managed by systemd
_pid_1_exe="$(readlink -f /proc/1/exe)"
#if [ "${_pid_1_exe##*/}" = systemd ]
#then
#       echo "This systems seems to use systemd."
#       echo "Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!"
#       exit 1
#fi

[root@redis-node1 utils]# ./install_server.sh

#配置redis
[root@redis-node1 utils]# vim /etc/redis/6379.conf
bind * -::*
protected-mode no	#关闭protected模式

[root@redis-node1 ~]# /etc/init.d/redis_6379 restart
[root@redis-node1 utils]# redis-cli
127.0.0.1:6379> 

拷贝文件至其他主机

[root@redis-node1 bin]# scp -r redis-7.4.0 root@172.25.254.20:/root
[root@redis-node1 bin]# cd /usr/local/bin/
[root@redis-node1 bin]# rsync -al * root@172.25.254.20:/usr/local/bin

二、Redis主从复制

主从同步原理:Redis 主从同步通过全量复制和增量复制机制实现数据的一致性。初次连接时,从服务器通过主服务器的 RDB 快照或 AOF 文件进行全量数据同步,之后主服务器会将增量的写操作日志异步地发送给从服务器,以保持数据实时更新。这种机制支持负载均衡和高可用性。

配置slave节点

[root@redis-node2 & 3 ~]# vim /etc/redis/6379.conf
replicaof 172.25.254.10 6379
[root@redis-node2 & 3 ~]# /etc/init.d/redis_6379 restart

三、Redis哨兵模式

1、开启Redis哨兵模式

Redis 哨兵模式通过监控 Redis 主服务器的状态,实现高可用性和自动故障转移。哨兵节点持续检查主服务器的健康状况,当主服务器发生故障时,自动选举新的主服务器并更新从服务器的配置。它还提供客户端通知和配置更新功能,确保 Redis 集群在故障情况下能够继续运行。

#编辑配置文件
[root@redis-node1 ~]# cd redis-7.4.0/
[root@redis-node1 redis-7.4.0]# cp sentinel.conf /etc/redis/
[root@redis-node1 redis-7.4.0]# vim /etc/redis/sentinel.conf
sentinel monitor mymaster 172.25.254.10 6379 2
sentinel down-after-milliseconds mymaster 10000
[root@redis-node1 redis-7.4.0]# scp /etc/redis/sentinel.conf root@172.25.254.20:/etc/redis/sentinel.conf
[root@redis-node1 redis-7.4.0]# scp /etc/redis/sentinel.conf root@172.25.254.30:/etc/redis/sentinel.conf

[root@redis-node1 redis]# cp sentinel.conf sentinel.conf.bak
#哨兵模式会更改配置文件内容,备份便于还原

开启哨兵模式

[root@redis-node1 redis-7.4.0]# redis-sentinel /etc/redis/sentinel.conf

2、Redis哨兵模式选举MASTER全过程

关闭master主机172.25.254.10,观察从机

从master主机下线到上线全过程:

初始化阶段

主节点故障检测阶段

选举master阶段

故障转移阶段

故障恢复阶段

172.25.254.20被选举为新的master

#上线故障主机172.25.254.10
[root@redis-node1 ~]# /etc/init.d/redis_6379 start

故障主机恢复后成为slave主机master为新选举的主机172.25.254.20

3、Redis哨兵模式数据丢失风险的解决方案

在生产环境的 Redis 哨兵模式中,当 master 和 slave 之间出现网络故障时,由于哨兵的作用,master 可能会被提出。网络恢复后,master 发现环境变化会将自己转变为 slave,且转变后会清除网络故障期间写入自身的数据,从而导致数据丢失。为解决这个问题,可以让 master 在被写入数据时持续连接 slave,只有当确保有两个 slave 可以写入时才允许写入数据,若 slave 数量少于两个则拒绝写入,以此方式来保障数据的完整性和一致性,避免因网络故障导致的数据丢失问题。

#在master中设定
[root@redis-node3 ~]# redis-cli
127.0.0.1:6379> CONFIG GET min-slaves-to-write
1) "min-slaves-to-write"
2) "0"
127.0.0.1:6379>  CONFIG set min-slaves-to-write 2
OK
127.0.0.1:6379> CONFIG GET min-slaves-to-write
1) "min-slaves-to-write"
2) "2"
#如果要永久保存写到配置文件中/etc/redis/6379.conf
[root@redis-node3 ~]# vim /etc/redis/6379.conf
protected-mode no
min-slaves-to-write 2

四、Redis Cluster

1、Redis集群部署

Redis Cluster 是一种分布式 Redis 解决方案。它将数据自动分片存储在多个 Redis 节点上,每个节点负责一部分哈希槽。客户端可以连接到任意一个节点,该节点会将请求转发到负责相应数据的节点进行处理。节点之间通过 gossip 协议进行通信,不断交换节点状态信息,实现故障检测和自动故障转移。当某个节点出现故障时,其他节点会重新分配故障节点的哈希槽,保证集群的高可用性和数据的持续可访问性。同时,Redis Cluster 支持主从复制,每个主节点都有一个或多个从节点,用于数据备份和故障恢复。

实验环境:基于红帽9系统搭建Redis三组三从集群架构

1.每个redis node节点采用相同的硬件配置、相同的密码、相同的redis版本。

2.每个节点必须开启的参数 cluster-enabled yes #必须开启集群状态,开启后redis进程会有cluster显示 cluster-config-file nodes-6380.conf #此文件有redis cluster集群自动创建和维护,不需要任何手 动操作

3.所有redis服务器必须没有任何数据

4.先启动为单机redis且没有任何key value

RPM方式安装Redis

[root@redis-nodex redis-7.4.0]# yum install redis -y
#所有主机安装Redis

部署Redis Cluster

[root@redis-nodex ~]# vim /etc/redis/redis.conf
bind * -::*
masterauth "123456" #集群主从认证
requirepass "123456" #redis登陆密码 redis-cli 命令连接redis后要
用“auth 密码”进行认证
cluster-enabled yes #开启cluster集群功能
cluster-config-file nodes-6379.conf #指定集群配置文件
cluster-node-timeout 15000 #节点加入集群的超时时间单位是ms

[root@redis-node1 ~]# for i in 20 30 110 120 130; do scp /etc/redis/redis.conf root@172.25.254.$i:/etc/redis/redis.conf ; done

[root@redis-nodex ~]# systemctl enable --now redis

redis-cli --cluster 参数说明

[root@redis-nodex~]# redis-cli --cluster help
Cluster Manager Commands:
 create         host1:port1 ... hostN:portN #创建集群
                 --cluster-replicas <arg> #指定master的副本数
 check         <host:port> or <host> <port> #检测集群信息
 info           <host:port> or <host> <port> #查看集群信息
 fix           <host:port> or <host> <port> #修复集群
 reshard       <host:port> or <host> <port> #在线热迁移集群指定主机的slots数据
          
 rebalance     <host:port> or <host> <port> #平衡各集群主机的slot数量
       
 add-node       new_host:new_port existing_host:existing_port #添加主机
 del-node       host:port node_id #删除主机
 import         host:port #导入外部redis服务器的数据到
当前集群

redis-cli --cluster配置

[root@redis-node1 ~]# redis-cli --cluster create -a 123456 \
> 172.25.254.10:6379 172.25.254.20:6379 172.25.254.30:6379 \
> 172.25.254.110:6379 172.25.254.120:6379 172.25.254.130:6379 \
> --cluster-replicas 1

redis-cli -a 123456 --cluster info 172.25.254.10:6379
该命令用于获取 Redis Cluster 的集群信息。
redis-cli -a 123456 --cluster check 172.25.254.10:6379
此命令用于检查 Redis Cluster 的健康状态和配置。
[root@redis-node1 ~]# redis-cli -a 123456
127.0.0.1:6379> set name mlh
(error) MOVED 5798 172.25.254.20:6379
#Redis Cluster 使用哈希槽(hash slot)将数据分布在不同的节点上。当客户端向一个节点发送命令时,如果该节点确定该键对应的哈希槽不属于自己管理,它就会返回一个 “MOVED” 错误,引导客户端去正确的节点进行操作。
127.0.0.1:6379> set name mlh
OK
在哈希槽对应的节点172.25.254.20则可以写入数据
127.0.0.1:6379> get name
(error) MOVED 5798 172.25.254.20:6379
#slave设备也不能查看数据,当172.25.254.20主机出现故障时才会迁移数据到本机

2、Redis集群扩容

加入一个组从架构master172.25.254.40/slave172.25.254.140

1、加入MASTER集群

#加入master集群
[root@redis-node1 ~]# redis-cli -a 123456 --cluster add-node 172.25.254.40:6379 172.25.254.10:6379

2、分配槽位

#分配槽位
[root@redis-node1 ~]# redis-cli -a 123456 --cluster reshard 172.25.254.10:6379

3、添加slave节点

#添加slave
[root@redis-node1 ~]# redis-cli -a 123456 --cluster add-node 172.25.254.140:6379 172.25.254.10:6379 --cluster-slave --cluster-master-id a0cceb8d1d0c13a10289f4348532d16bc85b2aa0

3、Redis集群维护

Redis中集群的移除操作

注意:先转移槽位再删除主机

在 Redis 集群中先移除槽位再删除主机是为了确保集群的稳定性和数据的完整性。如果先删除主机,而该主机上仍有负责的槽位,那么这些槽位对应的数据将无法被正确访问和处理,可能导致数据丢失或集群状态混乱。而先移除槽位可以将数据的存储责任安全地转移到其他节点上,保证在删除主机时,集群中没有因该主机的突然消失而产生的数据不可用问题,从而使整个移除操作更加有序和可靠。

1、移除槽位

#移除槽位
[root@redis-node1 ~]# redis-cli -a 123456 --cluster reshard 172.25.254.10:6379

2、移除MASTER及SLAVE

#删除master及slave
[root@redis-node1 ~]# redis-cli -a 123456 --cluster del-node 172.25.254.40:6379  a0cceb8d1d0c13a10289f4348532d16bc85b2aa0

[root@redis-node1 ~]# redis-cli -a 123456 --cluster del-node  172.25.254.140:6379 0a9202c430e925760c3cd5b5415c1545b880e2ea

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

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

相关文章

Linux:开发工具(3)

一、版本控制器git 安装git指令 yum install git 1.1 举例理解版本控制器 举个例子&#xff1a; 比方说老师要求我们交一份实验报告&#xff0c;而你的室友张三是一个非常勤奋的人&#xff0c;所以他很早就写好了第一版交给老师&#xff0c;但老师的要求很高&#xff0c;他觉得…

将 github 仓库同步到个人服务器

场景 把本地项目推送到Github仓库后&#xff0c;如果想部署到服务器上&#xff0c;可以尝试此方案 我的博客是hugo搭建的&#xff0c;每次更新文章会手动推送到Github仓库&#xff0c; 然后利用Actions 脚本自动推送到cf或者vercel 之前我写过一篇 将 hugo 博客搬迁到服务器…

STM案例一:灯闪烁

一、使用元件 STlink&#xff0c;STM32F103C8T6 二、接线方法 STM32与STLINK的接线方法为&#xff1a; GND-->GND DCLK-->SWCLK DIO-->SWDIO 3.3-->3.3V 三、配置调试器 选择魔术棒按钮&#xff0c;单击Debug&#xff0c;选择ST-link Debug&#xff0c;选…

免费JSON在线解析工具网址

1&#xff0c;https://tool.juhe.cn/ JSON在线解析 (juhe.cn) 2&#xff0c;https://www.sojson.com/ JSON在线 | JSON解析格式化—SO JSON在线工具

阿卡迈2.0逆向

阿卡迈&#xff08;akamai&#xff09;我也是第一次第一次搞 阿卡迈检测挺多例如 ua 屏幕 document 自动化检测等等 &#xff0c;还有tls指纹 仅供学习参考吧 当cookie的_abck为 0表示通过&#xff0c;1表示不通过&#xff01;&#xff01;&#xff01; 测试了两个2.0站全都通…

一款特别牛逼还免费的屏幕演示批注注释工具,教学演示工具

功能强大&#xff0c;还免费&#xff01;PEVO Annotator 是一款功能强大的屏幕标注软件&#xff0c;广泛应用于教学演示、屏幕录像等场景。该软件支持多种操作系统&#xff0c;包括 macOS 和 Windows 。它提供了丰富的工具和功能&#xff0c;如画笔、直线、圆形、方形等形状绘制…

【海思3516DV500 | 开发环境】编译整个SDK全过程以及问题汇总

一、开发环境 上表是海思提供的Hi3519DV500 开发环境的各部分软件描述&#xff0c;实际用起来你就知道&#xff0c;可能有出入&#xff0c;尝试换Ubuntu 20.04折腾了好几天都不行&#xff0c;使用推荐的Ubuntu 18.04.2 64bit一个上午就行。 基本的硬件要求如下&#xff1a; ●…

Qt 解析多级XML

补充笔记&#xff1a;Qt 史上最详细 - “操作XML文件” - 笔记 一、如下图为XML文件 annotation为根节点&#xff0c; first第一节点&#xff0c;second第二节点&#xff0c;third第三节点。 二、实现解析xml文件&#xff0c;并将解析数据用QTreeView显示&#xff0c;实现代码…

AD9161调试问题

AD961同步信号SYNC无法保持高逻辑电 现象 配置ADF4351时钟芯片使其产生频率为1.6GHz的时钟为AD9161提供工作时钟&#xff0c;JESD的线速率配置为8Gbps&#xff0c;并配置AD9161的寄存器使其工作在2x内插模式以实现IQ信号的模数转换模式。同时根据AD9161芯片手册对ADF4351提供的…

NoSql数据库 Redis集群详解

目录 一、NoSql数据库简介 1.1 数据库主要分为两大类&#xff1a;关系型数据库与 NoSQL 数据库 1.2 为什么还要用 NoSQL 数据库呢&#xff1f; 1.3 RDBMS和NOSQL的特点及优缺点&#xff1a; 二 Remote Dictionary Server 简介&#xff08;redis&#xff09; 2.1 什么是redis …

如何使用ssm实现物资进销存jsp

TOC ssm263物资进销存jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。这样的…

JavaScript学习文档(4):循环结构、初识数组、数组案例、操作数组

目录 一、循环结构 1、for语句 2、for循环案例 3、for循环嵌套及案例 4、while语句 5、continue关键字 6、break关键字 二、初识数组 1、什么是数组 2、为什么要数组 3、数组的基本使用 三、数组案例 1、数组求和及平均值 2、数组求最大值和最小值 四、操作数组…

做集运初期到底要不要上系统?

在集运业务的起步阶段&#xff0c;很多老板都会有这样的疑问&#xff1a;“我的包裹量还不多&#xff0c;真的需要投入资金和时间来上系统吗&#xff1f;”这个问题听起来合理&#xff0c;但实际上却忽视了业务发展中更为重要的几个方面。 1.用户体验&#xff1a;服务的核心 首…

C语言经典案例分享

题目&#xff1a;输入三个整数 x、y、z&#xff0c;请把这三个数由小到大输出。 程序分析&#xff1a;我们想办法把最小的数放到 x 上&#xff0c;先将 x 与 y 进行比较&#xff0c;如果 x>y 则将 x 与 y 的值进行交换&#xff0c;然后再用 x 与 z 进行比较&#xff0c;如果…

NVIDIA Jetson AGX Orin源码编译安装CV-CUDA

目录 1 下载源码并配置 2 编译安装CV-CUDA 2.1 安装相应依赖包 2.2 升级gcc到gcc-11 2.3 build 2.4 升级cmake 2.5 再次build 2.5.1 报错 /usr/include/c/11/bits/std_function.h:435:145: error: parameter packs not expanded with ‘...’: 3 直接使用安装包 参考…

力扣: 两两交换链表中的节点

文章目录 需求代码代码解释结尾 需求 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;…

jmeter性能测试之CSV 数据文件设置

文章目录 业务场景使用步骤步骤1&#xff1a;准备数据步骤二: 编写csv文件步骤三:添加CSV 数据文件设置步骤四:定义接口&#xff0c;选择文件上传&#xff0c;文件名称通过“浏览”添加即可 业务场景 有一个文件上传的接口&#xff0c;希望每个线程上传不同的文件&#xff08;比…

FOFA搜索引擎的语法

FOFA 是一款网络空间搜索引擎&#xff0c;允许用户通过自定义查询语法来检索全球范围内的互联网资产。FOFA 提供了丰富的语法&#xff0c;可以帮助用户筛选目标。以下是 FOFA 语法的基本介绍&#xff1a; 1. 基本语法格式 FOFA 的查询语句遵循以下格式&#xff1a; 字段&quo…

MVVM分层思想

M:Model数据模型 V:View视图 VM:ViewModel视图模型 Vue也是借鉴了MVVM的思想 在Vue中,M就是data,V指挂载点,而Vue实例本身就是一个VM <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X…

前端手写源码系列(二)——手写call、apply、bind

手写源码系列目录 一、作用二、手写call方法三、手写apply方法四、手写bind方法五、三者区别applycallbind小结 一、作用 call、apply、bind作用是改变函数执行时的上下文&#xff0c;简而言之就是改变函数运行时的this指向 那么什么情况下需要改变this的指向呢&#xff1f;下…