Redis複製

1.Redis複製簡介redis

  咱們所說的主從複製,主機數據更新後根據配置和策略,自動同步到備機的master/slaver機制,Master以寫爲主,Slave以讀爲主spa

2.Redis做用server

  讀寫分離blog

  容災恢復ip

3.Redis複製範例ci

1)一主二僕v8

(1)Redis6379.confget

[root@pluto 桌面]# cd /usr/local/bin/同步

[root@pluto bin]# clearit

[root@pluto bin]# redis-server /myredis/redis6379.conf

[root@pluto bin]# redis-cli -p 6379

127.0.0.1:6379> ping

PONG

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:6379> set k1 v1

ok

127.0.0.1:6379> set k2 v2

OK

127.0.0.1:6379> set k3 v3

OK

127.0.0.1:6379> get k3

"v3"

127.0.0.1:6379> keys *

1) "k2"

2) "k3"

3) "k1"

127.0.0.1:6379> set k4 v4

OK

127.0.0.1:6379> INFO replication

# Replication

role:master

connected_slaves:2

slave0:ip=127.0.0.1,port=6380,state=online,offset=221,lag=1

slave1:ip=127.0.0.1,port=6381,state=online,offset=221,lag=1

master_repl_offset:221

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:220

127.0.0.1:6379> set k6 v6

 

(2)Redis6380.conf

[root@pluto 桌面]# cd /usr/local/bin/

[root@pluto bin]# clear

[root@pluto bin]# redis-server /myredis/redis6380.conf

[root@pluto bin]# redis-cli -p 6380

127.0.0.1:6380> ping

PONG

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:6380> SLAVEOF 127.0.0.1 6379

OK

127.0.0.1:6380> get k4

"v4"

127.0.0.1:6380> get k1

"v1"

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:4

master_sync_in_progress:0

slave_repl_offset:235

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

127.0.0.1:6380> set k6 v66

(error) READONLY You can't write against a read only slave.

127.0.0.1:6380> set k66 v66

(error) READONLY You can't write against a read only slave.

127.0.0.1:6380> set k7 v7

(error) READONLY You can't write against a read only slave.

127.0.0.1:6380>

 

(3)Redis6381.conf

[root@pluto 桌面]# cd /usr/local/bin/

[root@pluto bin]# clear

[root@pluto bin]# redis-server /myredis/redis6381.conf

[root@pluto bin]# redis-cli -p 6381

127.0.0.1:6381> ping

PONG

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

127.0.0.1:6381> SLAVEOF 127.0.0.1 6379

OK

127.0.0.1:6381> get k4

"v4"

127.0.0.1:6381> info replication

# Replication

role:slave

master_host:127.0.0.1

master_port:6379

master_link_status:up

master_last_io_seconds_ago:7

master_sync_in_progress:0

slave_repl_offset:235

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

127.0.0.1:6381> set k6 v666

(error) READONLY You can't write against a read only slave.

127.0.0.1:6381>

 

[1]主機掛

127.0.0.1:6379> INFO replication

# Replication

role:master

connected_slaves:2

slave0:ip=127.0.0.1,port=6380,state=online,offset=221,lag=1

slave1:ip=127.0.0.1,port=6381,state=online,offset=221,lag=1

master_repl_offset:221

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:220

127.0.0.1:6379> set k6 v6

OK

127.0.0.1:6379> SHUTDOWN

not connected> exit

[root@pluto bin]# redis-server /myredis/redis6379.conf

[root@pluto bin]# redis-cli -p 6379

127.0.0.1:6379> keys *

1) "k2"

2) "k1"

3) "k6"

4) "k3"

5) "k4"

127.0.0.1:6379> set k7 v7

OK

127.0.0.1:6379>

127.0.0.1:6380> keys *

1) "k2"

2) "k3"

3) "k1"

4) "k4"

5) "k6"

127.0.0.1:6380> INFO replication

# Replication

