Redis的主从、哨兵、集群模式的概念及搭建步骤

news/2024/11/29 23:56:26/

主从复制

        主从模式也叫主从复制,主是主服务器,从是从服务器,主服务器(master )的数据如果更新了 也会同步到从服务器(slave),一个主服务器可以搭配很多个从服务器,主服务器负责写入 从服务器只能读取 不能写入
主从模式的作用:

  1. 数据备份:无论哪一台服务器宕机 数据都有备份 保证redis可用性高
  2. 扩展性能:搭建了很多服务器,提高服务器容量和带宽
  3. 读写分离:主负责写入 从负责读取

搭建主从模式步骤:

案例:搭建一个主服务器和两台从服务器
1.创建一个目录,保存主从模式的配置文件(有几个节点配置几个配置文件)
mkdir xxx
2.复制几份配置文件
cp redis,conf xxx/redis-1.conf
cp redis,conf xxx/redis-2.conf
cp redis,conf xxx/redis-3.conf3.分别修改每个配置文件(类似于之前的配置)
ip地址 端口号 PID文件 log文件 rdb文件 不要冲突
注:如果是从服务器 需要添加一个配置
replicaof 主服务器的ip地址 端口号4.开启redis服务
redis-server redis-7000.conf
redis-server redis-7001.conf
redis-server redis-7002.conf5.查看进程是否有三个redis节点
ps -ef | grep redis6.查看主从信息是否正确 1个主两个从
redis-cli -h ip地址 -p 端口 info replication结果:如果从节点宕机了 对其他节点没有任何影响如果主节点宕机了 对数据备份没有影响 但是不能写入

哨兵模式

        主从模式的缺点:如果主节点宕机了需要人工介入切换主节点,手动通过命令将其他的从节点升为主节点 slaveof new master 这是运维人员的工作。

        所以redis2.8以上引入哨兵模式 哨兵模式就是优化版的主从模式 唯一区别就是添加一个新的角色叫做哨兵,可以监控主和从节点的可用性 如果从宕机 哨兵不管 如果主宕机 哨兵会自动投票选择哪个从节点升为主节点。

搭建哨兵模式步骤:

案例:1个主 1个从 3个哨兵1.创建一个新目录sentinel保存配置文件(5个文件)2.cp复制5个配置文件3.编写配置文件(主从配置文件跟原来一致)4.编写哨兵配置文件#哨兵端口号port 10000#设置为守护进程,则进程启动后会在后台运行daemonize yes#pid保存文件pidfile /var/run/10000.pid#日志文件logfile "/usr/local/redis-5.0.3/log/10000.log"#哨兵配置sentinel monitor mymaster 192.168.190.147 7000 2#设置多少秒失效则认为主节点宕机sentinel down-after-milliseconds mymaster 10000#设置故障转移 最多可以有多少个从节点升为主节点sentinel parallel-syncs mymaster 1#设置故障转移最大时间sentinel failover-timeout mymaster 60000#关闭保护机制protected-mode no5.开启redisredis-server redis-7000.confredis-server redis-7001.conf开启哨兵redis-sentinel 10000.confredis-sentinel 10001.confredis-sentinel 10002.conf6.查看进程是否存在ps -ef | grep redis

集群模式

        哨兵模式基本上可以解决大部分的问题,但是为了进一步的保证redis的高可用,哨兵模式也有自己的缺点,无法控制并发量 无法提升redis容量。
        哨兵模式容量:不能无限扩容,因为就是一台主节点
        哨兵模式并发量:一个redis主节点并发量大约是10万,也是不够的,所以redis推出了集群模式,集群最大可以增加到1000台节点,节点添加的越多,性能(容量和并发量)提高的也越多。
        如果主节点宕机了 从节点会自动升为主节点,redis集群一共会设计16384个数据分槽(slot),每个数据分槽会去管理一部分数据。这么多数据分槽平均分配给不同的redis节点,每个redis节点同时也会搭配很多从节点。

主节点选取步骤:

  1. 槽分配:当 Redis 集群启动时,初始情况下所有槽都未分配给任何节点。节点会通过集群协调器(Cluster Coordinator)进行槽的分配,确保每个槽都由集群中的某个节点负责。
  2. 主节点选举:在槽分配完成后,集群会自动进行主节点的选举。主节点的选取过程包括考虑节点的负载、连接质量、数据分布等因素。通常情况下,集群会选择那些负责的槽数量较少、负载较低的节点作为主节点。
  3. 故障转移:当主节点发生故障或不可用时,Redis Cluster 会通过自动故障转移(Automatic Failover)机制选择一个从节点升级为主节点,确保集群的高可用性。

