【Redis学习之八】Redis集群:主从复制
环境
虚拟机:VMware 10
Linux版本:CentOS-6.5-x86_64
客户端:Xshell4
FTP:Xftp4
jdk8
redis-2.8.18
Redis集群分类:
主从复制 Replication:镜像:增删改(主<退化到单节点>)查询负载到从节点
高可用 Sentinel
分布式 twemproxy:切片
集群 Cluster
一、主从复制:从节点全量复制主节点镜像,使用单节点执行增删改操作,使用一堆从节点执行查询
(1)一个Redis服务可以有多个该服务的复制品,这个Redis服务称为Master,其他复制品称为Slaves;
只要网络连接正常,Master会一直将自己的数据更新同步给Slaves,保持主从同步,同步数据方式是异步的,不确认同步任务是否成功。
(2)只有Master可以执行写命令,Slaves只能执行读命令,从服务器执行客户端发送的读命令,比如GET、LRANGE、SMEMMBERS、HGET、ZRANGE等等,客户端可以连接Slaves执行读请求,来降低Master的读压力
(3)主从切换是手动的,使用Sentinel哨兵,实现故障自动转移Failover操作
1、主从复制创建的两种方式:
(1)配置方式:
启动时,服务器读取配置文件,并自动成为指定服务器的从服务器
slaveof <masterip> <masterport>
(2)命令方式:
redis-server --slaveof <master-ip> <master-port>,配置当前服务称为某Redis服务的Slave
# redis-server --port 6380 --slaveof 127.0.0.1 6379
SLAVEOF host port命令,将当前服务器状态从Master修改为别的服务器的Slave
redis > SLAVEOF 192.168.1.1 6379,将服务器转换为Slave
redis > SLAVEOF NO ONE ,将服务器重新恢复到Master,不会丢弃已同步数据
搭建伪分布式主从复制架构示例:
同一个节点启动三个redis实例
主:[cluster@PCS103 ~]$ redis-server --port
从1:[cluster@PCS103 ~]$ redis-server --port --slaveof 127.0.0.1
从2:[cluster@PCS103 ~]$ redis-server --port --slaveof 127.0.0.1
(1)主节点赋值,从节点取值:
[root@PCS103 bin]# redis-cli -h PCS103 -p 6380 --raw
PCS103:6380> set k1 djfklsdk
OK
[root@PCS103 bin]# redis-cli -h PCS103 -p 6381 --raw
PCS103:6381> get k1
"djfklsdk"
(2)从节点赋值报错:
PCS103:6381> set k2 1212
(error) READONLY You can't write against a read only slave.
(3)主掉线,将6381升为主,6382修改为6381的从
PCS103:6381> SLAVEOF NO ONE
OK
PCS103:6382> SLAVEOF 127.0.0.1 6381
OK
PCS103:6382> get k1
"djfklsdk"
(4)6380重新上线,改为6381的从
[cluster@PCS103 ~]$ redis-server --port 6380 --slaveof 127.0.0.1 6381
PCS103:6380> get k1
"djfklsdk"
二、哨兵-Sentinel(3.0之前版本的做法)
主从复制下的高可用方案:
(1)Sentinel会不断检查Master和Slaves是否正常,在Master下线后自动执行Failover操作,提升一台Slave为Master,并让其他Slaves重新成为新Master的Slaves;
(2)哨兵可以监控任意多个Master和该Master下的Slaves,
(3)多个哨兵可以只监控1个Master和该Master下的Slaves,监控同一个Master的Sentinel会自动连接,组成一个分布式的Sentinel网络,互相通信并交换彼此关于被监视服务器的信息
(4)主从复制+哨兵Sentinel只解决了读性能和高可用问题,但是没有解决写性能问题

1、配置文件sentinel.conf
(1)Sentinel默认端口号为26379
(2)指定被监控Master的相关信息,Sentinel会根据Master的配置自动发现Master的Slaves
Sentinel monitor <name> <ip> <port> <quorum>
master别名 masterIP master端口 选举得票最小数
监视mymaster的主服务器,将这个主服务器判断为下线失效至少需要quorum个Sentinel同意,如果多数Sentinel同意才会执行故障转移
2、启动 Sentinel
首先启动一个Redis服务实例
其次启动哨兵:redis-sentinel sentinel.conf
举例:
搭建伪分布式主从复制架构示例,同一个节点启动三个redis实例
主:[cluster@PCS103 ~]$ redis-server --port
从1:[cluster@PCS103 ~]$ redis-server --port --slaveof 127.0.0.1
从2:[cluster@PCS103 ~]$ redis-server --port --slaveof 127.0.0.1
配置三个哨兵:
sentinel1.conf:
port 26380
Sentinel monitor wjy 127.0.0.1 6380 2
sentinel2.conf:
port 26381
Sentinel monitor wjy 127.0.0.1 6380 2
sentinel3.conf:
port 26382
Sentinel monitor wjy 127.0.0.1 6380 2
启动三个哨兵:
[cluster@PCS103 ~]$redis-sentinel sentinel1.conf
[cluster@PCS103 ~]$redis-sentinel sentinel2.conf
[cluster@PCS103 ~]$redis-sentinel sentinel3.conf

