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

    Redis 多实例

    多实例目录

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

    多实例配置文件

    # 第一台多实例配置
    [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
    

    启动多实例

    [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
    

    检测多实例

    [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
    

    连接多实例

    [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.使用异步复制;

    2.一个主服务器可以有多个从服务器;

    3.从服务器也可以有自己的从服务器;

    4.复制功能不会阻塞主服务器(BGSAVE);

    5.可以通过复制功能来让主服务器免于执行持久化操作,由从服务器去执行持久化操作即可 。

    详细版本:

    1)Redis 使用异步复制。从 Redis2.8 开始,从服务器会以每秒一次的频率向主服务器报告复制流(replication stream)的处理进度;

    2)一个主服务器可以有多个从服务器;

    3)不仅主服务器可以有从服务器,从服务器也可以有自己的从服务器,多个从服务器之间可以构成一个图状结构;

    4)复制功能不会阻塞主服务器:即使有一个或多个从服务器正在进行初次同步, 主服务器也可以继续处理命令请求;

    5)复制功能也不会阻塞从服务器:只要在 redis.conf 文件中进行了相应的设置, 即使从服务器正在进行初次同步, 服务器也可以使用旧版本的数据集来处理命令查询;

    6)在从服务器删除旧版本数据集并载入新版本数据集的那段时间内,连接请求会被阻塞;

    7)还可以配置从服务器,让它在与主服务器之间的连接断开时,向客户端发送一个错误;

    8)复制功能可以单纯地用于数据冗余(data redundancy),也可以通过让多个从服务器处理只读命令请求来提升扩展性(scalability): 比如说,繁重的 SORT 命令可以交给附属节点去运行 。

    主从复制的原理

    1.从服务器向主服务器发送 SYNC 命令

    2.主库接到 SYNC 命令会调用 BGSAVE 命令创建一个 RDB 文件

    3.主库将新的数据记录到缓冲区

    4.主库将 RDB 文件传输到从库

    5.从库拿到 RDB 文件以后,会清空自己的数据

    6.从库读取 RDB 文件并导入数据

    7.主库将新的数据从缓冲区传到从库进行同步

    主从复制的机制

    在 Redis2.8 版本之前,断线之后重连的从服务器总要执行一次完整重同步(fullresynchronization)操作;

    从 Redis2.8 版本开始,Redis使用 PSYNC 命令代替 SYNC 命令;

    PSYNC 命令比起 SYNC 命令,改进在于 PSYNC 实现了部分重同步(partial resync)特性 。

    Redis 多实例 & 主从复制

    准备环境

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

    连接三台机器

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

    查看主从状态

    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
    

    配置主从信息

    如果主库设置了密码,从库连接时,需要配置 masterauth 参数
    在从库执行 SLAVEOF NO ONE 取消主从配置

    127.0.0.1:6380> SLAVEOF 172.16.1.51 6379
    OK
    
    127.0.0.1:6381> SLAVEOF 172.16.1.51 6379
    OK
    
    # 如果主库有密码,需要做以下配置;或者直接写入配置文件并重启
    127.0.0.1:6380> config set masterauth XXXXX
    127.0.0.1:6380> CONFIG REWRITE
    127.0.0.1:6381> config set masterauth XXXXX
    127.0.0.1:6381> CONFIG REWRITE
    

    查看主从状态

    # 查看主库
    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
    
  • 相关阅读:
    证明最大公约数Stein算法(高精度算法)
    链表常用内容和易犯错误
    斐波那契数列——各种公式证明
    用矩阵和待定系数法求数列的分析(复杂度log(n))
    盒模型(外边距)
    盒子模型(内边距)
    盒子模型(边框)
    jupyterhub
    1分钟k线图能反映什么?(转)
    python的self
  • 原文地址:https://www.cnblogs.com/zzzwqh/p/13441224.html
Copyright © 2011-2022 走看看