1、为什么要主从复制(一主多仆),读写分离:redis在作为缓存的时候,随着数据的不断增加,是有可能出现宕机的,这时候就出现了“单点故障”,解决方案就是进行主从复制,读写分离。

原理图:Master是主,Slave是从,Master具有读写权限,Slave只有读权限(以下还会介绍redis分布式锁,即当Master死机之后,利用“sentinel监控”把Slave其中一个提升为Master,让系统继续执行,直至原Master重启后恢复)

 
 
企业一般用redis都是”高可用“的,以下为原理图

2、为了方便测试,把开启redis服务的四个关键文件统一放在单独的文件夹中 :redis-server、redis-benchmark、redis-cli和redis.conf(redis.conf在redis的文件根目录下,其余三个在根目录的/src目录下)

# mkdir /usr/redis
# cp redis-server /usr/redis
# cp redis-benchmark /usr/redis
# cp redis-cli /usr/redis
# cp redis.conf /usr/redis
# cd /usr/redis

3、在/usr/redis中把redis-conf进行Copy两次:redis1-conf、redis2-conf

依次修改redis-conf(主)、redis1-conf(仆)、redis2-conf(仆).

vi redis.conf
vi redis1.conf
vi redis2.conf

(/'字符串'    可以进行快速Find 查找位置,键盘“N”可以Find Next 查找下一个)

redis-conf  (daemonize no  (守护进程)改为  daemonize yes ):

port 

requirepass 123456
 daemonize yes
 

redis1-conf  -->:

port 

slaveof 127.0.0.1 

masterauth 

requirepass 

redis2-conf  -->:

port 

slaveof 127.0.0.1 

masterauth 

requirepass 

4、保存之后运行相对应的服务和客户端

 注意:当使用 命令:/redis-server redis-conf ,提示redis-conf无效时,只要把redis-conf放在redis-server同一个目录下即可。

服务:

./redis-server redis.conf

./redis-server redis1.conf

./redis-server redis2.conf

主(Master):

仆1(slave):

仆2(slave):