role:slave

master_host:127.0.0.1

master_port:6379

master_link_status:down

master_last_io_seconds_ago:-1

master_sync_in_progress:0

slave_repl_offset:684

master_link_down_since_seconds:17

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

127.0.0.1:6380> get k7

"v7"

127.0.0.1:6380>

127.0.0.1:6381> keys *

1) "k1"

2) "k4"

3) "k6"

4) "k3"

5) "k2"

127.0.0.1:6381> INFO replication

# Replication

role:slave

master_host:127.0.0.1

master_port:6379

master_link_status:down

master_last_io_seconds_ago:-1

master_sync_in_progress:0

slave_repl_offset:684

master_link_down_since_seconds: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

127.0.0.1:6381> get k7

"v7"

[2]從機掛

127.0.0.1:6379> set k8 v8

OK

127.0.0.1:6379> info replication

# Replication

role:master

connected_slaves:1

slave0:ip=127.0.0.1,port=6381,state=online,offset=334,lag=1

master_repl_offset:334

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:333

127.0.0.1:6379>

127.0.0.1:6380> SHUTDOWN

not connected> exit

[root@pluto bin]# redis-server /myredis/redis6380.conf

[root@pluto bin]# redis-cli -p 6380

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:6380> get k8

(nil)

 

127.0.0.1:6381> get k8

"v8"

127.0.0.1:6381> info replication

# Replication

role:slave

master_host:127.0.0.1

master_port:6379

master_link_status:up

master_last_io_seconds_ago:4

master_sync_in_progress:0

slave_repl_offset:348

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

127.0.0.1:6381>

2)薪火相傳

(1)redis6379.conf

127.0.0.1:6379> info replication

# Replication

role:master

connected_slaves:2

slave0:ip=127.0.0.1,port=6381,state=online,offset=642,lag=1

slave1:ip=127.0.0.1,port=6380,state=online,offset=642,lag=1

master_repl_offset:642

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:641

127.0.0.1:6379> info replication

# Replication

role:master

connected_slaves:1

slave0:ip=127.0.0.1,port=6380,state=online,offset=684,lag=0

master_repl_offset:684

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:683

127.0.0.1:6379>

(1)redis6380.conf

127.0.0.1:6380> info replication

# Replication

role:master

connected_slaves:2

slave0:ip=127.0.0.1,port=6381,state=online,offset=642,lag=1

slave1:ip=127.0.0.1,port=6380,state=online,offset=642,lag=1

master_repl_offset:642

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:641

127.0.0.1:6380> info replication

# Replication

role:master

connected_slaves:1

slave0:ip=127.0.0.1,port=6380,state=online,offset=684,lag=0

master_repl_offset:684

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:683

127.0.0.1:6380>

(1)redis6381.conf

127.0.0.1:6381> info replication

# Replication

role:master

connected_slaves:2

slave0:ip=127.0.0.1,port=6381,state=online,offset=642,lag=1

slave1:ip=127.0.0.1,port=6380,state=online,offset=642,lag=1

master_repl_offset:642

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:641

127.0.0.1:6381> info replication

# Replication

role:master

connected_slaves:1

slave0:ip=127.0.0.1,port=6380,state=online,offset=684,lag=0

master_repl_offset:684

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:683

127.0.0.1:6381>

3)反客爲主

(1)redis6379.conf

127.0.0.1:6379> info replication

# Replication

role:master

connected_slaves:2

slave0:ip=127.0.0.1,port=6380,state=online,offset=1058,lag=1

slave1:ip=127.0.0.1,port=6381,state=online,offset=1058,lag=1

master_repl_offset:1058

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:1057

127.0.0.1:6379> SHUTDOWN

not connected> exit

[root@pluto bin]# redis-server /myredis/redis6379.conf

[root@pluto bin]# redis-cli -p 6379

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:6379>

(2)redis6380.conf

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:0

master_sync_in_progress:0

