Redis主从复制,哨兵机制

勿以浮沙筑高台


Redis主从机制

环境搭建

这里我们搭建三个rdis来实现一个一主二从的redis集群。

  • 修改redis.conf文件为三个,端口号分别是6379,6380,6381
    [root@work1 bin]#  ./redis-server ./redis-6379.conf
    [root@work1 bin]#  ./redis-server ./redis-6380.conf
    [root@work1 bin]#  ./redis-server ./redis-6381.conf
    
  • 修改配置文件信息
    92 行 port 6380   #端口号
    247 行 pidfile /var/run/redis_6380.pid  #pidfile文件
    260 行 logfile "/usr/local/redis/logs/6380.log"   #配置文件地址
    342 行 dbfilename dump_6380.rdb   #rdb文件
    
  • 启动三个Redis
    [root@work1 bin]#  ./redis-server ./redis-6379.conf
    [root@work1 bin]#  ./redis-server ./redis-6380.conf
    [root@work1 bin]#  ./redis-server ./redis-6381.conf
    
  • 这里以6379为主,80和81为从
  • 分别切换到80和81上执行命令
    SLAVEOF 192.168.3.109 6379    #执行指定master命令
    info replication              #查看当前redis主从info命令
    # Replication
    role:slave
    master_host:192.168.31.109   #masterIP
    master_port:6379             #masterPort
    master_link_status:up
    master_last_io_seconds_ago:9
    master_sync_in_progress:0
    slave_repl_offset:14
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_replid:705152324014710b88db075af98e225910b45d8e
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:14
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:14
    127.0.0.1:6380> exit
    [root@work1 bin]# cp redis.conf redis-6381.conf
    cp:是否覆盖"redis-6381.conf"? n
    [root@work1 bin]# ./redis-cli -p 6381
    

演示

  • 在6379主中写入一个节点,在从数据中获得了节点数据。倘若重新写加入一个从Redis也可以从copy中获得节点
     127.0.0.1:6379> set name zhangshan
    OK
    127.0.0.1:6379> exit
    [root@work1 bin]# ./redis-cli -p 6381
    127.0.0.1:6381> get name
    "zhangshan"
    127.0.0.1:6381>
    [root@work1 bin]# ./redis-cli -p 6380
    127.0.0.1:6380> get name
    "zhangshan"
    127.0.0.1:6380>
    

pkill redis

主从实现原理

  • 基础准备对RDB的概念请看文章。
    Redis持久化机制(RDB原理和AOF原理)

  • Slave(从) 启动成功连接到 Master(主) 后会发送一个 sync (同步)同步命令。

  • Master 接收到命令后,启动后台的存盘进程,将 RDB文件全部copy到Slave当中。

  • Slave文件运行RDB文件,创建节点。

  • 倘若后面还有数据的增加就不是全量Copy,只将增连Copy。


Redis哨兵机制

处理问题,当Master(主)程序发生宕机后,Slave(从)是无法重新进行选举的。因为彼此之间并没有进行联系,这时候Redis采用哨兵进行监听(本质就是心跳检测),哨兵进行监听,发现宕机后,重新从中选举master,当宕机的机子重启后,定义为Slave。

