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. 小米Air 13.3 安装Arch Linux

    0. 前言 最近新买了一台小米Air 13.3,除了但键盘手感外都比较满意.我比较喜欢折腾Linux,但又不想放弃原有的Windows 10 Home,于是在原有的windows 10基础上再安装了A ...

  2. msvsmon.exe xp下不能运行

    远程调试   xp 下不能执行 vs2013 远程调试器 xp下不能运行 vs2010 远程调试器 xp下可以运行

  3. 递归型SPFA+二分答案 || 负环 || BZOJ 4773

    题解: 基本思路是二分答案,每次用Dfs型SPFA验证该答案是否合法. 一点细节我注释在代码里了. 代码: #include<cstdio> #include<cstring> ...

  4. 使用RedisTemplate的操作类访问Redis(转载)

    原文地址:http://www.cnblogs.com/luochengqiuse/p/4641256.html private ValueOperations<K, V> valueOp ...

  5. docker查看容器IP地址

    docker inspect 容器名称或 id 命令:docker inspect redismaster 结果:

  6. Phaserjs怎样用ES6开发游戏

    想用ES6语法开发phaserjs游戏,是phaserCE,但是不知道怎么导入,总是报错,后来经过多次尝试,解决方法如下: 干脆不导入,直接暴露到window里,然后模块化的代码全部在window.o ...

  7. 日志管理-rsyslog日志服务器及loganalyzer

    一,日志基础 日志:记录时间,地点,任务,事件 格式:日期时间 主机 进程[pid]: 事件内容 rsyslog 特性: 多线程,UDP, TCP, SSL, TLS, RELP,MySQL, PGS ...

  8. 窗体操作:ShowWindow(SW_HIDE)

    BOOL ShowWindow( int nCmdShow ); Return Value 作用: 如果窗口原来可见,则返回非零值:如果CWnd原来是隐藏的,则返回0   参数: Parameters ...

  9. python3基础:基本语句

    http://www.cnblogs.com/qq21270/p/4591318.html  字符串.文本文件 http://www.cnblogs.com/qq21270/p/7872824.htm ...

  10. JPA 开发写SQL时候遇见的困难点

    官方文档 https://docs.spring.io/spring-data/jpa/docs/1.11.16.RELEASE/reference/html/#repositories.specia ...