一、下载

由于redis官方并不支持windows操作系统,所以官网上是下不到的,需要到gitlab上下载,下载地址如下:

https://github.com/MicrosoftArchive/redis/releases

二、解压安装

将下载后的zip文件解压到本地磁盘,注意解压到的目录不能有中文和特殊字符,否则会出现很多奇葩的问题。解压后的目录如下:

三、HA配置

我们采用一主(master)二从(slave)三sentinel的架构模式来做演示
master ip:127.0.0.1 port:6379
slave1 ip:127.0.0.1 port:6380
slave2 ip:127.0.0.1 port:6381

四、新建和修改配置文件

1、修改redis.conf配置文件

由于我们采用的是一主二从三sentinel的模式,所以我们需要6个配置文件,拷贝2份redis.windows.conf配置文件,分别命名为redis.windows6380.conf和redis.windows6381.conf,其中修改redis.windows.conf配置文件的如下几个参数:
port 6379
bind 127.0.0.1

redis.windows6380.conf如下:
port 6380
bind 127.0.0.1
slaveof 127.0.0.1 6379 // 设置master服务器为6379

redis.windows6381.conf如下:
port 6381
bind 127.0.0.1
slaveof 127.0.0.1 6379 // 设置master服务器为6379

2、创建并修改sentinel.conf

该模式使用了3sentinel,所以我们需要复制3份sentinel.conf配置文件,并分别命名为sentinel26479.conf和sentinel26579.conf,其中修改sentinel.conf配置文件中的如下几个参数:
/**
1. port :当前Sentinel服务运行的端口
2.sentinel monitor mymaster 127.0.0.1 6379 2:Sentinel去监视一个名为mymaster的主redis实例,这个主实例的IP地址为本机地址127.0.0.1,端口号为6379,而将这个主实例判断为失效至少需要2个 Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行
3.sentinel down-after-milliseconds mymaster 5000:指定了Sentinel认为Redis实例已经失效所需的毫秒数。当 实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线,这时自动故障迁移才会执行
4.sentinel parallel-syncs mymaster 1:指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长
5.sentinel failover-timeout mymaster 15000:如果在该时间(ms)内未能完成failover操作,则认为该failover失败
**/

sentinel.conf内容:
port 26379
sentinel myid 88a3f92f656984fd84c183b6b183d5d264ddc485
sentinel monitor mymaster 127.0.0.1 6381 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 15000

sentinel26479.conf内容:
port 26479
sentinel myid 6c4798231532356aacf132f1aa952f022f41012e
sentinel monitor mymaster 127.0.0.1 6381 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 15000

sentinel26579.conf内容:
port 26579
sentinel myid fad25e089080be8dddadd3f20e44f888b1f8d48a
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 15000

3、安装服务,需要重新设置名称。然后去服务中,开启“redis6380”(此时就可以连接6380的库了)

redis-server --service-install redis.windows.conf --service-name redis6379
redis-server --service-install redis.windows6380.conf --service-name redis6380
redis-server --service-install redis.windows6381.conf --service-name redis6381

五、启动服务器

1、分别启动master,slave1,slave2

启动命令分别如下:

redis-server.exe redis.windows.conf
redis-server.exe redis.windows6380.conf
redis-server.exe redis.windows6381.conf

2、分别启动sentinel1,sentinel2,sentinel3

启动命令分别如下:
redis-server.exe sentinel.conf --sentinel
redis-server.exe sentinel26479.conf --sentinel
redis-server.exe sentinel26579.conf --sentinel

服务启动成功后,界面显示如下:

3、查看redis服务器状态

4、查看sentinel的状态

六、redis主从自动failover测试

1、停止master服务器

2、查看剩余服务器的状态

从上图中可以看出来,master的服务器端口从6379变成了6380,也就是说redis自动的实现了主从切换,我们可以在查看下sentinel的状态,如下:

我们发现sentinel监控到127.0.0.1:6379已经无法ping通了,切换master服务器为127.0.0.1:6381

七、下面来研究下slave服务器和master服务器间是如何建立起主从同步机制的。

1、Slave服务启动,主动连接Master,并发送SYNC命令,请求初始化同步

2、Master收到SYNC后,执行BGSAVE命令生成RDB文件,并缓存该时间段内的写命令

3、Master完成RDB文件后,将其发送给所有Slave服务器

4、Slave服务器接收到RDB文件后,删除内存中旧的缓存数据,并装载RDB文件

5、Master在发送完RDB后,即刻向所有Slave服务器发送缓存中的写命令

6、至此初始化完成,后续进行增量同步

八、Redis Slaveof 命令

Redis Slaveof 命令可以将当前服务器转变为指定服务器的从属服务器(slave server)。

如果当前服务器已经是某个主服务器(master server)的从属服务器,那么执行 slaveof host port 将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。

另外,对一个从属服务器执行命令 slaveof no one 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。

利用『 slaveof no one 不会丢弃同步所得数据集 』这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行

