2024-01-26-redis集群

为什么要搭建集群

  1. 高可用性:Redis集群可以提供高可用性,即使其中的一台节点发生故障,其他节点仍然可以继续提供服务。当一个节点下线时,集群会自动将负载均衡到其他可用节点上,从而保证系统的稳定性和可用性。

  2. 扩展性:Redis集群可以水平扩展,允许在需要更多内存或处理能力时添加更多的节点。通过将数据分布在多个节点上,集群可以处理更大规模的数据和更高的并发请求,以满足系统的增长需求。

  3. 性能提升:由于Redis集群可以将数据分散到多个节点上进行处理,因此可以实现并行处理和负载均衡,从而提高系统的整体性能。每个节点都可以处理一部分请求,减轻单个节点的负担,提高响应速度。

  4. 数据复制和持久化:Redis集群支持数据复制和持久化机制,可以确保数据在多个节点之间的同步和备份。当一个节点发生故障时,可以从其他节点中获取备份数据,并快速恢复系统的正常运行。

  5. 故障恢复:Redis集群可以自动检测并快速恢复节点故障。当一个节点宕机或无法访问时,集群会自动将该节点标记为不可用,并将请求路由到其他可用节点上,从而保证系统的连续性和可用性。

通过搭建Redis集群,可以提高系统的可靠性、扩展性和性能,以满足大规模应用对数据存储和处理的需求。

配置集群所需的环境

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

        要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。因为我没有那么多服务器,也启动不了那么多虚拟机,所在这里搭建的是伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号为(7001-7006),当然实际生产环境的Redis集群搭建和这里是一样的。

        规划网络

        这里我们用一台虚拟机,使用六个reids节点来模拟

        创建redis节点

                自定义个目录来存放这些节点的文件

mkdir /usr/myredis

                在该目录下分别创建出六个节点的目录

mkdir  7001 7002 7003 7004 7005 7006

                在7001中配置redis.conf文件

#   指令(切记先切到7001目录下)
vim redis.conf# 配置文件的内容(切忌配置密码,如果你引入的配置文件中设置了密码,请将密码去除)
include /redis/redis-5.0.14/redis.conf
port 7001
pidfile "/var/run/redis_7001.pid"
dbfilename "dump_7001.rdb"
dir "/usr/myredis/7001"
logfile "/usr/myredis/7001/redis_err_7001.log"
bind 0.0.0.0
protected-mode no
daemonize yescluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000

                 将该配置文件复制到每个节点目录下

echo ./7002 ./7003 ./7004 ./7005 ./7006 | xargs -n 1 cp -v /usr/myredis/7001/redis.conf

                将每个节点目录下的配置文件进行修改(主要是将其中的7001改成对应的)可以在进入命令行模式时使用替换命令,例:

                 将6个redis全部启动,我们来写一个脚本来开启

# 命令 使用vim打开文件,如果没有该文件会生成一个新文件
vim startredis#脚本内容#!/bin/bash
/usr/local/bin/redis-server /usr/myredis/7001/redis.conf
/usr/local/bin/redis-server /usr/myredis/7002/redis.conf
/usr/local/bin/redis-server /usr/myredis/7003/redis.conf
/usr/local/bin/redis-server /usr/myredis/7004/redis.conf
/usr/local/bin/redis-server /usr/myredis/7005/redis.conf
/usr/local/bin/redis-server /usr/myredis/7006/redis.conf

                如果脚本运行失败,可以看一下redis-server的位置是否正确,以及文件权限是否足够,可以直接赋予最高权限

chmod 777 /usr/myredis/startredis

                查看一下是否允许成功

                 这样即启动成功,开始配置集群

#复制下面内容宰命令行中允许,运行前确认你的redis-cli所在的位置
/usr/local/bin/redis-cli --cluster create 192.168.184.33:7001 192.168.184.33:7002 192.168.184.33:7003 192.168.184.33:7004 192.168.184.33:7005 192.168.184.33:7006 --cluster-replicas 1#cluster-replicas 1  表示主从1:1

                允许后出现下面内容,输入yes

                 出现下面即成功

                连接集群

#-c   cluster  不能省略
#-h  主机ip
#-p   端口号/usr/local/bin/redis-cli -c -h 192.168.162.33 -p 7001

                检查节点信息

                当感觉节点不够用的时候可以接着添加

                添加主机 

                和前面步骤相同,先创建目录,复制、修改配置文件,启动,然后就是添加节点的指令

