redis-主从复制、读写分离
1、为什么要主从复制(一主多仆),读写分离:redis在作为缓存的时候,随着数据的不断增加,是有可能出现宕机的,这时候就出现了“单点故障”,解决方案就是进行主从复制,读写分离。
原理图:Master是主,Slave是从,Master具有读写权限,Slave只有读权限(以下还会介绍redis分布式锁,即当Master死机之后,利用“sentinel监控”把Slave其中一个提升为Master,让系统继续执行,直至原Master重启后恢复)

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
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-主从复制、读写分离的更多相关文章
- redis 主从复制+读写分离+哨兵
1.redis读写分离应用场景 当数据量变得庞大的时候,读写分离还是很有必要的.同时避免一个redis服务宕机,导致应用宕机的情况,我们启用sentinel(哨兵)服务,实现主从切换的功能.redis ...
- redis主从复制读写分离
主从复制,读写分离 Master/Slave 是什么 master写入 slave读取 能干嘛 读写分离,更加安全,性能提升 怎么玩 一主二仆.薪火相传.反客为主 周明老师,能够把长篇大论总结的很精辟 ...
- 基于Redis主从复制读写分离架构的Session共享
1.搭建主从复制 第一步:将Redis拷贝到虚拟机上的指定文件夹内,此Redis作为主服务 第二步:将Redis拷贝到本机的指定文件夹内,此Redis作为从服务 第三步:修改主服务的配置文件(redi ...
- 基于Redis主从复制读写分离架构的Session共享(Windows Server)
搭建主从复制 1.安装软件 下载Redis-x64-3.2.100.zip:https://github.com/MicrosoftArchive/redis/releases 第一步:将Redis拷 ...
- Redis 主从复制, 读写分离
1: 是什么? 2: 经常是配置从库, 不配置主库 3.1: 每次与 master 断开之后都要从连, 除非你配置了redis.conf 3.2: 获取当前redis 服务信息 => info ...
- Redis的读写分离
1.概述 随着企业业务的不断扩大,请求的并发量不断增长,Redis可能终会出现无法负载的情况,此时我们就需要想办法去提升Redis的负载能力. 读写分离(主从复制)是一个比较简单的扩展方案,使用多台机 ...
- redis sentinel 读写分离
redis sentinel 读写分离 https://www.jianshu.com/p/d1636776bb40
- mysql主从复制-读写分离
mysql主从复制+读写分离 环境:mysql主:193.168.1.1mysql从:193.168.1.2amoeba代理:193.168.1.3########################## ...
- Mysql多实例安装+主从复制+读写分离 -学习笔记
Mysql多实例安装+主从复制+读写分离 -学习笔记 .embody{ padding:10px 10px 10px; margin:0 -20px; border-bottom:solid 1px ...
- windows下Redis 主从读写分离部署
原文:windows下Redis 主从读写分离部署 1.可直接下载window下的运行文件(下面这个链接) 也可以浏览github 查看相应的版本说明文档 https://github.com/Ser ...
随机推荐
- python jdbc连接 oracle 数据库
准备写一个代码生成的小工具自己用,第一步,连接数据库 import jaydebeapi url = 'jdbc:oracle:thin:@192.168.0.13:1521:JGD' user = ...
- Java I/O(二)其他常用的输入输出流PrintStream等、标准流重定向
四.FilterOutputStream.PrintStream PrintStream是继承自FilterStream类的,例如标准输出流System.out就是著名的PrintStream类对象. ...
- git最最最最...常用命令
使用git 也有一段时间了,但是一直没有好好的去学下:今天刚好有空,就把自己不足的地方补了一下:废话就不多说了,直接步入正题: 1:git 如何提交代码 以及 如何拉代码 git clone可以将远程 ...
- 基于树莓派2代的DIY无线路由器
最近手上多了一个树莓派2代,于是折腾就这么开始了. 因为总是得要个显示屏或者路由器或者插根网线才能玩,有点麻烦,所以有了此文. 设备清单: 树莓派2代 EDUP EP-N8508GS无线网卡(USB) ...
- 2017 阿里巴巴 C++后台开发一面 3.14
下午4点接到一个杭州打过来的电话,阿里巴巴一面.持续时间半个小时. 面试官是阿里云KVStore组. 1.自我介绍,说一下项目 说了下之前在公司做的手绘几何图形规整输出的项目,提了下当时遇到的问题,以 ...
- mysql自动化审核工具Yearning
mysql自动化审核工具Yearning cd /opt/wget https://github-production-release-asset-2e65be.s3.amazonaws.com/10 ...
- [洛谷P4040] AHOI2014 宅男计划
题目背景 自从迷上了拼图,JYY就变成了个彻底的宅男.为了解决温饱问题,JYY不得不依靠叫外卖来维持生计. 问题描述 外卖店一共有N种食物,分别有1到N编号.第i种食物有固定的价钱Pi和保质期Si.第 ...
- zrender-粒子动画
效果: let x = shuN.style.x + rectValue/4,//粒子开始的地方 y = zuY+140 + 5, h = 14*0.8, w = rectValue/2; this. ...
- 「CF 961G」Partitions
题目链接 戳我 \(Solution\) 首先,这个直接推式子.自己推去 所以我们来想一想一些巧妙的方法 \(|S|\sum w_i\) 可以转化为:划分好集合后,每个点都对当前点有\(w_i\)的贡 ...
- apache的httpclient进行http的交互处理
使用apache的httpclient进行http的交互处理已经很长时间了,而httpclient实例则使用了http连接池,想必大家也没有关心过连接池的管理.事实上,通过分析httpclient源码 ...