zoukankan      html  css  js  c++  java
  • Redis多实例主从

    一、redis多实例

    1.创建多实例目录

    [root@db01 ~]# mkdir /service/redis/{6380,6381}
    

    2.配置多实例配置文件

    #第一台多实例配置
    [root@db01 ~]# vim /service/redis/6379/redis.conf 
    bind 172.16.1.51 127.0.0.1
    port 6379
    daemonize yes
    pidfile /service/redis/6379/redis_6379.pid
    loglevel notice
    logfile /service/redis/6379/redis_6379.log
    dir /service/redis/6379
    dbfilename dump.rdb
    save 900 1
    save 300 10
    save 60 10000
    
    #第二台多实例配置
    [root@db01 ~]# vim /service/redis/6380/redis.conf 
    bind 172.16.1.51 127.0.0.1
    port 6380
    daemonize yes
    pidfile /service/redis/6380/redis_6380.pid
    loglevel notice
    logfile /service/redis/6380/redis_6380.log
    dir /service/redis/6380
    dbfilename dump.rdb
    save 900 1
    save 300 10
    save 60 10000
    
    #第三台多实例配置
    [root@db01 ~]# vim /service/redis/6381/redis.conf 
    bind 172.16.1.51 127.0.0.1
    port 6381
    daemonize yes
    pidfile /service/redis/6381/redis_6381.pid
    loglevel notice
    logfile /service/redis/6381/redis_6381.log
    dir /service/redis/6381
    dbfilename dump.rdb
    save 900 1
    save 300 10
    save 60 10000
    

    3.启动多实例

    [root@db01 ~]# redis-server /service/redis/6379/redis.conf 
    [root@db01 ~]# redis-server /service/redis/6380/redis.conf 
    [root@db01 ~]# redis-server /service/redis/6381/redis.conf
    

    4.检测启动

    [root@db01 ~]# netstat -lntp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      14002/redis-server  
    tcp        0      0 172.16.1.51:6379        0.0.0.0:*               LISTEN      14002/redis-server  
    tcp        0      0 127.0.0.1:6380          0.0.0.0:*               LISTEN      15541/redis-server  
    tcp        0      0 172.16.1.51:6380        0.0.0.0:*               LISTEN      15541/redis-server  
    tcp        0      0 127.0.0.1:6381          0.0.0.0:*               LISTEN      15545/redis-server  
    tcp        0      0 172.16.1.51:6381        0.0.0.0:*               LISTEN      15545/redis-server   
    
    [root@db01 ~]# ps -ef | grep redis
    root      14002      1  0 Aug04 ?        00:01:34 redis-server 172.16.1.51:6379
    root      15541      1  0 11:50 ?        00:00:00 redis-server 172.16.1.51:6380
    root      15545      1  0 11:50 ?        00:00:00 redis-server 172.16.1.51:6381
    

    5.连接多实例

    [root@db01 ~]# redis-cli -p 6379
    127.0.0.1:6379> quit
    
    [root@db01 ~]# redis-cli -p 6380
    127.0.0.1:6380> quit
    
    [root@db01 ~]# redis-cli -p 6381
    127.0.0.1:6381> quit
    

    二、redis主从

    1.主从复制特点

    1.使用异步复制。
    2.一个主服务器可以有多个从服务器。
    3.从服务器也可以有自己的从服务器。
    4.复制功能不会阻塞主服务器。
    5.可以通过复制功能来让主服务器免于执行持久化操作,由从服务器去执行持久化操作即可。
    
    #详细版本
    1)Redis 使用异步复制。从 Redis2.8开始,从服务器会以每秒一次的频率向主服务器报告复制流(replication stream)的处理进度。
    2)一个主服务器可以有多个从服务器。
    3)不仅主服务器可以有从服务器,从服务器也可以有自己的从服务器,多个从服务器之间可以构成一个图状结构。
    4)复制功能不会阻塞主服务器:即使有一个或多个从服务器正在进行初次同步, 主服务器也可以继续处理命令请求。
    5)复制功能也不会阻塞从服务器:只要在 redis.conf 文件中进行了相应的设置, 即使从服务器正在进行初次同步, 服务器也可以使用旧版本的数据集来处理命令查询。
    6)在从服务器删除旧版本数据集并载入新版本数据集的那段时间内,连接请求会被阻塞。
    7)还可以配置从服务器,让它在与主服务器之间的连接断开时,向客户端发送一个错误。
    8)复制功能可以单纯地用于数据冗余(data redundancy),也可以通过让多个从服务器处理只读命令请求来提升扩展性(scalability): 比如说,繁重的SORT命令可以交给附属节点去运行。
    

    2.8版本以前

    2.8版本之后

    2.主从复制的原理

    1.从服务器向主服务器发送 SYNC 命令
    2.主库接到 SYNC 命令会调用 BGSAVE 命令创建一个 RDB 文件
    3.主库将新的数据记录到缓冲区
    4.主库将 RDB 文件传输到从库
    5.从库拿到 RDB 文件以后,会清空自己的数据 *****
    6.从库读取 RDB 文件并导入数据
    7.主库将新的数据从缓冲区传到从库进行同步
    

    3.主从复制的机制

    #SYNC与PSYNC
    
    1)在 Redis2.8版本之前,断线之后重连的从服务器总要执行一次完整重同步(fullresynchronization)操作。
    2)从 Redis2.8开始,Redis使用PSYNC命令代替SYNC命令。
    3)PSYNC比起SYNC的最大改进在于PSYNC实现了部分重同步(partial resync)特性:
    在主从服务器断线并且重新连接的时候,只要条件允许,PSYNC可以让主服务器只向从服务器同步断线期间缺失的数据,而不用重新向从服务器同步整个数据库。
    
    PSYNC这个特性需要主服务器为被发送的复制流创建一个内存缓冲区(in-memory backlog), 并且主服务器和所有从服务器之间都记录一个复制偏移量(replication offset)
    和一个主服务器 ID(master run id),当出现网络连接断开时,从服务器会重新连接,并且向主服务器请求继续执行原来的复制进程:
    1)如果从服务器记录的主服务器ID和当前要连接的主服务器的ID相同,并且从服务器记录的偏移量所指定的数据仍然保存在主服务器的复制流缓冲区里面,
    那么主服务器会向从服务器发送断线时缺失的那部分数据,然后复制工作可以继续执行。
    2)否则的话,从服务器就要执行完整重同步操作。
    
    #PSYNC优点:
    1)PSYNC只会将从服务器断线期间缺失的数据发送给从服务器。两个例子的情况是相同的,但SYNC 需要发送包含整个数据库的 RDB 文件,而PSYNC 只需要发送三个命令。
    2)如果主从服务器所处的网络环境并不那么好的话(经常断线),那么请尽量使用 Redis 2.8 或以上版本:通过使用 PSYNC 而不是 SYNC 来处理断线重连接,
    可以避免因为重复创建和传输 RDB文件而浪费大量的网络资源、计算资源和内存资源。
    

    4.配置主从

    # 注意:
    - 如主服务器配置有密码,则从服务器需要在配置文件中添加下方信息,456为密码。然后才能进行主从同步
    masterauth 456
    

    1)准备环境

    角色 主机 端口
    主库 172.16.1.51 6379
    从库 172.16.1.51 6380
    从库 172.16.1.51 6381

    2)连接三台机器

    [root@db01 ~]# redis-cli -p 6379
    [root@db01 ~]# redis-cli -p 6380
    [root@db01 ~]# redis-cli -p 6381
    

    3)查看主从状态

    127.0.0.1:6379> info replication
    # Replication
    role:master
    connected_slaves:0
    master_repl_offset:0
    repl_backlog_active:0
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:0
    repl_backlog_histlen:0
    
    127.0.0.1:6380> info replication
    # Replication
    role:master
    connected_slaves:0
    master_repl_offset:0
    repl_backlog_active:0
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:0
    repl_backlog_histlen:0
    
    127.0.0.1:6381> info replication
    # Replication
    role:master
    connected_slaves:0
    master_repl_offset:0
    repl_backlog_active:0
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:0
    repl_backlog_histlen:0
    

    4)配置主从

    127.0.0.1:6380> SLAVEOF 172.16.1.51 6379
    OK
    
    127.0.0.1:6381> SLAVEOF 172.16.1.51 6379
    OK
    
    # 解除主从方法:
    redis-cli -a 密码 -p 端口 slaveof no one
    

    5)查看主从状态

    #查看主库
    127.0.0.1:6379> info replication
    # Replication
    role:master
    connected_slaves:2
    slave0:ip=172.16.1.51,port=6380,state=online,offset=263,lag=0
    slave1:ip=172.16.1.51,port=6381,state=online,offset=263,lag=1
    master_repl_offset:263
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:2
    repl_backlog_histlen:262
    
    #查看从库
    127.0.0.1:6380> info replication
    # Replication
    role:slave
    master_host:172.16.1.51
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:9
    master_sync_in_progress:0
    slave_repl_offset:319
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_repl_offset:0
    repl_backlog_active:0
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:0
    repl_backlog_histlen:0
    
  • 相关阅读:
    MVC案例之新增与修改Customer
    MVC案例之模糊查询与删除
    MVC案例之多个请求对应一个servlet
    MVC案例
    MVC设计模式-查询与删除
    JSP指令 & 中文乱码问题
    域对象的作用范围 & 请求的转发和重定向
    JSP
    HttpServlet
    istio-ingress网关安全
  • 原文地址:https://www.cnblogs.com/tcy1/p/13440173.html
Copyright © 2011-2022 走看看