哨兵配置

  • 到redis启动目录创建配置文件sentinel.conf
    # sentinel monitor 被监控的名字(随便写) host 1
    sentinel monitor myredis 192.168.31.109 6379 1
    
  • 启动./redis-sentinel ./sentinel.conf
    [root@work1 bin]# vi sentinel.conf   #编辑config文件
    [root@work1 bin]# ./redis-sentinel ./sentinel.conf    #启动
    1646:X 21 Jun 2021 22:05:20.502 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    1646:X 21 Jun 2021 22:05:20.502 # Redis version=6.0.7, bits=64, commit=00000000, modified=0, pid=1646, just started
    1646:X 21 Jun 2021 22:05:20.502 # Configuration loaded
    1646:X 21 Jun 2021 22:05:20.503 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                    _._
               _.-``__ ''-._
          _.-``    `.  `_.  ''-._           Redis 6.0.7 (00000000/0) 64 bit
      .-`` .-```.  ```\/    _.,_ ''-._
     (    '      ,       .-`  | `,    )     Running in sentinel mode
     |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
     |    `-._   `._    /     _.-'    |     PID: 1646
      `-._    `-._  `-./  _.-'    _.-'
     |`-._`-._    `-.__.-'    _.-'_.-'|
     |    `-._`-._        _.-'_.-'    |           http://redis.io
      `-._    `-._`-.__.-'_.-'    _.-'
     |`-._`-._    `-.__.-'    _.-'_.-'|
     |    `-._`-._        _.-'_.-'    |
      `-._    `-._`-.__.-'_.-'    _.-'
          `-._    `-.__.-'    _.-'
              `-._        _.-'
                  `-.__.-'
    
    1646:X 21 Jun 2021 22:05:20.504 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
    1646:X 21 Jun 2021 22:05:20.611 # Sentinel ID is a184b83f8cb622f0cd4b86d8f718e535b01d924e
    1646:X 21 Jun 2021 22:05:20.611 # +monitor master myredis 127.0.0.1 6379 quorum 1    #监听Master
    1646:X 21 Jun 2021 22:05:20.611 * +slave slave 192.168.31.109:6380 192.168.31.109 6380 @ myredis 127.0.0.1 6379  #监听Slave
    1646:X 21 Jun 2021 22:05:20.616 * +slave slave 192.168.31.109:6381 192.168.31.109 6381 @ myredis 127.0.0.1 6379  #监听Slave
    

演示

  • 切换到Master 6379上,shutdown掉主
    [root@work1 bin]# ./redis-cli
    127.0.0.1:6379> exit
    [root@work1 bin]# ./redis-cli shutdown    #shutdown掉主
    [root@work1 bin]#
    
  • 查看哨兵监听显示,多出来以来内容,,发现纪元+1+new-epoch 2,新的Master是6381
    
     1646:X 21 Jun 2021 22:18:59.281 # +new-epoch 2    #新纪元
     1646:X 21 Jun 2021 22:18:59.281 # +try-failover master myredis 192.168.31.109 6381
     1646:X 21 Jun 2021 22:18:59.292 # +vote-for-leader a184b83f8cb622f0cd4b86d8f718e535b01d924e 2
     1646:X 21 Jun 2021 22:18:59.292 # +elected-leader master myredis 192.168.31.109 6381
     1646:X 21 Jun 2021 22:18:59.292 # +failover-state-select-slave master myredis 192.168.31.109 6381
     1646:X 21 Jun 2021 22:18:59.377 # +selected-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ myredis 192.168.31.109 6381
     1646:X 21 Jun 2021 22:18:59.377 * +failover-state-send-slaveof-noone slave 127.0.0.1:6381 127.0.0.1 6381 @ myredis 192.168.31.109 6381
     1646:X 21 Jun 2021 22:18:59.461 * +failover-state-wait-promotion slave 127.0.0.1:6381 127.0.0.1 6381 @ myredis 192.168.31.109 6381
     1646:X 21 Jun 2021 22:18:59.586 # -sdown master myredis 192.168.31.109 6381      #选举出的新Master
     1646:X 21 Jun 2021 22:18:59.587 # -odown master myredis 192.168.31.109 6381
     1646:X 21 Jun 2021 22:19:00.233 # +promoted-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ myredis 192.168.31.109 6381
     1646:X 21 Jun 2021 22:19:00.233 # +failover-state-reconf-slaves master myredis 192.168.31.109 6381
     1646:X 21 Jun 2021 22:19:00.290 * +slave-reconf-sent slave 192.168.31.109:6380 192.168.31.109 6380 @ myredis 192.168.31.109 6381
     1646:X 21 Jun 2021 22:19:01.283 * +slave-reconf-inprog slave 192.168.31.109:6380 192.168.31.109 6380 @ myredis 192.168.31.109 6381
     1646:X 21 Jun 2021 22:19:01.283 * +slave-reconf-done slave 192.168.31.109:6380 192.168.31.109 6380 @ myredis 192.168.31.109 6381
     1646:X 21 Jun 2021 22:19:01.338 * +slave-reconf-sent slave 127.0.0.1:6380 127.0.0.1 6380 @ myredis 192.168.31.109 6381
     1646:X 21 Jun 2021 22:19:02.292 * +slave-reconf-inprog slave 127.0.0.1:6380 127.0.0.1 6380 @ myredis 192.168.31.109 6381
     1646:X 21 Jun 2021 22:19:02.292 * +slave-reconf-done slave 127.0.0.1:6380 127.0.0.1 6380 @ myredis 192.168.31.109 6381
     1646:X 21 Jun 2021 22:19:02.383 # +failover-end master myredis 192.168.31.109 6381
     1646:X 21 Jun 2021 22:19:02.383 # +switch-master myredis 192.168.31.109 6381 127.0.0.1 6381
     1646:X 21 Jun 2021 22:19:02.384 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ myredis 127.0.0.1 6381
     1646:X 21 Jun 2021 22:19:02.384 * +slave slave 192.168.31.109:6380 192.168.31.109 6380 @ myredis 127.0.0.1 6381
     1646:X 21 Jun 2021 22:19:02.384 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ myredis 127.0.0.1 6381
     1646:X 21 Jun 2021 22:19:02.384 * +slave slave 192.168.31.109:6381 192.168.31.109 6381 @ myredis 127.0.0.1 6381
     1646:X 21 Jun 2021 22:19:12.550 * +convert-to-slave slave 192.168.31.109:6381 192.168.31.109 6381 @ myredis 127.0.0.1 6381
     1646:X 21 Jun 2021 22:19:32.398 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ myredis 127.0.0.1 6381
     1646:X 21 Jun 2021 22:20:09.608 # +sdown master myredis 127.0.0.1 6381
     1646:X 21 Jun 2021 22:20:09.608 # +odown master myredis 127.0.0.1 6381 #quorum 1/1
    

小结:

哨兵的作用,就是在中心节点宕机时,重新选举出新的Master。但是有个可能就算当哨兵宕机时,选举就不存在了,因此需要多个哨兵搭建集群。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值