redis 主从模式以及哨兵模式

2023-11-03

一、redis主从模式(master,slave)

           1.作用

                1)防止单点故障(一台redis宕机,整个redis不能用)

                2)可以进行读写分离(一台redis主机进行写操作,其他机子进行读操作),提高使用效率

                1.2实现

                 1)规划图

                        主从规划图       2)具体配置:

            克隆redis,修改IP,修改主机名称,使用xshell连接

            修改主机名称:

                  vim /etc/hostname

                  修改网卡:

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

                  :15 修改IP地址 192.168.XXX.31    (第15行)

                  重新启动:

                      reboot

                   使用xshell进行连接

            主从配置   

                   在redis操作

                   拷贝:cp /usr/redis/redis-5.0.5/redis.conf  /usr/redis/bin/master.conf

                   vim /usr/redis/bin/master.conf

 :69 bind 192.168.206.41 绑定自己的IP

 :92 port 6666 实例端口号

 

 :136 daemonize yes 守护方式运行

                在 redis2操作:

                cp /usr/redis/redis-5.0.5/redis.conf  /usr/redis/bin/slave1.conf

                vim /usr/redis/bin/slave1.conf

:69 bind 192.168.206.42 绑定自己的IP

 

:92 port 7777 实例端口号

 

:136 daemonize yes 守护方式运行

 

slaveof 192.168.206.41 6666 在文件末尾配置当前实例是谁的从节点

 

                在 redis3操作:

                 cp /usr/redis/redis-5.0.5/redis.conf  /usr/redis/bin/slave2.conf

                 vim /usr/redis/bin/slave2.conf

:69 bind 192.168.206.43 绑定自己的IP

 

:92 port 8888 实例端口号

 

:136 daemonize yes 守护方式运行

 

slaveof 192.168.206.41 6666 在文件末尾配置当前实例是谁的从节点

 

 

3)启动测试:

        redis1启动:

        /usr/redis/bin/redis-server  /usr/redis/bin/master.conf

        /usr/redis/bin/redis-cli -h 192.168.206.41 -p 6666

        set bbb 222 成功

         redis2启动:

        /usr/redis/bin/redis-server  /usr/redis/bin/slave1.conf

        /usr/redis/bin/redis-cli -h 192.168.206.42 -p 7777

        set bbb 222 错误 slave不可以写

        redis3启动:

        /usr/redis/bin/redis-server  /usr/redis/bin/slave2.conf

        /usr/redis/bin/redis-cli -h 192.168.206.43 -p 8888

        set bbb 222 错误 slave不可以写

        在 all session 输入 keys * 发现 三台 redis上都有bbb 说明主从同步成功

        info 显示当前redis实例运行情况

        info replication 显示主从角色信息

        info keyspace 显示key分布情况

1.2 原理

  • 从服务器连接主服务器,发送 PSYNC(同步) 命令;
  • 主服务器接收到 PSYNC 命名后,开始fork子进程执行 BGSAVE 命令生成 RDB 文件并使用缓冲区记录此后执行的所有写命令;
  • 主服务器 BGSAVE 执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;
  • 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;
  • 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;
  • 从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;

  1.2.1 特点

        master /slave 角色

        master/slave 数据是同步

        降低了master读压力 由从机分担

  1.2.2 缺点

        无法真正高可用(master一旦宕机,整个集群就无法进行写操作)

        所有的写操作都是master进行,写操作无法负载均衡

2 redis 哨兵模式(sentinel)

        2.1 作用

                哨兵模式主要用来解决主从模式的无法高可用的缺点,当主机master宕机时,没有写节点的问题。当master宕机后,会从slave中选举一台做主节点,从而达到高可用的目的。

        2.2 实现

                以主从为基础

        1) 规划图

 

 2) 具体配置:

 在3台redis 操作:

cp /usr/redis/redis-5.0.5/sentinel.conf  /usr/redis/bin/sentinel1.conf

cp /usr/redis/redis-5.0.5/sentinel.conf  /usr/redis/bin/sentinel2.conf

cp /usr/redis/redis-5.0.5/sentinel.conf  /usr/redis/bin/sentinel3.conf

修改:

vim /usr/redis/bin/sentinel1.conf

vim /usr/redis/bin/sentinel2.conf

vim /usr/redis/bin/sentinel3.conf

#关闭保护模式 当开启保护模式的时候默认只能本机连

protected-mode no #17

 

#哨兵端口

port 26666 #21 port 27777 port 28888   三个分别是 26666 27777 28888

 

