zoukankan      html  css  js  c++  java
  • redis的集群:主从复制、哨兵

    主从复制

    什么是主从复制?

    在Redis中,通过执行SLAVEOF命令或者通过配置文件设置slaveof选项,就可以让一台服务器去复制另一台服务器,其中被复制的服务器叫做主服务器(master),而对主服务器进行复制的服务器叫做从服务器(slave),从而实现当主服务器中的数据更新后,根据配置和策略自动同步到从服务器上。master以写为主,salve以读为主。

    一个简单的主从复制

    例子:

    创建三个redis服务 A B C地址分别位 6379 6380 6381 .conf

    #创建三个服务 (本机只有6379)
    #查看  (只有6379)
    cd /etc/redis/
    
    cd
    #找到redis安装目录下的utils目录
    cd/soft/redis-6.0.8/utils
    #创建服务
    ./install_server.sh 
    #直接输入 6380  利用同样方法创建6381
    
    #开三个服务  分别进入
    redis-cli -p 6379
    redis-cli -p 6380
    redis-cli -p 6381
    #进入6380 客户端服务器B 执行以下命令
    SLAVEOF 127.0.0.1 6379
    #进入6380 客户端服务器C同样执行以下命令
    SLAVEOF 127.0.0.1 6379
    
    
    

    此时可以看到B 和C数据和A同步

    发现问题:

    如果在B上面对name进行操作不能实现

    只能在A上操作

    因为我们前面说过 主从复制master以写为主 slave以读为主。

    #可以通过info replication查看当前服务器的主从复制信息
    info replication
    

    作用:

    • 为一个数据提供多个副本 使得高可用。分布式成为可能
    • 扩展redis的读性能 ,可以实现读写分离

    主从复制功能

    • 一个master可以有多个slave
    • 一个slave只能有一个master
    • 数据流是单向的 从master到salve
    • Redis采用异步复制,从服务器会以每秒一次的频率向主服务器报告复制流的处理进度
    • 在进行复制的时候,复制功能不会阻塞主服务器
    • 如果主节点B成为另一个主节点A的从节点,那么主节点B之前保存的数据将会被清除,同步主节点A的数据,数据库状态将与主节点A保持一致

    主从复制配置

    这是slaveof ip 端口命令来配置主从复制

    slaveof 127.0.0.1 6379
    

    如果从服务器不希望成为祝福我的一个从节点 ,而是希望成为一个主节点,则可以取消复制

    slaveof on one
    

    修改配置文件实现主从复制
    #先找到conf文件  这里用6380 为例
    cd /etc/redis/
    ll
    vi 6380.conf
    
    #设置端口
    port 6380
    #设置后台进程运行Redis
    daemonize yes
    #设置进程ID文件
    pidfile /var/run/redis_6380.pid
    #设置日志文件名
    logfile "6380.log"
    #把持久化关掉
    save 900 1
    save 300 10
    save 60 10000
    #设置rdb文件名
    dbfilename dump6380.rdb
    
    复制功能的实现步骤
    1. 通过SLAVEOF命令设置主服务器的IP地址和端口号
    2. 主从服务器之间建立套接字连接
    3. 从服务器向主服务器发送PING命令
    4. 根据从服务器的配置决定是否进行身份验证
    5. 从服务器向主服务器发送端口信息
    6. 从服务器向主服务器发送PSYNC命令完成同步功能
    7. 主从服务器之间进行命令传播,进而维持数据库状态的一致性
    redis的读写分离

    读写分离将master上的数据同步给slave 让slave分摊去执行相关的业务。

    问题:

    • 复制数据延误
    • 读到一些过期数据
    • 发生读写故障

    哨兵

        redis-server ./26381.conf --sentinel
        
        port 26379
    sentinel moniter mymaster 127.0.0.1 26379 2
    
  • 相关阅读:
    django第八天总结
    获取文件名的基本信息
    单个文件上传与多个文件上传
    return .php
    upload.php
    string.php
    upload.php
    upload.html
    获取上传文件
    那些年被我坑过的Python——牵一发动全身 第十一章MySQL、ORM
  • 原文地址:https://www.cnblogs.com/beizhai/p/13825079.html
Copyright © 2011-2022 走看看