Redis外出先から高可用性へ--Redisレプリケーションの原理と最適化

12602 ワード

Redisの外出から高可用性へ–Redisレプリケーションの原理と最適化
       ?
1、    ;
2、       
3、   QPS  

    :              ,        master/slaver  ,Master    ,Slave    。

1、  master     slave;
2、  slaver     master;
3、        ,master slave;

          :
1、slaveof  

            :slavof no one
2、  
    slaveof ip port
    slave-read-only yes  :      


          :

                          slaveof               
                                            
                                            



    :
      :     6379(master),6380(slave)
      redis  :
1
2
3
4
6379.conf

[root@localhost config]# redis-server redis6279.conf
[root@localhost config]# redis-cli
1
2
3
4
6380.conf

[root@localhost config]# redis-server redis6380.conf
[root@localhost config]# redis-cli -p 6380
  6380 6379 slave:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
127.0.0.1:6380> slaveof 127.0.0.1 6379
OK
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_repl_offset:29
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
1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=43,lag=1
master_repl_offset:43
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:42
 6379   set  :
1
2
3
4
127.0.0.1:6379> set k1 1 
OK
127.0.0.1:6379> set k2 2
OK
 6380   get  :
1
2
127.0.0.1:6380> get k1
"1"

二、複製の原理

redis        ,   master   RDB     slave,      ,master           (master  
        ,      master     ), slave RDB    ,             master       slave。

三、全量コピーと部分コピー

               ,  run_id    offset

run_id:
1
2
3
4
[root@localhost config]# redis-cli -p 6379 info server | grep run
run_id:9e4f78c64e71ec4201aa5bda334a10f8ccde2aaa
[root@localhost config]# redis-cli -p 6380 info server | grep run
run_id:c38b9cc14a2c050dd047ae395d23735f72f9105a
   offset:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
slave0:ip=127.0.0.1,port=6380,state=online,offset=1424,lag=1
master_repl_offset:1424
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:1423
[root@localhost config]# redis-cli -p 6379 info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=1438,lag=0
master_repl_offset:1438
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:1437
[root@localhost config]# redis-cli -p 6379 set k3 3
OK
[root@localhost config]# redis-cli -p 6379 info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=1480,lag=1
master_repl_offset:1480
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:1479
[root@localhost config]#
    :


    :
            Redis       --Redis        master      slave,     master        slave。
1、psync ? 1:      runId,        ,       ,slave   master runId       ,   ? -1  ,  master        ;
2、master   1    ,  slave        ,      runId    offset   slave
3、save masterInfo : salve  master     ;
4、master  bgsave     RDB  ;

          slave,     RDB RDDB                 ,master       dataset  rdb  (  4),         
                , send buffer。
5、master   send RDB master   RDB    slave;
6、      buffer        slave;
7、     (slave     master       );
8、slave  RDB   buffer  ;


      :
1、master  bgsave     ;
2、RDB        ;
3、slave         ;
4、     RED   ;
5、   AOF    ( slave  RED   );


    (    ):
      , slave master      ,slave         master, redis2.8    ,  slave       
 master               。  master       slave     , master       RDB  。
    ,slave master   、 slave master             ,          , Redis2.8  ,Redis          :

master    RDB               (     ,    1M),           slave     offset,          
     , slave maste      ,  slave   offset,                 master,     master   
  slave   master runid,        ,Redis      :
1、slave   run id master run id  ;
2、master            offset  。
1、 slave  master       ;
2、                  (in-memory backlog)。               (replication offset) master run id 
3、slave    
4、slave     runId offset;
5、          master run id  ,             ,               。

領域で有効

四、故障処理


プライマリスレーブ構造–フェイルオーバ
slave  
      slave    ,                    slave ;

master  
 master    ,  。master      master     ,   slaveof no one,       master,            master;

         ,        ,              , ,              redis     。

五、運行維持の開発に関するよくある問題


1、読み書き分離
         

  :
      :   master        slave    ,  slave    ;
     ,master          slave,    slave    ,    master      ,          


    :   slave         ,      slave       ,           master,            ,        ,                   


      :    redis     key   ,      ,         ,    redis    key   ,    key  ,     key  
。          key    。
            ,     ,       key      ,            key         
          ,  redis master slave      ,slave        (       )        
          ,  master key        slave,    slave       (       redis3.2  
   )

     ,          ;

2、主従配置が一致しない
         ,    ,           

1、  maxmemory   ,          ;
  :  master  4G,slave  2G,            , ,               ,slave  master 
RDB          2G     ,      slave maxmemory  ,       。     ,        
  ,       slave   master   ,           

2、           (  hash-max-ziplist-entries):           
  :   master           ,  slave    ,                  。

3、全量コピーを避ける
1、       :
      slave      master  ,               ,  ,             ?
  1:    ,     redis  2G    ,    ,   RDB      ,         fork      (
master fork             RDB  , fork        ,         ,fork     )。

  2:          ,              (  )  slave   。

2.  RunID   
         (RunID    ),  slave  ,      master   RunID,        master RunID  
  ,       master            ,          
    :      ,               ,  master      ,      slave   master(     )

3.         
master  RDB   slave,slave  RDB     ,master                    (         
 ,             ), slave   RDB , offset          ,        ,       
offset         ,         1M。     offset      ,        。
    :           rel_backlog_size   1M,         ,       offset    。
   ,      ,                 ,            QPS               ,                           。

4、複製嵐を避ける
       ?  :  master  , master    slave   RunID    ,                。 
 redis         ,      RDB  ,       ,      。

1.        :     ,        
  :         :
(1).     master slave        slave,  slave     slave,        slave master     。
(         :       ,slave1      ,     ?)
(2).         ,       ,  master  ,      slave  。



2.       :            ,   :
 machine-A        ,        master    slave      。(  )
(1).        ( master          )

(2).             (slave  master)         。