Redis的主从复制(redis有密码版)——一主二仆、薪火相传、反客为主、哨兵模式

本文主要是介绍Redis的主从复制(redis有密码版)——一主二仆、薪火相传、反客为主、哨兵模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 搭建一主多从
    • 创建myredis文件夹并复制etc下的redis.conf到myredis下
    • 创建三个配置文件
    • 启动三个redis
    • info replication查看从属关系
    • 配置从机
    • 测试主机从机
  • 一主二仆
  • 薪火相传
  • 反客为主
  • 哨兵模式
    • 哨兵模式总结
  • 主从复制java中使用

搭建一主多从

创建myredis文件夹并复制etc下的redis.conf到myredis下

创建
mkdir /myredis
进入文件夹
cd /myredis
复制操作
cp /etc/redis.conf /myredis/redis.conf

可以看到刚开始ls没有的,复制完ls就可以看见redis.conf文件了
在这里插入图片描述

创建三个配置文件

创建第一个
vim redis6379.conf

配置里面
include /myredis/redis.conf
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb

然后再创建两个分别取名 redis6380.conf redis6381.conf
可以像这样复制 会快一点

cp redis6379.conf redis6380.conf
复制过来的记得修改里面的配置把6379全改成6380

ls
在这里插入图片描述
这时候就创建完成了

启动三个redis

在这里插入图片描述
成功了是这样的
在这里插入图片描述
如果6379和我显示的不一样 说明端口号被占用 先杀掉再开就行

info replication查看从属关系

在这里插入图片描述
可以看到 角色是主机,从机0

配置从机

在从机上执行slaveof 主机ip 主机端口号

在6380和6381上执行: slaveof 127.0.0.1 6379

**这里提一嘴如果redis配置了密码需要在从库的conf里添加
masterauth 密码 不然配置从库的时候从库显示有主库 主库却看不见从库
**

先配了一个 反正成功是这样的
在这里插入图片描述

测试主机从机

主机创建了 a1 v1
在这里插入图片描述
从机可以直接获取,且从机无法添加,只有读的功能
在这里插入图片描述

一主二仆

特点:

1.从机挂了之后需要重新(执行slaveof 主机ip 主机端口号) 不然从机就会变回主机
.
2.挂掉之后重新配置回从机时 会把主机数据从头到尾复制
.
3.主机挂了之后从机还是从机(不会变成主机) 并且显示主机状态为down 等主机恢复之后 主机就还是主机 从机也还是从机

薪火相传

比如6380是6379的从机 slaveof 127.0.0.1 6379
6381是6380的从机 slaveof 127.0.0.1 6380

特点:上一个Slave可以是下一个slave的Master,Slave同样可以接收其他 slaves的连接和同步请求,那么该slave作为了链条中下一个的master, 可以有效减轻master的写压力,去中心化降低风险

优点:减少压力
缺点:其中一个挂了,后面的都没了

反客为主

在从机设计slaveof no one 这是当主机挂了之后 这个从机会变成主机
但是变成的只是普通主机 如果是薪火相传的话他的从机还是他的从机
其他和他并列的从机不会变成他的从机

哨兵模式

首先前提是一主二从,二从是并列的而不是薪火相传
下面开始测试

  1. 在myredis下再建一个配置文件 sentinel.conf
  2. 打开配置类,在里面添加 sentinel monitor mymaster 127.0.0.1 6379 1
    其中mymaster为监控对象起的服务器名称,1 为至少有多少个哨兵同意迁移(只要有一个哨兵同意即可迁移)。
  3. 再添加sentinel auth-pass mymaster 密码
  4. redis-sentinel sentinel.conf 启动哨兵模式
  5. 关掉6379端口的主机
    在这里插入图片描述
  6. 这时哨兵模式启动了开始加载配置
    在这里插入图片描述

可以看到6379端口down了,新主机为6381,这是6380为6381从机
在这里插入图片描述
在这里插入图片描述
这时候如果重新启动6379端口,可以看到他已经变成从机了,主机为6381
在这里插入图片描述

哨兵模式总结

当主服务器down机时,新服务器选举是有策略的
选择条件从上到下依次
1.选择优先级靠前的
优先级在redis.conf中默认:replica-priority 100,值越小优先级越高
2.选择偏移量最大的
偏移量是指获得原主机数据最全的
3.选择runid最小的从服务
每个redis实例启动后都会随机生成一个40位的runid

主从复制java中使用

引用即可

private static JedisSentinelPool jedisSentinelPool=null;public static  Jedis getJedisFromSentinel(){
if(jedisSentinelPool==null){Set<String> sentinelSet=new HashSet<>();sentinelSet.add("192.168.11.103:26379");JedisPoolConfig jedisPoolConfig =new JedisPoolConfig();jedisPoolConfig.setMaxTotal(10); //最大可用连接数
jedisPoolConfig.setMaxIdle(5); //最大闲置连接数
jedisPoolConfig.setMinIdle(5); //最小闲置连接数
jedisPoolConfig.setBlockWhenExhausted(true); //连接耗尽是否等待
jedisPoolConfig.setMaxWaitMillis(2000); //等待时间
jedisPoolConfig.setTestOnBorrow(true); //取连接的时候进行一下测试 ping pongjedisSentinelPool=new JedisSentinelPool("mymaster",sentinelSet,jedisPoolConfig);
return jedisSentinelPool.getResource();}else{
return jedisSentinelPool.getResource();}
}

这篇关于Redis的主从复制(redis有密码版)——一主二仆、薪火相传、反客为主、哨兵模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/832814

相关文章

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

模版方法模式template method

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/template-method 超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 上层接口有默认实现的方法和子类需要自己实现的方法

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

迭代器模式iterator

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/iterator 不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者

springboot实战学习(1)(开发模式与环境)

目录 一、实战学习的引言 (1)前后端的大致学习模块 (2)后端 (3)前端 二、开发模式 一、实战学习的引言 (1)前后端的大致学习模块 (2)后端 Validation:做参数校验Mybatis:做数据库的操作Redis:做缓存Junit:单元测试项目部署:springboot项目部署相关的知识 (3)前端 Vite:Vue项目的脚手架Router:路由Pina:状态管理Eleme

状态模式state

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/state 在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。 在状态模式中,player.getState()获取的是player的当前状态,通常是一个实现了状态接口的对象。 onPlay()是状态模式中定义的一个方法,不同状态下(例如“正在播放”、“暂停