redis--主从复制,哨兵模式,Redis Cluster模式

源码安装

[root@redis-node1 ~]# tar zxf redis-7.4.0.tar.gz
[root@redis-node1 ~]# ls
redis-7.4.0 redis-7.4.0.tar.gz#安装编译工具
[root@redis-node1 redis-7.4.0]# dnf install make gcc initscripts-10.11.6-
1.el9.x86_64 -y#执行编译命令
[root@redis-node1 redis-7.4.0]# make
[root@redis-node1 redis-7.4.0]# make install
[root@redis-node1 redis-7.4.0]# cd utils/
[root@redis-node1 utils]# ./install_server.sh 
Welcome to the redis service installer
This script will help you easily set up a running redis serverThis systems seems to use systemd.
Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry![root@redis-node1 utils]# vim install_server.sh 
把以下注释

在这里插入图片描述

[root@redis-node1 utils]# ./install_server.sh 
Welcome to the redis service installer
This script will help you easily set up a running redis serverPlease select the redis port for this instance: [6379] 
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] 
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server] 
Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!

主从复制

主库
redis配置文件

[root@redis-node1 utils]# vim /etc/redis/6379.conf 
bind * -::*
protected-mode no[root@redis-node1 utils]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...
[root@redis-node1 utils]# netstat -antlpe | grep redis
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      0          71315      43749/redis-server  
tcp6       0      0 :::6379                 :::*                    LISTEN      0          71316      43749/redis-server  
[root@redis-node2 utils]# redis-cli

配置slave节点

root@redis-node2 & 3 ~]# vim /etc/redis/6379.conf
replicaof 192.168.136.10 6379
[root@redis-node2 & 3 ~]# /etc/init.d/redis_6379 restart
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
Starting Redis server...

测试效果

#在master节点
[root@redis-node1 utils]# redis-cli
127.0.0.1:6379> set name wen
OK#在slave节点
[root@redis-node2 utils]# redis-cli
127.0.0.1:6379> get name
"wen"

哨兵的实验过程

在所有阶段中关闭 protected-mode no

1.在master节点中

