zoukankan      html  css  js  c++  java
  • Redis for OPS 04:主从复制

    写在前面的话

    Redis 的主从其实和 MySQL 类似,更多的还是作为备份的功能存在,在复杂的 Rediis 集群架构中,主从也是不可或缺的。

    主从复制

    主从复制原理:

    1. 从库通过命令连接到主库,并发送 SYNC 给主库。

    2. 主库接受到从库的 SYNC 后触发 BGSAVE,后台持久化 RDB,并发送给从库。

    3. 从库收到 RDB 后开始恢复其中的数据。

    4. 主库陆续将新生成的数据发送给从库。

    5. 当从库发生故障,但是未造成数据损坏,那么下去重启后会自动重连主库,主库陆续将从库缺失部分发送过来。

    关于主从的配置项,有以下一些,一般选择默认的就足够我们使用:

    # 从库配置主库的IP端口
    # slaveof <masterip> <masterport>
    
    # 主库有密码的时候配置密码
    # masterauth <master-password>
    
    # 当slave与master断开或者正在同步的时候,设置yes返回的数据可能是旧的,设置no直接返回正在同步的错误
    slave-serve-stale-data yes
    
    # 设置从库只读
    slave-read-only yes
    
    # 主从是否使用无硬盘复制,即主不通过RDB文件直接传数据给从
    repl-diskless-sync no
    
    # 选择无硬盘备份时,需要等待多久才传数据
    repl-diskless-sync-delay 5
    
    # 从向主周期性发送ping包时间
    # repl-ping-slave-period 10
    
    # 备份超时时间
    # repl-timeout 60
    
    # 是否禁用从的CTP_NODELAY,如果yes主从会有一点延时
    repl-disable-tcp-nodelay no
    
    # 备份缓冲区,从库失联后会短暂的帮从库接受数据
    # repl-backlog-size 1mb
    
    # 主多长时间没有和从连接就释放缓冲区
    # repl-backlog-ttl 3600
    
    # 从优先级,用于sentinel选主时使用,数字越小越高,但是0就不参与选举
    slave-priority 100
    
    # 主停止接受写请求,当从在线小于3个,滞后10秒时
    # min-slaves-to-write 3
    # min-slaves-max-lag 10
    
    # Redis master能够通过不通方式列出从的地址和端口
    # slave-announce-ip 5.5.5.5
    # slave-announce-port 1234

    搭建主从环境

    在日常工作中,如果是简单的应用不那么重要,可能这种服务就只有一个机器,但为了更好的使用,这里还是使用三个虚拟机来配合搭建:

    192.168.200.101 / 17000 作为默认主

    192.168.200.102 / 17000 作为默认从

    192.168.200.103 / 17000 作为默认从

    1. 给 101 / 102 / 103 安装 redis:

    mkdir -p /data/{backup,data,logs,packages,services}
    /data/packages
    tar -zxf redis-4.0.14.tar.gz 
    cd redis-4.0.14/
    make
    make PREFIX=/data/services/redis-master-slave-17000 install
    cd /data/services/redis-master-slave-17000
    mkdir data logs conf

    2. 添加配置文件 /data/services/redis-master-slave-17000/conf/redis-17000.conf:

    #################################################################################################
    # Redis 配置文件
    #################################################################################################
    
    #################################################################################################
    # 基础配置
    #################################################################################################
    protected-mode yes
    bind 0.0.0.0
    requirepass helloworld
    port 17000
    tcp-backlog 2048
    timeout 0
    tcp-keepalive 300
    daemonize yes
    supervised no
    pidfile /data/services/redis-master-slave-17000/logs/redis-17000.pid
    loglevel notice
    logfile "/data/services/redis-master-slave-17000/logs/redis-17000.log"
    databases 16
    always-show-logo yes
    
    #################################################################################################
    # RDB持久化配置
    #################################################################################################
    dbfilename dump-17000.rdb
    dir "/data/services/redis-master-slave-17000/data"
    save 900 1
    save 300 10
    save 60 10000
    stop-writes-on-bgsave-error yes
    rdbcompression yes
    rdbchecksum yes
    
    #################################################################################################
    # AOF持久化配置
    #################################################################################################
    appendonly yes
    appendfilename "appendonly-17000.aof"
    appendfsync everysec
    no-appendfsync-on-rewrite yes
    auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
    aof-load-truncated yes
    aof-use-rdb-preamble no
    
    #################################################################################################
    # 主从配置
    #################################################################################################
    # slaveof <masterip> <masterport>
    masterauth helloworld
    slave-serve-stale-data yes
    slave-read-only yes
    repl-diskless-sync no
    repl-diskless-sync-delay 5
    repl-ping-slave-period 10
    repl-timeout 60
    repl-disable-tcp-nodelay no
    repl-backlog-size 1mb
    repl-backlog-ttl 3600
    slave-priority 100
    min-slaves-to-write 1
    min-slaves-max-lag 10
    # slave-announce-ip 5.5.5.5
    # slave-announce-port 1234

    注意红色部分的配置需要根据实际情况进行修改!

    3. 启动 Redis:

    /data/services/redis-master-slave-17000/bin/redis-server /data/services/redis-master-slave-17000/conf/redis-17000.conf

    4. 在 102 / 103 上面指定主库:

    /data/services/redis-master-slave-17000/bin/redis-cli -p 17000 -a helloworld slaveof 192.168.200.101 17000

    会和 MySQL 一样提示你在命令行使用密码不安全:

    5. 查看主从状态:

    /data/services/redis-master-slave-17000/bin/redis-cli -p 17000 -a helloworld info replication

    主库查看到结果:

    从库上查看结果:

    6. 测试,所有节点都连接上:

    在主上面 set key:

    在从上面 get key:

    7. 至此,简单的主从搭建完成,但是在日常工作中,主从只是基础,一般不会单独使用,更多的还是后面根据主从演变出来的环境。

  • 相关阅读:
    [蓝桥杯2017初赛]青蛙跳杯子 BFS
    第十一章 进程和信号
    第七章 数据管理
    特殊符号大全
    第四章 Linux环境
    (十六)异常
    (十五)代理
    (十四)内部类
    第三章 文件操作
    (十三)对象克隆
  • 原文地址:https://www.cnblogs.com/Dy1an/p/11812046.html
Copyright © 2011-2022 走看看