zoukankan      html  css  js  c++  java
  • Redis系列(三)-Redis replication 实现主从复制(读写分离)

    Redis replication 是一种 master-slave 模式的复制机制,这种机制使得 slave 节点可以成为与 master 节点完全相同的副本。数据流是单向的,master到slave

    replication 主要用于解决两个问题:
    1. 读扩展
    一个 master 用于写,多个 slave 用于分摊读的压力。
    2. 高可用
    如果 master 挂掉了,可以提升(promote)一个 slave 为新的 master,进而实现故障转移(failover)。

    redis replication完整流程
    (1)slave node启动,仅仅保存master node的信息,包括master node的host和ip,但是复制流程没开始(master host和ip在redis.conf里面的slaveof配置)。
    (2)slave node内部有个定时任务,每秒检查是否有新的master node要连接和复制,如果发现,就跟master node建立socket网络连接
    (3)slave node发送ping命令给master node
    (4)口令认证,如果master设置了requirepass,那么salve node必须发送masterauth的口令过去进行认证
    (5)master node第一次执行全量复制,将所有数据发给slave node
    (6)master node后续持续将写命令,异步复制给slave node

    核心机制
    第一次slave连接msater的时候,执行的全量复制。
    (1)offset
    master会在自身不断累加offset,slave也会在自身不断累加offset。
    slave每秒都会上报自己的offset给master,同时master也会保存每个slave的offset。
    (2)backlog
    master node有一个backlog,默认是1MB大小。
    master node给slave node复制数据时,也会将数据在backlog中同步写一份。
    backlog主要是用来做全量复制中断候的增量复制的。
    (3)master run id
    info server,可以看到master run id。
    如果根据host+ip定位master node,是不靠谱的,如果master node重启或者数据出现了变化,那么slave node应该根据不同的run id区分,run id不同就做全量复制。
    如果需要不更改run id重启redis,可以使用redis-cli debug reload命令。

    (4)psync
    从节点使用psync从master node进行复制,psync runid offset。
    master node会根据自身的情况返回响应信息,可能是FULLRESYNC runid offset触发全量复制,可能是CONTINUE触发增量复制。


    实操

    参考Redis系列(一)-CentOS7下Redis单机安装+自启动 在两台器安装redis。

    服务器列表

    • Master node1(192.168.2.221)
    • Slave   node2(192.168.2.230)

    1. 配置Master的redis配置文件
    开启安全认证

    requirepass 123456
    

    2.配置Slave的redis配置文件

    slaveof node1 6379
    slave-read-only yes 默认开启
    启用安全认证
    masterauth redis

    3.验证

    在Master添加数据

     在Slave节点查询

     主从部署成功。

    说明

    若失败请检查:

    1.关闭防火墙

    2.redis配置远程访问

    3.开发redis端口

    3.压测

    redis自己提供的redis-benchmark压测工具。

    ./redis-benchmark -h  localhost
    -c <clients>       Number of parallel connections (default 50)
    -n <requests>      Total number of requests (default 100000)
    -d <size>          Data size of SET/GET value in bytes (default 2) 

    执行结果,如下,响应时间百分比

    
    
    本篇内容是参考网络教程学习过程中的笔记
    开发工作着,生活快乐着,留下总结,相互交流,共同进步
  • 相关阅读:
    Bandit Wargame Level18 Writeup(interactive shell and .bashrc )
    Bandit Wargame Level12 Writeup
    Natas Wargame Level25 Writeup(头部注入+POST/GET注入)
    Mybatis 加载 Mapper配置的四种方式
    设计模式(四)---- 代理模式
    execute() 和 sumbit() 的区别
    Executors提供的四种线程池
    线程的三种实现方法
    同一个线程多次调用start()会出现的问题
    线程的介绍
  • 原文地址:https://www.cnblogs.com/lovechengyu/p/15128840.html
Copyright © 2011-2022 走看看