#redis-cli --cluster add-node 新节点 集群中的节点  例:redis-cli --cluster add-node 192.168.162.33:7007 192.168.162.33:7003

                但目前因为没有槽,所以7007还不能作为主节点使用,先为他创建一个子节点。

                先查看一下节点的状态,将7007的id复制下来

                然后就是创建7008的节点目录,配置文件,启动,将其添加为7007的子节点

#/usr/local/bin/redis-cli --cluster add-node (要添加的节点的ip:端口号) (集群中随意一个节点的ip:端口号) --cluster-slave --cluster-master-id  (主节点的id)/usr/local/bin/redis-cli --cluster add-node 192.168.162.33:7008 192.168.162.33:7002 --cluster-slave --cluster-master-id  96aecfe0b2d8979c4a959a29fdade4d15d3fb9c9

                 出现下面内容就代表成功了

                重新分配槽,这样才能使7007拥有主节点的能力

                输入done会出现以下界面,输入yes即可

                再次查看下节点信息

                删除节点

/usr/local/bin/redis-cli --cluster del-node 192.168.162.33:7001 2158f7e2c9b6ed1fcc6afc1b14c2f64e67335f13

                要删除主节点的话需要先将从节点移到别的主节点上 ,还要将槽归还

                关闭

                我们写一个脚本来执行关闭

# 命令
vim redisclose#脚本内容#!/bin/bash
/usr/local/bin/redis-cli -h 192.168.162.33 -p 7001 shutdown
/usr/local/bin/redis-cli -h 192.168.162.33 -p 7002 shutdown
/usr/local/bin/redis-cli -h 192.168.162.33 -p 7003 shutdown
/usr/local/bin/redis-cli -h 192.168.162.33 -p 7004 shutdown
/usr/local/bin/redis-cli -h 192.168.162.33 -p 7005 shutdown
/usr/local/bin/redis-cli -h 192.168.162.33 -p 7006 shutdown#给脚本文件赋予权限
chmod 777 redisclose

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

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

相关文章

移动端打包成功后禁止生成 report.html 文件,并不自动打开该文件

