zoukankan      html  css  js  c++  java
  • Redis集群+sentinel

    Redis集群+sentinel

    目录结构

    Redis版本Redis-x64-3.2.100,分别新建marter,slave1、slave2、slave3、sentinel 5个文件夹.将Redis解压,以上的每个文件夹拷贝一份。

    1

    2

    Master配置

    redis.windows.conf修改为redis6379.conf(改这个文件名只是为了好区分它用那个端口,不改也可以)

    修改配置

    只需要修改Bind的IP。

    Port端口不需要修改,就让master用默认的6379端口

    Bind 127.0.0.1
    #修改为(192.168.2.121是本机IP
    Bind 192.168.2.121

    启动Master

    redis-server.exe redis6379.conf
    3

    Slave1配置

    redis.windows.conf修改为redis6379.conf(改这个文件名只是为了好区分它用那个端口,不改也可以)

    修改配置

    1. 修改bind
    Bind 127.0.0.1
    #修改为(192.168.2.121是本机IP
    bind 192.168.2.121
    1. 修改port
    Prot 6379
    #修改为 (6379端口 已经被master用了)
    port 6380
    1. 修改slaveof

    slaveof原来是注释掉的#slaveof,要将它去掉。
    slaveof前面不能用空格否则启动slave时会报错
    表明slave1是master的slave

    slaveof  192.168.2.121 6379

    启动salve1

    4

    启动salve1之后,我们切换到刚才的master窗口,可以看到salve1已经连接上master了。

    5

    按照配置Salve1的方式,分别配置置slave2、slave3(配置文件里面需要修改:Bind、Port、Slaveof)

    Sentinel简介

    1. 概述

      Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自懂切换。
      它的主要功能有以下几点

    • 不时地监控redis是否按照预期良好地运行;
    • 如果发现某个redis节点运行出现状况,能够通知另外一个进程(例如它的客户端);
    • 能够进行自动切换。当一个master节点不可用时,能够选举出master的多个slave(如果有超过一个slave的话)中的一个来作为新的master,其它的slave节点会将它所追随的master的地址改为被提升为master的slave的新地址。
    1. Sentinel支持集群

    很显然,只使用单个sentinel进程来监控redis集群是不可靠的,当sentinel进程宕掉后(sentinel本身也有单点问题,single-point-of-failure)整个集群系统将无法按照预期的方式运行。所以有必要将sentinel集群,这样有几个好处:

    • 即使有一些sentinel进程宕掉了,依然可以进行redis集群的主备切换;
    • 如果只有一个sentinel进程,如果这个进程运行出错,或者是网络堵塞,那么将无法实现redis集群的主备切换(单点问题);
    • 如果有多个sentinel,redis的客户端可以随意地连接任意一个sentinel来获得关于redis集群中的信息。

    配置Sentinel

    新建一个sentinel26379.conf配置文件
    文件内容

    bind 192.168.2.121
    port 26379
    sentinel monitor mymaster 192.168.2.121 6379 2
    sentinel down-after-milliseconds mymaster 60000
    sentinel failover-timeout mymaster 180000
    sentinel parallel-syncs mymaster 1

    启动sentinel

    redis-server.exe sentinel26379.conf --sentinel

    注意一定要加后面的--sentinel参数,否则会报以下错误

    6

    异常:
    *** FATAL CONFIG FILE ERROR ***
    [16604] 06 Jan 11:27:24.150 # Reading the configuration file, at line 4
    [16604] 06 Jan 11:27:24.150 # >>> 'sentinel myid 0fad29ab9451bd82d10eb015092cf893a886dbd4'
    [16604] 06 Jan 11:27:24.151 # sentinel directive while not in sentinel mode

    7

    Sentinel也可以像redis配置集聚,当其中一个挂掉之后,其它sentinel仍然可以继续工作。只需要多拷贝一份,修改一下端口即可。

    测试master和salve数据同步

    • 在master中设置值,看slave是否能够同步

    启动一个client连接master,然后,设置值。

    1. 查看一下基本信息

    I:Redis_Groupmaster>redis-cli.exe -h 192.168.2.121 -p 6379 192.168.2.121:6379> info Replication

    # Replication
    role:master
    connected_slaves:3
    slave0:ip=192.168.2.121,port=6380,state=online,offset=189652,lag=1
    slave1:ip=192.168.2.121,port=6382,state=online,offset=189793,lag=0
    slave2:ip=192.168.2.121,port=6381,state=online,offset=189793,lag=1
    master_repl_offset:189793
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:2
    repl_backlog_histlen:189792
    1. 设置值|获取值
    192.168.2.121:6379> set name 'Mr.Yang'
    OK
    192.168.2.121:6379> get name
    "Mr.Yang"

    8

    1. 另起一个client连接slave看slave是否能够获取到master设置的值
    I:Redis_Groupslave1>redis-cli.exe -h 192.168.2.121 -p 6380
    192.168.2.121:6380> get name
    "Mr.Yang"
    192.168.2.121:6380>

    9

    同理,我们开起client连接slave2、slave3同样也能获取到master设置的值
    10
    11

    1. 测试在Slave1设置值
      12
    提示:
    (error) READONLY You can't write against a read only slave.

    Slave为只读不能够设置值

    1. Master修改值,看slave是否能同步

    13
    查看Salve1中它的值
    14

    其他Salve中的值也一样

    1. Master删除值,看slave是否能同步

    15

    Slave1、Slave2、Slave3中已经查询不到该值

    16

    测试Sentinel

    当master挂掉之后,看sentinel是否能够将其中一台slave由slave提升成master从而保证系统的稳定性

    我们直接将启动master的窗口关闭,再看setinel将slave1、slave2、slave3当中那一个slave设置成master了。

    Sentinel将 slave1从slave变成master了

    17
    18

    重新开启原来已经关闭掉的master(6379端口)

    19
    20

    可以看到它已经由master变成slave了

    同时我们在原来的slave1(现在它已经变成master了)的连接信息中可以看到6379这个slave(原来的master)已经连接到它了。
    21

  • 相关阅读:
    iOS 手势操作:拖动、捏合、旋转、点按、长按、轻扫、自定义
    一个基于MVVM的TableView组件化实现方案
    代码审查和不良编程习惯
    十二步创建你的第一个JavaScript库
    可简单避免的三个 JavaScript 发布错误
    巧用Javascript将相对路径地址转换为绝对路径
    jquery 事件对象属性小结
    26个Jquery使用小技巧
    应用于网站导航中的 12 个 jQuery 插件
    使用 jQuery 避免鼠标双击
  • 原文地址:https://www.cnblogs.com/Yang2012/p/8078644.html
Copyright © 2011-2022 走看看