#添加守护进程模式

daemonize yes #26

 

#添加指明日志文件名

logfile "./temp.log" #36

 

#修改工作目录

dir "/tmp" #65

 

#哨兵监控的master名称可以随便起,ip和端口固定 quorum 当哨兵是集群时,有多少个哨兵认为master失效(客观下线),master才算失效。 防止脑裂 配置计算最好是 哨兵总数量/2+1

sentinel monitor mymaster 192.168.206.41 6666 2 #84

 

#设置master和slaves验证密码

sentinel auth-pass mymaster 123456 #103

#master(默认30秒)不能使用后标记为主观down状态。

sentinel down-after-milliseconds mymaster 30000 #113

3) 启动哨兵,测试:

哨兵是以主从为基础,主从一定要先启动,并且保证主从正常

分别在3台服务器上运行

/usr/redis/bin/redis-sentinel  /usr/redis/bin/sentinel1.conf

/usr/redis/bin/redis-sentinel  /usr/redis/bin/sentinel2.conf

/usr/redis/bin/redis-sentinel  /usr/redis/bin/sentinel3.conf

查看哨兵进程:

在allsession中输入:

ps -ef |grep redis|grep -v grep

 

 

 

演示自动故障切换:

a.使用客户端连接3台服务器:

/usr/redis/bin/redis-cli  -h  192.168.170.31 -p 6666

/usr/redis/bin/redis-cli  -h  192.168.170.32 -p 7777

/usr/redis/bin/redis-cli  -h  192.168.170.33 -p 8888

b.在allsession中输入:

info replication 显示3台主机的主从状态 发现redis1是master 2和3是slave

 

 

 

c.让redis1的实例宕机:

shutdown 关闭服务器并保存数据

 ps -ef |grep redis|grep -v grep

等大约30秒 其中两个哨兵都在30连不上,分别认为是主观下线,当3个哨兵相互沟通后,就确定客观下线。

d. 在allsession中输入:

info replication redis1宕机 发现redis3变为master redis2变为slave

在新的master 执行写命令:

192.168.206.43:8888> set aaa 111

OK

192.168.206.43:8888> set bbb 222

OK

192.168.206.43:8888> set ccc 333

 

e. 让redis1恢复正常:

/usr/redis/bin/redis-server /usr/redis/bin/master.conf

/usr/redis/bin/redis-cli  -h  192.168.206.41 -p 6666

在allsession中输入:

info replication 发现redis1 自动变为redis3从节点

keys * 发现redis1在宕机期间 redis3的写入内容,依然可以同步(遵循了主从同步原理)

 

停止哨兵可以使用kill -9 命令

3 原理

 

4 特点

1、保证高可用(除了切换主从的一瞬间,集群是高可用)

2、哨兵监控各个节点

3、自动故障迁移

4.1 缺点

     主从模式,切换需要时间,切换期间,不能对外提供服务

没有解决 master 写的压力

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

redis 主从模式以及哨兵模式 的相关文章