slave_repl_offset:1072

slave_priority:100

slave_read_only:1

connected_slaves:0

master_repl_offset:403

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:402

127.0.0.1:6380> SLAVEOF no one

OK

127.0.0.1:6380> info replication

# Replication

role:master

connected_slaves:0

master_repl_offset:445

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:444

127.0.0.1:6380> set k10 v10

OK

127.0.0.1:6380>

(3)redis6381.conf

127.0.0.1:6381> SLAVEOF 127.0.0.1 6379

OK

127.0.0.1:6381> info replication

# Replication

role:slave

master_host:127.0.0.1

master_port:6379

master_link_status:up

master_last_io_seconds_ago:8

master_sync_in_progress:0

slave_repl_offset:1072

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

127.0.0.1:6381> info replication

# Replication

role:slave

master_host:127.0.0.1

master_port:6379

master_link_status:down

master_last_io_seconds_ago:-1

master_sync_in_progress:0

slave_repl_offset:1086

master_link_down_since_seconds:32

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

127.0.0.1:6381> SLAVEOF 127.0.0.1 6380

OK

127.0.0.1:6381> get k10

"v10"

127.0.0.1:6381>

4.Redis複製原理

 

5.Redis哨兵模式

1).哨兵模式簡介

  反客爲主的自動版,可以後臺監控主機是否故障,若是故障了根據投票數自動將從庫轉換爲主庫

2).哨兵模式使用

 

[1]redis6379.conf

127.0.0.1:6379> SHUTDOWN

not connected> exit

[root@pluto bin]# redis-server /myredis/redis6379.conf

[root@pluto bin]# redis-cli -p 6379

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:6379> info replication

# Replication

role:slave

master_host:127.0.0.1

master_port:6380

master_link_status:up

master_last_io_seconds_ago:1

master_sync_in_progress:0

slave_repl_offset:12464

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

127.0.0.1:6379>

[2]redis6380.conf

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:8

master_sync_in_progress:0

slave_repl_offset:365

slave_priority:100

slave_read_only:1

connected_slaves:0

master_repl_offset:365

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:364

127.0.0.1:6380> keys *

1) "k4"

2) "k9"

3) "k7"

4) "k3"

5) "k8"

6) "k2"

7) "k1"

8) "k6"

127.0.0.1:6380> info replication

# Replication

role:master

connected_slaves:1

slave0:ip=127.0.0.1,port=6381,state=online,offset=8735,lag=0

master_repl_offset:8735

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:8734

127.0.0.1:6380> set k10 v10

OK

127.0.0.1:6380> info replication

# Replication

role:master

connected_slaves:2

slave0:ip=127.0.0.1,port=6381,state=online,offset=13689,lag=1

slave1:ip=127.0.0.1,port=6379,state=online,offset=13822,lag=0

master_repl_offset:13822

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:

[3]redis6381.conf

127.0.0.1:6381> info replication

# Replication

role:slave

master_host:127.0.0.1

master_port:6379

master_link_status:up

master_last_io_seconds_ago:1

master_sync_in_progress:0

slave_repl_offset:379

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

127.0.0.1:6381> keys *

1) "k1"

2) "k7"

3) "k4"

4) "k6"

5) "k9"

6) "k3"

7) "k8"

8) "k2"

127.0.0.1:6381> info replication

# Replication

role:slave

master_host:127.0.0.1

master_port:6380

master_link_status:up

master_last_io_seconds_ago:0

master_sync_in_progress:0

slave_repl_offset:8602

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

127.0.0.1:6381> get k10

"v10"

127.0.0.1:6381>

6.Redis複製缺點

  因爲全部的寫操做都是先在Master上操做,而後同步更新到Slave上,因此從Master同步到Slave機器有必定的延遲,當系統很繁忙的時候,延遲問題會更加嚴重,Slave機器數量的增長也會使這個問題更加嚴重。

相關文章
相關標籤/搜索