redis主从,哨兵(windows版)的更多相关文章

  1. Redis 主从配置(Windows版)

    安装从库 1.复制一份 Redis 文件,当做从库. 2.修改从库文件中 redis.windows.conf 的端口号. 3.安装服务,需要重新设置名称.然后去服务中,开启“redis6380”(此 ...

  2. redis主从+ 哨兵模式(sentinel)+漂移VIP实现高可用系统

    原文:https://www.jianshu.com/p/c2ab606b00b7 客户端程序 客户端程序(如PHP程序)连接redis时需要ip和port,但redis-server进行故障转移时, ...

  3. redis 主从 哨兵

    数据库为什么要读写分离 写代码好多年了,大家先抛弃在代码框架里面各种花哨的设计之外,写的代码到最后无非就是为了增删查改数据库.一般项目数据库刚开始只是但一个库,随着数据量的增大,就开始优化数据库(抛开 ...

  4. Redis 主从+哨兵+监控 (centos7.2 + redis 3.2.9 )

    环境准备: 192.168.0.2  redis01 主 192.168.0.3  redis02 从 192.168.0.4  redis03 从 Redis 主从搭建 一:下载并安装redis软件 ...

  5. redis主从+哨兵模式

    主从模式配置分为手动和配置文件两种方式进行配置,我现在有192.168.238.128(CentOS1).192.168.238.131(CentOS3).192.168.238.132(CentOS ...

  6. redis主从+哨兵模式(借鉴)

    三台机器分布 192.168.189.129  //  master的角色 192.168.189.130  //  slave1的角色 192.168.189.131  //  salve2的角色 ...

  7. 【Redis学习专题】- Redis主从+哨兵集群部署

    集群版本: redis-4.0.14 集群节点: 节点角色 IP redis-master 10.100.8.21 redis-slave1 10.100.8.22 redis-slave2 10.1 ...

  8. Redis主从&哨兵集群搭建

    主从集群 在搭建主从集群前,我们先把Redis安装起来: #解压Redis压缩包 [root@master lf]# tar -zxvf redis-6.2.1.tar.gz -- #安装gcc [r ...

  9. 三千字介绍Redis主从+哨兵+集群

    一.Redis持久化策略 1.RDB 每隔几分钟或者一段时间会将redis内存中的数据全量的写入到一个文件中去. 优点: 因为他是每隔一段时间的全量备份,代表了每个时间段的数据.所以适合做冷备份. R ...

  10. 【Azure Redis 缓存】Windows版创建 Redis Cluster 实验 (精简版)

    简介 学习Redis Cluster的第一步,即本地搭建Redis Cluster.但是在Redis的官方文档中,是介绍在Linux系统中搭建Redis Cluster.本文主要介绍在Windows系 ...

随机推荐

  1. Html 响应式 Web

    网格视图 很多网页都是基于网格设计的,这说明网页是按列来布局的. 使用网格视图有助于我们设计网页.这让我们向网页添加元素变的更简单. 响应式网格视图通常是 12 列,宽度为100%,在浏览器窗口大小调 ...

  2. laravel queue 修改之后不生效的坑

    其实官方文档有说,只是没看仔细. 正常情况下,修改 php 代码是不用重启什么东西的, 但是 laravel 中的 job 不一样, 如果不用 php artisan queue:restart,新 ...

  3. P1392 取数

    P1392 取数 题目描述 在一个n行m列的数阵中,你须在每一行取一个数(共n个数),并将它们相加得到一个和.对于给定的数阵,请你输出和前k小的取数方法. 说明 对于20%的数据,n≤8 对于100% ...

  4. 大量DOM操作的解决方案

    案例:如何在页面元素ul中一次性插入30000个li标签,保证页面体验流畅呢? 解决方案:可以从减少 DOM 操作次数.缩短循环时间两个方面减少主线程阻塞的时间 减少 DOM 操作次数的良方是 Doc ...

  5. Git之修复Bug流程

    场景描述 当一个项目已经上线,同时又在原有基础上新增功能模块,于是乎就要在原有代码的基础上进行开发,在新增模块功能的开发的过程中,项目发现了一个紧急Bug,需要修复.应对这种情况,有以下两种解决方案: ...

  6. angularJS $routeProvider

    O'Reilly书上的伪代码 var someModule = angular.module('someModule',[...module dependencies]); someModule.co ...

  7. R5—字符串处理/正则表达式

    R通常被用来进行数值计算比较多,字符串处理相对较少,而且关于字符串的函数也不多,用得多的就是substr.strsplit.paste.regexpr这几个了.实际上R关于字符串处理的功能是非常强大的 ...

  8. func_get_args()获取参数

    php中func_get_args()可以获取多个参数,讲多个参数放在数组里面. <?php function show() { $attr = func_get_args();//获取输入的参 ...

  9. 用代码从文件中导入数据到SQL Server

    引言 导入数据到SQL Server 是常见的需求,特别是定期导入这种需求. 对于定期导入主要有以下几种方式可选择: Bulk Insert Bcp Utility OpenRowSet 写程序导入( ...

  10. 图片压缩-KMeans

    下面给大家一起分享使用KMeans自动聚类,压缩图片像素点.每种图片可能他们的维度都不同,比如jpg一共有(w,h,3)三维,但是灰度图只有一维(w,h,1),也有四维的图片(w,h,4)等等.我们可 ...