3、监控过程
当一个sentinel认为被监视的服务器已经下线时,它会向网络中的其他Sentinel进行确认,判断该服务器是否真的已经下线
如果下线的服务器为主服务器,那么sentinel网络将对下线主服务器进行自动故障转移,通过将下线主服务器的某个从服务器提升为新的主服务器,并让其从服务器转为复制新的主服务器,以此来让系统重新回到上线的状态

【Redis学习之八】Redis集群:主从复制的更多相关文章
- redis 学习笔记-cluster集群搭建
一.下载最新版redis 编译 目前最新版是3.0.7,下载地址:http://www.redis.io/download 编译很简单,一个make命令即可,不清楚的同学,可参考我之前的笔记: red ...
- redis 学习笔记2(集群之哨兵模式的使用)
redis3.0之前已经有了哨兵模式,3.0之后有了cluster(分片集群),官方不推荐使用!!主要原因是分片后单节点故障后需要实现手动分槽... 集群较为成熟的解决方案codis,公司使用的是哨兵 ...
- Redis集群主从复制(一主两从)搭建配置教程【Windows环境】
如何学会在合适的场景使用合适的技术方案,这值得思考. 由于本地环境的使用,所以搭建一个本地的Redis集群,本篇讲解Redis主从复制集群的搭建,使用的平台是Windows,搭建的思路和Linux上基 ...
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
- 分布式缓存技术redis学习(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
- redis 学习笔记——redis集群
redis-cluster 简介 redis-cluster是一个分布式.容错的redis实现,redis-cluster通过将各个单独的redis实例通过特定的协议连接到一起实现了分布式.集群化的目 ...
- Redis创建高可用集群教程【Windows环境】
模仿的过程中,加入自己的思考和理解,也会有进步和收获. 在这个互联网时代,在高并发和高流量可能随时爆发的情况下,单机版的系统或者单机版的应用已经无法生存,越来越多的应用开始支持集群,支持分布式部署了. ...
- 一文掌握Redis的三种集群方案
在开发测试环境中,我们一般搭建Redis的单实例来应对开发测试需求,但是在生产环境,如果对可用性.可靠性要求较高,则需要引入Redis的集群方案.虽然现在各大云平台有提供缓存服务可以直接使用,但了解一 ...
- redis + 主从 + 持久化 + 分片 + 集群 + spring集成
Redis是一个基于内存的数据库,其不仅读写速度快,每秒可以执行大约110000的写操作,81000的读取操作,而且其支持存储字符串,哈希结构,链表,集合丰富的数据类型.所以得到很多开发者的青睐.加之 ...
- 项目实战11—企业级nosql数据库应用与实战-redis的主从和集群
企业级nosql数据库应用与实战-redis 环境背景:随着互联网2.0时代的发展,越来越多的公司更加注重用户体验和互动,这些公司的平台上会出现越来越多方便用户操作和选择的新功能,如优惠券发放.抢红包 ...
随机推荐
- AT3611 Tree MST 点分治+最小生成树
正解:点分治+最小生成树 解题报告: 传送门! 然后这题麻油翻译,,,所以这边的建议是先说下题意呢亲 所以题意大概就是说,给一棵n个节点的树,树上每个点都有个权值,然后构造一个完全图,(u,v)之间连 ...
- vue指令v-html中使用过滤器filters功能
Vue 2.0 不再支持在 v-html 中使用过滤器 解决方法: 1:全局方法(推荐) 2:computed 属性 3:$options.filters(推荐) 1:使用全局方法: 可以在 Vue ...
- SmokePing介绍
一.SmokePing是什么? smokeping是rrdtool的作者Tobi Oetiker的作品,用Perl语言写的,主要是监视网络性能,所以它在图形显示方面有很大优势,也是一个很有特点的ope ...
- python实现图片隐藏信息技术
隐秘通信的3种典型方式: ①将秘密信息隐于网络通信协议中. ②将秘密信息隐于数字签名等密码协议中 . ③将秘密信息隐于数字图像中. 第三种是利用图像或音频数据对人类感官系统的冗余. 隐藏域数字图像中的 ...
- ul+li水平居中的几种方法
一.posotion:relative; 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF- ...
- 匹配整个img路径
<script>var regex=/^(<img src=")(.+)(">)/;var src='<img src="file:///D ...
- springboot + mybatis配置分页插件
一:使用pagehelper配置分页插件 1:首先配置springboot +mybatis框架 参考:http://www.cnblogs.com/liyafei/p/7911549.html 2 ...
- Java 基础 面向对象之构造方法和关键字
构造方法 构造方法简介 在开发中经常需要在创建对象的同时明确对象的属性值,比如员工入职公司就要明确他的姓名.年龄等属性信息. 那么,创建对象就要明确属性值,那怎么解决呢?也就是在创建对象的时候就要做的 ...
- AD使用ntdsutil工具 恢复主域控制器 清理孤立域控制器
需求: 主域控制器出现灾难故障,辅助域控制器正常 在辅助域控制器使用ntdsutil工具清理主域控制器并夺取PDC角色 首先清理孤立的域控制器 ntdsutil ntdsutil: metadata ...
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(六)RTP音视频传输解析层之音视频数据传输格式
一.差异 本地音视频数据格式和用来传输的音视频数据格式存在些许差异,由于音视频数据流到达客户端时,需要考虑数据流的数据边界.分包.组包顺序等问题,所以传输中的音视频数据往往会多一些字节. 举个例子,有 ...