Redis外出先から高可用性へ--Redisレプリケーションの原理と最適化
12602 ワード
Redisの外出から高可用性へ–Redisレプリケーションの原理と最適化
領域で有効
プライマリスレーブ構造–フェイルオーバ
1、読み書き分離
2、主従配置が一致しない
3、全量コピーを避ける
4、複製嵐を避ける
?
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) 。