#编辑配置文件
[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
protected-mode no #关闭保护模式
port 26379 #监听端口
daemonize no #进入不打如后台
pidfile /var/run/redis-sentinel.pid #sentinel进程pid文件
loglevel notice #日志级别
sentinel monitor mymaster 172.25.254.100 6379 2 #创建sentinel监控监控master主
机,2表示必须得到2票
sentinel down-after-milliseconds mymaster 10000 #master中断时长,10秒连不上视为
master下线
sentinel parallel-syncs mymaster 1 #发生故障转移后,同时开始同步新
master数据的slave数量
sentinel failover-timeout mymaster 180000 #整个故障切换的超时时间为3分钟
####复制配置文件到其他阶段
[root@redis-node1 redis-7.4.0]# scp /etc/redis/sentinel.conf
root@172.25.254.201:/etc/redis/
root@172.25.254.201's password:
sentinel.conf
100% 14KB 9.7MB/s 00:00
[root@redis-node1 redis-7.4.0]# scp /etc/redis/sentinel.conf
root@172.25.254.200:/etc/redis/
root@172.25.254.200's password:
sentinel.conf

启动服务

在每台redis上开启

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

测试:

 在开一个master节点终端 
[root@redis-node1 ~]# redis-cli 
127.0.0.1:6379> SHUTDOWN

node2变成主

在这里插入图片描述

node3上查看

在这里插入图片描述

127.0.0.1:6379> slaveof 192.168.136.20 6379
OK Already connected to specified master
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.136.20
master_port:6379
master_link_status:up

Redis Cluster(无中心化设计)

Redis Cluster 工作原理

在哨兵sentinel机制中,可以解决redis高可用问题,即当master故障后可以自动将slave提升为master, 从而可以保证redis服务的正常使用,但是无法解决redis单机写入的瓶颈问题,即单机redis写入性能受 限于单机的内存大小、并发数量、网卡速率等因素。 redis 3.0版本之后推出了无中心架构的redis cluster机制,在无中心的redis集群当中,其每个节点保存 当前节点数据和整个集群状态,每个节点都和其他所有节点连接

Redis Cluster特点如下
  1. 所有Redis节点使用(PING机制)互联
  2. 集群中某个节点的是否失效,是由整个集群中超过半数的节点监测都失效,才能算真正的失效
  3. 客户端不需要proxy即可直接连接redis,应用程序中需要配置有全部的redis服务器IP
  4. redis cluster把所有的redis node 平均映射到 0-16383个槽位(slot)上,读写需要到指定的redis node上进行操作,因此有多少个redis node相当于redis 并发扩展了多少倍,每个redis node 承担 16384/N个槽位
  5. dis cluster预先分配16384个(slot)槽位,当需要在redis集群中写入一个key -value的时候,会使 用CRC16(key) mod 16384之后的值,决定将key写入值哪一个槽位从而决定写入哪一个Redis节点 上,从而有效解决单机瓶颈。

部署redis cluster

在所有redis主机中
[root@redis-node110 redis-7.4.0]# 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-node110 redis-7.4.0]# systemctl enable --now redis
Created symlink /etc/systemd/system/multi-user.target.wants/redis.service → /usr/lib/systemd/system/redis.service.
[root@redis-node110 redis-7.4.0]# netstat -launpt | grep 6379
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      1794/redis-server * 
tcp6       0      0 :::6379                 :::*                    LISTEN      1794/redis-server * 
创建redis-cluster
[root@redis-node1 redis-7.4.0]# redis-cli --cluster create -a 123456 \
192.168.136.10:6379 192.168.136.20:6379 192.168.136.30:6379 \ 192.168.136.110:6379 192.168.136.120:6379 192.168.136.130:6379 \ --cluster-replicas 1

在这里插入图片描述

集群检测状态

在这里插入图片描述

[root@redis-node2 redis-7.4.0]# redis-cli --cluster info -a 123456 192.168.136.30:6379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.136.30:6379 (85928e72...) -> 0 keys | 5461 slots | 1 slaves.
192.168.136.10:6379 (5da76046...) -> 0 keys | 5461 slots | 1 slaves.
192.168.136.20:6379 (4cb98fbc...) -> 0 keys | 5462 slots | 1 slaves.
[OK] 0 keys in 3 masters.

写入数据

[root@redis-node1 redis-7.4.0]# redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> set k1 v1
(error) MOVED 12706 192.168.136.30:6379  ##被分配到30的hash槽位上[root@redis-node3 redis-7.4.0]# redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> set k1 v1
OK

集群扩容

[root@redis-node1 redis-7.4.0]# redis-cli -a 123456 --cluster add-node 192.168.136.40:6379 192.168.136.10:6379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Adding node 192.168.136.40:6379 to cluster 192.168.136.10:6379
>>> Performing Cluster Check (using node 192.168.136.10:6379)
M: 5da76046c8cce9925bef467b06155561bdae19c9 192.168.136.10:6379slots:[0-5460] (5461 slots) master1 additional replica(s)
M: 4cb98fbc01e9d3c740ac79c8a98a2a4a4d847bc0 192.168.136.20:6379slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: 9d3716e91c95a056c7699cfb56cd4f80dc00eb3b 192.168.136.110:6379slots: (0 slots) slavereplicates 85928e72c75434ca003e0e89354e0c3a7d3deb1d
M: 85928e72c75434ca003e0e89354e0c3a7d3deb1d 192.168.136.30:6379slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: 3022a4a6d05e55111261699bea46234008710ba9 192.168.136.120:6379slots: (0 slots) slavereplicates 5da76046c8cce9925bef467b06155561bdae19c9
S: 1314726e5f3156b1adb086b50b1b4bdb211bb0e8 192.168.136.130:6379slots: (0 slots) slavereplicates 4cb98fbc01e9d3c740ac79c8a98a2a4a4d847bc0
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.136.40:6379 to make it join the cluster.
[OK] New node added correctly.

在这里插入图片描述

分配槽位

[root@redis-node1 redis-7.4.0]# redis-cli -a 123456 --cluster reshard 192.168.136.10:6379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing Cluster Check (using node 192.168.136.10:6379)
M: 5da76046c8cce9925bef467b06155561bdae19c9 192.168.136.10:6379slots:[0-5460] (5461 slots) master1 additional replica(s)
M: 4cb98fbc01e9d3c740ac79c8a98a2a4a4d847bc0 192.168.136.20:6379slots:[5461-10922] (5462 slots) master1 additional replica(s)
M: 70a8cbeb421698b737592c053343db8a68848a14 192.168.136.40:6379slots: (0 slots) master
S: 9d3716e91c95a056c7699cfb56cd4f80dc00eb3b 192.168.136.110:6379slots: (0 slots) slavereplicates 85928e72c75434ca003e0e89354e0c3a7d3deb1d
M: 85928e72c75434ca003e0e89354e0c3a7d3deb1d 192.168.136.30:6379slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: 3022a4a6d05e55111261699bea46234008710ba9 192.168.136.120:6379slots: (0 slots) slavereplicates 5da76046c8cce9925bef467b06155561bdae19c9
S: 1314726e5f3156b1adb086b50b1b4bdb211bb0e8 192.168.136.130:6379slots: (0 slots) slavereplicates 4cb98fbc01e9d3c740ac79c8a98a2a4a4d847bc0
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 4096
What is the receiving node ID? 70a8cbeb421698b737592c053343db8a68848a14
Please enter all the source node IDs.Type 'all' to use all the nodes as source nodes for the hash slots.Type 'done' once you entered all the source nodes IDs.
Source node #1: all
yes

添加salve

[root@redis-node1 redis-7.4.0]# redis-cli -a 123456 --cluster add-node 192.168.136.140:6379 192.168.136.10:6379 --cluster-slave --cluster-master-id 70a8cbeb421698b737592c053343db8a68848a14

检查集群

在这里插入图片描述

clsuter集群维护

添加节点的时候是先添加node节点到集群,然后分配槽位,删除节点的操作与添加节点的操作正好相 反,是先将被删除的Redis node上的槽位迁移到集群中的其他Redis node节点上,然后再将其删除,如 果一个Redis node节点上的槽位没有被完全迁移,删除该node的时候会提示有数据且无法删除。

在这里插入图片描述

Do you want to proceed with the proposed reshard plan (yes/no)? yes

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

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

相关文章

【计算机网络】名词解释--网络专有名词详解

在网络通信中,有许多专业术语和概念,它们共同构成了网络通信的基础。以下是一些常见的网络术语及其定义和相互之间的关系: 一、网络基础 1.1 电路交换:电路交换是一种在数据传输前建立专用通信路径的通信方式。在通信开始前&…

如何使用ssm实现品牌手机销售信息系统

TOC ssm246品牌手机销售信息系统jsp 第一章 绪 论 1.1背景及意义 系统管理也都将通过计算机进行整体智能化操作,对于品牌手机销售信息系统所牵扯的管理及数据保存都是非常多的,例如管理员;主页、个人中心、用户管理、商品分类管理、商品信…

Linux数据相关第1个服务_备份服务rsync

1、备份服务概述 备份服务:需要使用到脚本,打包备份,定时任务 备份服务:rsyncd 服务,不同主机之间数据传输 特点: rsync是个服务也是命令使用方便,具有多种模式传输数据的时候是增量传输 增量与全量&am…

跟着B站前端面试总结回顾前端基础知识(一)

组件划分标准 组件划分_哔哩哔哩_bilibili 在前端Vue开发中,组件的划分是构建高效、可维护应用的关键步骤。Vue组件的划分标准通常基于多个方面的考虑,包括但不限于功能独立性、复用性、可维护性和可扩展性。以下是一些Vue组件划分的标准: …

使用CORS解决跨域问题

CORS(Cross-Origin Resource Sharing)跨域资源共享 因为浏览器的同源策略才出现了跨域问题。 CORS是一套机制,用于浏览器校验跨域请求。 它的基本理念是: 只要服务器明确表示允许,则校验通过服务器明确拒绝或没有表…

二分查找【算法 09】

二分查找算法详解 二分查找(Binary Search)是一种高效的查找算法,前提是数据必须是有序的。相比于线性查找,二分查找的时间复杂度从 O(n) 降低到了 O(log n),适合处理大规模的数据查找问题。本文将详细介绍二分查找的原…

浅谈二分算法

浅谈二分算法 二分 首先知道一下二分是什么。 二分,是一种快速处理大型数据的方法。基本逻辑是折半查找。 设有一个共有 n n n 个数字的数组,要从中查询某个元素,就可以用二分查找。 注:这里的数组默认其成员数值具有单调性…

【STM32】串口(异步通信部分)

经典的串口接口硬件说实话在现在的电脑上已经很难见到了,而是被USB这种通用的串行接口替代了,哪怕外部设备要以串口连接到电脑,都需要进行各种硬件转换。但不得不说,在工业领域,串口还是一个非常常用的数据传输方式。 …

vue3 语法糖<script setup>

在 Vue 3 中&#xff0c;<script setup>是一种新的语法糖&#xff0c;它极大地简化了组件的编写方式。 <script setup> 是在单文件组件 (SFC) 中使用组合式 API 的编译时语法糖。当同时使用 SFC 与组合式 API 时该语法是默认推荐。 基本概念 简洁的语法&#xf…

国产GD32单片机开发入门(二)GD32单片机详解

文章目录 一.概要二.单片机型号命名规则三.GD32F103系统架构四.GD32F103C8T6单片机启动流程五.GD32F103C8T6单片机主要外设资源六.单片机开发过程中查看芯片数据手册的必要性1.单片机外设资源情况2.GD32单片机内部框图3.GD32单片机管脚图4.GD32单片机每个管脚功能5.单片机功耗数…

解决前端访问IIS服务器发生跨域请求报错的方法

现在WEB开发都是前后端分离的模式了&#xff0c;当前端代码访问后端WEB服务器时&#xff0c;经常会发生跨域请求报错的问题。   如果是IIS服务器&#xff0c;可以通过下面的方式轻松解决。   由于出现跨域问题是因为服务器返回的页面在返回头中没有设置“Access-Control-Al…

SQL Server数据库 创建表,和表的增删改查

打开SQL Server工具,连接服务器 右击数据库&#xff0c;创建新的数据库 新建表 填写列&#xff0c;我添加了Id,Name,Sex,Age,和class列 右键表刷新一下就有了 我又同时创建了一个Class表 点击新建查询&#xff0c;现在写代码添加数据&#xff0c;也可以操作表来对数据进行添加 …

[CLIP-VIT-L + Qwen] 多模态大模型源码阅读 - DataSet篇

[CLIP-VIT-L Qwen] 多模态大模型源码阅读 - DataSet篇 前情提要源码解读完整代码逐行解读导包readjson函数data_collate函数ImageCaptionDataset类&#xff08;init函数&#xff09;ImageCaptionDataset类&#xff08;readImage函数&#xff09; 参考repo:WatchTower-Liu/VLM-…

趋动科技 OrionX on VMware 打造 AI 就绪平台

着科技进步和产业变革的加速演进&#xff0c;人工智能&#xff08;AI&#xff09;已经成为兵家必争之地。今年以来伴随着ChatGPT带来的鲶鱼效应&#xff0c;人工智能成为科技产业创新的焦点&#xff0c;其应用范围越来越广泛&#xff0c;并将持续发展。科技产业龙头正加大在人工…

Redis入门指南

Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的高性能键值对存储系统&#xff0c;它支持多种数据结构&#xff0c;如字符串、哈希、列表、集合、有序集合等。Redis因其快速的读写能力、丰富的数据类型和灵活的操作而广泛应用于缓存、消息队列、实时分析等…

链接 -- 动静态链接 --特点、区别、静态库安装下载

1.链接是什么&#xff1f; 我们的程序&#xff0c;和 库&#xff08;语言一定会有自己的标准库&#xff09; 结合的过程就叫做链接。 2.为什么有链接&#xff1f; 让开发站在巨人的肩膀&#xff0c;提高开发效率。 c语言库&#xff1a; ls /user/include/ 动静态库的特点与区别…

力扣面试经典算法150题:O(1) 时间插入、删除和获取随机元素

O(1) 时间插入、删除和获取随机元素 今天的题目是力扣面试经典150题中的数组的中等难度题&#xff1a; O(1) 时间插入、删除和获取随机元素。 题目链接&#xff1a;https://leetcode.cn/problems/insert-delete-getrandom-o1/description/?envTypestudy-plan-v2&envIdtop…

Oracle问题笔记

ORA-28040 没有匹配的验证协议 问题出现场景oracle数据库为12c,应用使用的jdbc或客户端工具是11g版本一下&#xff0c;连接12c数据库时会报ora-28040错误。解决办法在Oracle服务端的$ORACLE_HOME/network/admin/sqlnet.ora文件中添加&#xff1a; SQLNET.ALLOWED_LOGON_VERSI…

第4章 汇编语言和汇编软件

第4章 汇编语言和汇编软件 该章主要介绍了汇编语言和汇编语言编译器的安装和使用。 汇编语言程序 该小节主要介绍了为什么要有汇编语言和汇编语言程序的一些基础写法。 书中有提到CPU有不同的架构&#xff0c;汇编语言有不同的风格&#xff0c;那么不同的CPU架构和不同的汇…

日常维护交换机,看看这些老网工怎么说

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 晚上好&#xff0c;我的网工朋友。 交换机作为连接各个节点的核心设备&#xff0c;其稳定性和可靠性直接关系到整个网络系统的健康运行。 路由器…