搭建集群模式步骤:

案例:redis-cluster(6个节点(3主3从))
1.创建目录cluster
mkdir cluster2.拷贝需要的配置文件
cp redis.conf cluster/redis-xxx.conf3.编写集群的配置文件
编写ip
端口号
开启守护进程
关闭保护机制
进程id (PID文件)
rdb文件(持久化)#集群配置
#开启集群
cluster-enabled yes
#指定集群文件的配置文件名,首次启动会自动生成
cluster-config-file nodes-7000.conf
#如果一个主节点宕机了 如果从服务器没有可以故障恢复的节点 集群是否仍然可用
cluster-require-full-coverage no4.启动redis集群的所有节点(由于节点太多不要单个运行)
推荐使用脚本语言 编写脚本 批量运行
linux编写的脚本是xxx.sh 类似于window下的 xxx.bat*.sh编写语法
#!/bin/bash一般表示脚本语言开始
#!/bin/bash 
echo "开启redis集群"
#循环6次
for i in `seq 7000 7005`
do
redis-server redis-$i.conf ## $i表示获取i
echo $i"开启redis成功"
doneredis-server redis-7000.conf5.自动分配数据分槽 并且集群主从节点
不能换行 多个节点ip是空格相连
redis-cli --cluster create 192.168.190.147:7000 192.168.190.147:7001 192.168.190.147:7002 192.168.190.147:7003 192.168.190.147:7004 192.168.190.147:7005 --cluster-replicas 1注:如果配置集群时,出现is not empty是由于之前配置过,或者保存文件和原来的重名 删除data包 rdb文件 conf文件
重启redis服务器(先关闭 再开启)6.最后测试集群是否搭建成功
redis-cli -h ip地址 -p 端口号 进入客户端
cluster info查看集群信息7.测试java代码连接redis集群
以后搭建好集群只需要./start.sh启动redis就可以开启集群。

ps:以下是我整理的java面试资料,感兴趣的可以看看。最后,创作不易,觉得写得不错的可以点点关注!

链接:https://www.yuque.com/u39298356/uu4hxh?# 《Java面试宝典》 


http://www.ppmy.cn/news/1379614.html

相关文章

S5PV210_视频编解码项目_裸机开发:实现按键的外部中断处理

加粗样式本文所作内容: 基于S5PV210芯片实现按键的外部中断处理程序,搭建中断处理流程框架 S5PV210对于中断处理的操作流程 1 外部中断得到触发: 1)外部中断在初始化阶段得到使能 2)外界达到了外部中断的触发条件 …

蓝桥杯PythonB组练习——字符串对比

一、题目 问题描述 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4种情况之一: 1:两个字符串长度不等。比如Beijing和Hebei 2:两个字符串不仅长度相等&#xf…

python-批量操作excel

批量新增excel文件 import osimport xlwings as xwapp xw.App(visibleTrue,add_bookFalse)#visible设置为ture的时候会自动打开创建的excel文件,设为为false的时候不会看到excel文件打开了,实际进程占用了....dept_list [人事部,财务部,研发部,行政部…

Git的介绍

导出项目依赖 # 以后项目给别人需要导出项目依赖,放在项目路径下,以后在运行项目前,先安装依赖 一般约定俗成都叫 requirements.txt,但是会有别的:req.txt | dev.txt # 两种方式: 1、虚拟环境所有装的第三方&…

m序列生成器

function [m] mserial_generator(tap_set) % m序列产生器 % 输出为m序列,未进行极性变换。 L 2^(length(tap_set)-1)-1; x [zeros(1,(length(tap_set)-2)) 1]; for i 1:1:Lm(i)x(end);for j 1:1:length(tap_set)-1sum_vector(j)tap_set(j1)*x(j);endsum_x mod…

聊聊python中面向对象编程思想

面向对象编程思想 1、什么是面向过程 传统的面向过程的编程思想总结起来就八个字——自顶向下,逐步细化! → 将要实现的功能描述为一个从开始到结束按部就班的连续的“步骤” → 依次逐步完成这些步骤,如果某一个步骤的难度较大&#xff…

在XCode中使用SwiftGen管理你的图片、配色、多语言文件等

SwiftGen是一个工具,可以为您的项目资源(如图像、本地化字符串等)自动生成Swift代码,然后你就可以像使用一个Class类一样访问你的资源了。 而且添加或更新资源后,SwiftGen也会自动更新用于访问资源的Class类。对于管理…

Docker学习——容器

容器是 Docker 的另一个核心概念,简单来说,容器是镜像的一个运行实例。所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态。 创建容器 1新建容器 可以…