目录 【问题】移动端 npm run build 打包后生成并打开 report.html 文件package.json 文件vue.config.js 代码 【解决】打包后去除 report.html 文件vue.config.js 代码 参考 【问题】移动端 npm run build 打包后生成并打开 report.html 文件 package.json 文件 {"name&…

大数据安全 | 期末复习(中)

文章目录 📚感知数据安全⭐️🐇传感器概述🐇传感器的静态特性🐇调制方式🐇换能攻击🐇现有防护策略 📚AI安全⭐️🐇智能语音系统——脆弱性🐇攻击手段🐇AI的两…

springboot快速写接口

1. 建proj形式 name会变成文件夹的名字,相当于你的项目名称 基础包 2. 基础依赖 3. 配置数据库 这里要打开mysql,并且创建数据库 方法: 安装好数据库,改好账号密码用navicat来建表和账号配置properties.yml文件即可 4.用res…

实现负载均衡

1.安装依赖 sudo apt insta11 libgd-dev 2.下载nginx wget http://nginx.org/download/nginx-1.22.1.tar.gz 3.解压nginx tar -zvxf nginx-1.22.1.tar.g2 4.编译安装 cd nginx-1.22.1 5.编译并指定安装位置,执行安装之后会创建指定文件夹/www/env/nginx ./configure…

【阻塞队列】阻塞队列的模拟实现及在生产者和消费者模型上的应用

文章目录 📄前言一. 阻塞队列初了解🍆1. 什么是阻塞队列?🍅2. 为什么使用阻塞队列?🥦3. Java标准库中阻塞队列的实现 二. 阻塞队列的模拟实现🍚1. 实现普通队列🍥2. 实现队列的阻塞功…

掌握Pyecharts:绘制炫酷词云图的参数解析与实战技巧【第36篇—python:词云图】

文章目录 安装Pyecharts基本的词云图绘制自定义词云图样式多种词云图合并高级词云图定制与交互1. 添加背景图片2. 添加交互效果 使用自定义字体和颜色从文本文件生成词云图总结: 在数据可视化领域,词云图是一种极具表现力和趣味性的图表,能够…

【DevOps】Jenkins Extended E-mail 邮件模板添加自定义变量

文章目录 1、配置Jenkins邮箱2、配置告警模板1、配置Jenkins邮箱 略 2、配置告警模板 自定义变量:DYSK_PYTEST_STATUS // Uses Declarative syntax to run commands inside a container. pipeline {agent {kubernetes {cloud "kubernetes" //选择名字是kuberne…

vivado DDS学习

实现DDS通常有两种方式,一种是读取ROM存放的正弦/余弦信号的查表法,另一种是用DDS IP核。这篇学习笔记中,我们要讲解说明的是VIVADO DDS IP核的应用。 目前本篇默认Phase Generator and SIN/COS LUT(DDS)的standard模式…

10.Elasticsearch应用(十)

Elasticsearch应用(十) 1.为什么需要聚合操作 聚合可以让我们极其方便的实现对数据的统计、分析、运算,例如: 什么品牌的手机最受欢迎?这些手机的平均价格、最高价格、最低价格?这些手机每月的销售情况如…

SpringCloud-Knife4j文档聚合

在微服务架构下,如果给每个微服务都配置文档,那么每个微服务的接口文档都有自己独立的访问地址,这样要一个个打开每个微服务的文档非常麻烦。一般我们会采用聚合的办法,将所有微服务的接口整合到一个文档中,具体做法有…

web前端项目-五子棋【附源码】

五子棋(人机对弈) 本项目【五子棋】是一款人机对弈的策略型棋类游戏。可以选择落子方;游戏难度和是否显示落子次序。游戏双方分别使用黑白两色的棋子,在棋盘直线与横线的交叉点上进行对弈。五子棋可以促进大脑发育、提高思维能力…

openlayers+vue实现缓冲区

文章目录 前言一、准备二、初始化地图1、创建一个地图容器2、引入必须的类库3、地图初始化4、给地图增加底图 三、创建缓冲区1、引入需要的工具类库2、绘制方法 四、完整代码总结 前言 缓冲区是地理空间目标的一种影响范围或服务范围,是对选中的一组或一类地图要素(点、线或面…

华为三层交换机之基本操作

Telnet简介 Telnet是一个应用层协议,可以在Internet上或局域网上使用。它提供了基于文本的远程终端接口,允许用户在本地计算机上登录到远程计算机,然后像在本地计算机上一样使用远程计算机的资源。Telnet客户端和服务器之间的通信是通过Telnet协议进行的…

[蓝桥杯]真题讲解:冶炼金属(暴力+二分)

蓝桥杯真题视频讲解&#xff1a;冶炼金属&#xff08;暴力做法与二分做法&#xff09; 一、视频讲解二、暴力代码三、正解代码 一、视频讲解 视频讲解 二、暴力代码 //暴力代码 #include<bits/stdc.h> #define endl \n #define deb(x) cout << #x << &qu…

C语言第十弹---函数(上)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 函数 1、函数的概念 2、库函数 2.1、标准库和头文件 2.2、库函数的使用方法 2.2.1、功能 2.2.2、头文件包含 2.2.3、实践 2.2.4、库函数文档的⼀般格式 …

PWM调光 降压恒流LED芯片FP7127:为照明系统注入新能量(台灯、GBR、调光电源、汽车大灯)

目录 一、降压恒流LED芯片FP7127 二、降压恒流LED芯片FP7127具有以下特点&#xff1a; 三、降压恒流LED芯片FP7127应用领域&#xff1a; LED照明和调光的新纪元随着LED照明技术的不断发展&#xff0c;人们对于照明调光的需求也越来越高。PWM调光技术作为一种常用的调光方法&…

RUST笔记:candle使用基础

candle介绍 candle是huggingface开源的Rust的极简 ML 框架。 candle-矩阵乘法示例 cargo new myapp cd myapp cargo add --git https://github.com/huggingface/candle.git candle-core cargo build # 测试&#xff0c;或执行 cargo ckeckmain.rs use candle_core::{Device…

设计模式—行为型模式之责任链模式

设计模式—行为型模式之责任链模式 责任链&#xff08;Chain of Responsibility&#xff09;模式&#xff1a;为了避免请求发送者与多个请求处理者耦合在一起&#xff0c;于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链&#xff1b;当有请求发生时&am…

wsl下安装ros2问题: Unable to locate package ros-humble-desktop 解决方案

❗ 问题 在wsl&#xff08;Ubuntu 22.04版本&#xff09;下安装ros的过程中&#xff0c;在执行命令 $ sudo apt install ros-humble-desktop一直弹出报错&#xff1a;Unable to locate package ros-humble-desktop 前面设置编码和添加源的过程中一直没有出现其他问题&#…

Docker 配置 Gitea + Drone 搭建 CI/CD 平台

Docker 配置 Gitea Drone 搭建 CI/CD 平台 配置 Gitea 服务器来管理项目版本 本文的IP地址是为了方便理解随便打的&#xff0c;不要乱点 首先使用 docker 搭建 Gitea 服务器&#xff0c;用于管理代码版本&#xff0c;数据库选择mysql Gitea 服务器的 docker-compose.yml 配…