随机推荐

  • HLA库串口不进串口接收中断回调的处理方法

    使用回调首先 1 开启宏使能 2 配置回调 3 实现回调函数 注意it h中也要加入声明
  • Go-proxy私有仓库配置实践

    一 项目背景 目前的golang私有库依赖 可以放在git repo中 需要特别在go mod中写replace条目 解决多重依赖很麻烦 git 的repo有可能比较大 使用该方案能够支持版本的统一管理 公共依赖和私有依赖都通过go get
  • 求两个多项式相加的和(数据结构cpp)

    萌新写代码 欢迎各位大佬多多指教 假设我们已知多项式 A B 现在要求解这两个多项式的和 第一步 用什么方式储存多项式 需要储存的数据有多项式的系数和指数 所以很自然的想到我们可以定义一个结构体数组 如下 定义存储多项式的数组 typede
  • Qt制作Aero特效窗口

    转载请注明链接与作者huihui1988 初学QT 边看书边自己做点小东西 最近突然心血来潮 想自己做个小巧点的 界面美观一点的备忘当桌面上 想了半天 发现VISTA WIN7的Aero效果就不错 况且自己现在就在用WIN7 于是上网找了下
  • 多模态预训练 + 自监督学习 + 下游任务介绍

    预训练 1 特征提取要解决的问题是怎么分别量化文字和图像 进而送到模型学习 特征抽取 文本 倾向于bert等大模型 图像 神经网络 VIT等 2 特征融合要解决的问题是怎么让文字和图像的表征交互 最简单的 相加 拼接 然而也可设计更巧妙的结
  • 过线检测判断方向

    过线检测时需要判断目标是从哪个方向经过的 L1向量 1 7 L2向量 5 0 叉乘 L1 X L2 1x0 5 x 7 0 35 35 点乘 L1 L2 1 x 5 7 x 0 5 arctan 35 5 81 87 因为y 35 x 5
  • 微信分享踩坑:config:invalid signature错误的解决方法

    微信分享踩坑 config invalid signature错误的解决方法 一般出现这个错误多半是签名获取失败 而我根据我获取到的签名跟签名算法校验里面得到的签名是一样的 于是查找大量文档 核实可能出现的问题 1 APPID和APPSEC
  • spark spark-sql提交方式及参数优化建议

    Spark作为分布式的SQL查询引擎 官方测试结果比 Hive sql 快 100倍 目前spark提交命令有spark shell spark submit spark sql三种方式 下面我就来看看spark sql的提交方式 与hiv
  • C#用Npgsql库连接postgres数据库

    按网上说法我在包管理控制台使用Install Package Npgsql安装不成功 我项目的dotnet不匹配 然后在官网上我找到了下面指令 PM gt Install Package EntityFramework6 Npgsql Ve
  • 数据库实验报告 创建学生关系数据表、课程表、选课表 SQL Kingbase

    一 实验题目 已有条件 Kingbase数据库软件包 要求 请安装Kingbase数据库软件 在数据库软件中创建一个自己名字的模式 在该模式下创建学生关系数据表 课程表 选课表 插入一些数据 尝试查询 更新 删除 二 相关原理与知识 完成实
  • 数据结构之“七大排序“

    1 排序的概念和应用 1 1 排序的概念 排序 什么是排序 排序就是使一串记录 按照其中的某个或某些关键字的大小 递增或递减的排列起来的操作 内部排序 数据元素全部放在内存中的排序 外部排序 数据元素太多不能同时放在内存中 根据排序过程的要
  • centos7查找目录下所有文件所包含的关键字

    grep r string 转载于 https www cnblogs com wang lei p 11392499 html
  • linux更新内核

    这本阿里P8撰写的算法笔记 再次推荐给大家 身边不少朋友学完这本书最后加入大厂 Github 疯传 史上最强悍 阿里大佬 LeetCode刷题手册 开放下载了 Linux升级内核的正确姿势 很多童鞋在玩耍linux发行版的时候 都会遇到各种
  • contos的apt-get安装

    首先contos的软件包管理是yum 但是yum包好多都没有 比如我想装的sl 小火车 下载安装apt包管理工具 1 下载地址 http pkgs repoforge org rpmforge release 2 根据自己的系统下载对应的包
  • 【数据结构与算法】插入排序和希尔排序

    目录 一 插入排序 InsertSort 基本思想 动图演示 特性总结 二 希尔排序 ShellSort 基本思想 图例 特性总结 一 插入排序 InsertSort 基本思想 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序
  • 452. 用最少数量的箭引爆气球

    在二维空间中有许多球形的气球 对于每个气球 提供的输入是水平方向上 气球直径的开始和结束坐标 由于它是水平的 所以y坐标并不重要 因此只要知道开始和结束的x坐标就足够了 开始坐标总是小于结束坐标 平面内最多存在104个气球 一支弓箭可以沿着
  • 永磁同步电机矢量控制(三)——电流环 PI 参数整定(二)

    文章目录 1 电流环PI参数整定 2 电流环带宽选择 3 电流环带宽的测试方法 前面我们把电流环的闭环传递函数整定成了典型的二阶系统 这里我们再简化处理下电流环 把电流环闭环传递函数整定成一阶惯性环节 1 电流环PI参数整定 首先 我们忽略
  • uni-app之分包加载和按需注入

    文章目录 一 分包 1 为什么要分包呢 2 分包类型 3 如何设置分包 需要在manifest json中加入分包相关配置 在page json中加入分包配置 3 分包预加载配置preloadRule 二 按需注入和用时注入 1 按需注入
  • React中import的用法

    import defaultcomponent a b c from XXX eg import React Component from react 导入 react 文件里export的一个默认的组件 将其命名为React以及Compo
  • redis 主从模式以及哨兵模式

    一 redis主从模式 master slave 1 作用 1 防止单点故障 一台redis宕机 整个redis不能用 2 可以进行读写分离 一台redis主机进行写操作 其他机子进行读操作 提高使用效率 1 2实现 1 规划图 主从规划图