(slove是不具备写权限的,会提示:(error) READONLY You can't write against a read only slave.)

可以看到主机执行写命令,从机能同步主机的值,主从复制,读写分离就实现了。

但是万一主机挂了怎么办,这是个麻烦事情,所以redis提供了一个sentinel(哨兵),以此来实现主从切换的功能,类似与zookeeper.

5、一般“高可用”我们需要建立三个sentinel(哨兵)构成“sentinel集群”,即三个:sentinel.conf、sentinel1.conf、sentinel2.conf

sentinel.conf:

一般默认的就行,但是我们之前设置了认证密码,所以需要加一个命令(在对应的位置添加,直接看注释就知道在哪里添加了):

sentinel auth-pass mymaster 

之后Copy两份:sentinel1.conf、sentinel2.conf,改其端口号即可(我用的:26379、26479、26579)。

6、分别启动三哨兵:

./redis-sentinel sentinel.conf

./redis-sentinel sentinel1.conf

./redis-sentinel sentinel2.conf

接着启动三个服务:

./redis-server redis.conf

./redis-server redis1.conf

./redis-server redis2.conf

查询线程情况:

自此已经完成redis的状态:“三哨兵”、“一主”、“二从”

7、测试下:

我们kill其中一个主服务:

(注意:sentinel是怎么进行主从切换的呢?就是以下这条命令:

sentinel monitor mymaster 127.0.0.1 6379 2     最后面的2就是当两个以上的sentinel确定6379端口的“主服务”已经“主观下线”的时候,就把“从服务“自动切换成主服务

其中的sentinel服务产生变化:

自动把端口号6380的服务切换成主服务,当然sentinel会修改我们的配置文件:

sentinel.conf、sentinel1.conf、sentinel2.conf--》(原来的mymaster 由6379 换为了 6380)

此时切换已经完成,但是我们还需要启动之前的主redis,但是这个时候我们已经进行过插入、删除等操作,以前的主redis并没有记录这些,那么就需要将之前从redis的dump.rdb替换之前redis 的dump.rdb文件。

首先进入redis-master 启动 ./redis-server redis.conf

在新生成的主master操作(设置为主服务)

127.0.0.1:> slaveof no one

然后设置重启的6379服务为从服务,映射主服务:

127.0.0.1:> slaveof 127.0.0.1 6380

顺便把6381也重新指向6380为主服务,映射主服务

127.0.0.1:> slaveof 127.0.0.1 

如果还没有回到原来的状态,就关掉sentinel(哨兵)在设置。

8、总结:

1、”主从复制、读写分离、主从切换“的原理和步骤和集群

2、扩展:企业一般使用redis都是使用”高可用“的,最基本的就是”三哨兵、二主、三从“,我们这边博文写的是”三哨兵、一主、三从“,自己加一个主服务就可以了

3、”高可用”作用:防止“Master主服务宕机”、“sentinel监控宕机”,要知道,数据的丢失是致命的。

4、redis的作用:Redis以内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库。当然,redis也会自动把内存的数据保存到磁盘。

redis-主从复制、读写分离的更多相关文章

  1. redis 主从复制+读写分离+哨兵

    1.redis读写分离应用场景 当数据量变得庞大的时候,读写分离还是很有必要的.同时避免一个redis服务宕机,导致应用宕机的情况,我们启用sentinel(哨兵)服务,实现主从切换的功能.redis ...

  2. redis主从复制读写分离

    主从复制,读写分离 Master/Slave 是什么 master写入 slave读取 能干嘛 读写分离,更加安全,性能提升 怎么玩 一主二仆.薪火相传.反客为主 周明老师,能够把长篇大论总结的很精辟 ...

  3. 基于Redis主从复制读写分离架构的Session共享

    1.搭建主从复制 第一步:将Redis拷贝到虚拟机上的指定文件夹内,此Redis作为主服务 第二步:将Redis拷贝到本机的指定文件夹内,此Redis作为从服务 第三步:修改主服务的配置文件(redi ...

  4. 基于Redis主从复制读写分离架构的Session共享(Windows Server)

    搭建主从复制 1.安装软件 下载Redis-x64-3.2.100.zip:https://github.com/MicrosoftArchive/redis/releases 第一步:将Redis拷 ...

  5. Redis 主从复制, 读写分离

    1: 是什么? 2: 经常是配置从库, 不配置主库 3.1: 每次与 master 断开之后都要从连, 除非你配置了redis.conf 3.2: 获取当前redis 服务信息 => info ...

  6. Redis的读写分离

    1.概述 随着企业业务的不断扩大,请求的并发量不断增长,Redis可能终会出现无法负载的情况,此时我们就需要想办法去提升Redis的负载能力. 读写分离(主从复制)是一个比较简单的扩展方案,使用多台机 ...

  7. redis sentinel 读写分离

    redis sentinel 读写分离 https://www.jianshu.com/p/d1636776bb40

  8. mysql主从复制-读写分离

    mysql主从复制+读写分离 环境:mysql主:193.168.1.1mysql从:193.168.1.2amoeba代理:193.168.1.3########################## ...

  9. Mysql多实例安装+主从复制+读写分离 -学习笔记

    Mysql多实例安装+主从复制+读写分离 -学习笔记 .embody{ padding:10px 10px 10px; margin:0 -20px; border-bottom:solid 1px ...

  10. windows下Redis 主从读写分离部署

    原文:windows下Redis 主从读写分离部署 1.可直接下载window下的运行文件(下面这个链接) 也可以浏览github 查看相应的版本说明文档 https://github.com/Ser ...

随机推荐

  1. osworkflow 入门基础

    OSWorkFlow入门指南目的 这篇指导资料的目的是介绍OSWorkflow的所有概念,指导你如何使用它,并且保证你逐步理解OSWorkflow的关键内容. 本指导资料假定你已经部署OSWorkfl ...

  2. MonkeyRunner的简介与综合实践

    官方介绍: Monkeyrunner工具提供了一个API,用于编写可从Android代码外部控制Android设备或模拟器的程序.使用monkeyrunner,您可以编写一个Python程序来安装An ...

  3. MySQL更新字段来自另一个表的count()值

    假设有文章post和评论comment两个表,文章表记录有评论的数量,但是这个值我们要一次更新. 如下,现在post表的comment_count都是0,我们的目标是:执行一个SQL语句,让其把统计c ...

  4. GCD实战之多个网络请求的并发

    // 创建信号量 dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); // 创建全局并行 dispatch_queue_t q ...

  5. ArcMap常用操作

    1.矢量数据融合 数据管理->制图综合->融合 Data Management Tools -> Generalization -> Dissolve

  6. ESXi与物理交换机静态链路聚合配置过程中的小陷阱

    作者:陆斌文章来自微信公众号:平台人生 内容简介:ESXi与物理交换机之间配置静态链路聚合时,因为静态链路聚合的特点,在进行down网卡和从虚拟交换机移除网卡的操作时,可能会无法完成故障流量切换,影响 ...

  7. phpMyAdmin无法缓存模板文件,所以会运行缓慢。

    出现这个的原因是 phpmyadmin的安装目录, tmp目录不存在,或者存在但是权限不对.这是个缓存目录,可以加快phpmyadmin的运行,即使不理睬这个警告信息,也不会影响程序的执行. 解决的方 ...

  8. Http的通信机制?

    HTTP协议即超文本传送协议(Hypertext Transfer Protocol  ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用. HTTP连接 ...

  9. c#图像处理的简单算法

    原文链接:https://blog.csdn.net/wchstrife/article/details/78984735 使用C#进行图像处理前言之前一直认为图像处理是一件很高大上的事情,在一门选修 ...

  10. mysql数据库之 存储引擎、事务、视图、触发器、存储过程、函数、流程控制、数据库备份

    目录 一.存储引擎 1.什么是存储引擎? 2.mysql支持的存储引擎 3. 使用存储引擎 二.事务 三.视图 1.什么是视图 2.为什么要用视图 3.如何用视图 四.触发器 为何要用触发器 创建触发 ...