天天看點

redis主從切換介紹

1、這次案例的是選擇windows版本,把redis複制三份,監聽端口分别是6379、6380、6381

redis主從切換介紹
redis主從切換介紹

分别複制2份,修改redis.conf的端口port 為6380 6381,并添加master服務說明:slaveof 127.0.0.1 6379

redis主從切換介紹

啟動主節點,然後再分别啟動分節點,如果是在正式環境,分節點的啟動間隔時間不宜太短,同時啟動,master需要把資料同步到各個slave,造成資源消耗大,是以會間隔兩分鐘左右啟動slave。

啟動的時候,可以直接進入軟體目錄,使用dos指令啟動,如果直接點選redis-server.exe,啟動配置預設端口還是6379,是以用dos指令啟動。

依次進入master和2個slave的目錄下,啟動redis服務:redis-server.exe redis.conf

master

redis主從切換介紹

slave

redis主從切換介紹
redis主從切換介紹

使用Jedis進行連接配接檢視,測試資訊

6379資訊:redis_version:2.4.5

redis_git_sha1:00000000

redis_git_dirty:0

arch_bits:64

multiplexing_api:winsock2

process_id:14532

uptime_in_seconds:1439

uptime_in_days:0

lru_clock:1022289

used_cpu_sys:0.51

used_cpu_user:0.30

used_cpu_sys_children:0.00

used_cpu_user_children:0.00

connected_clients:1

connected_slaves:2

client_longest_output_list:0

client_biggest_input_buf:0

blocked_clients:0

used_memory:1211928

used_memory_human:1.16M

used_memory_rss:1211928

used_memory_peak:1211872

used_memory_peak_human:1.16M

mem_fragmentation_ratio:1.00

mem_allocator:libc

loading:0

aof_enabled:0

changes_since_last_save:0

bgsave_in_progress:0

last_save_time:1541142748

bgrewriteaof_in_progress:0

total_connections_received:7

total_commands_processed:40

expired_keys:0

evicted_keys:0

keyspace_hits:36

keyspace_misses:0

pubsub_channels:0

pubsub_patterns:0

latest_fork_usec:0

vm_enabled:0

role:master

db0:keys=19,expires=0

db6:keys=1,expires=0

6380資訊:redis_version:2.4.5

redis_git_sha1:00000000

redis_git_dirty:0

arch_bits:64

multiplexing_api:winsock2

process_id:14548

uptime_in_seconds:1423

uptime_in_days:0

lru_clock:1022289

used_cpu_sys:0.51

used_cpu_user:0.14

used_cpu_sys_children:0.00

used_cpu_user_children:0.00

connected_clients:2

connected_slaves:0

client_longest_output_list:0

client_biggest_input_buf:0

blocked_clients:0

used_memory:1203480

used_memory_human:1.15M

used_memory_rss:1203480

used_memory_peak:1203424

used_memory_peak_human:1.15M

mem_fragmentation_ratio:1.00

mem_allocator:libc

loading:0

aof_enabled:0

changes_since_last_save:0

bgsave_in_progress:0

last_save_time:1541143334

bgrewriteaof_in_progress:0

total_connections_received:4

total_commands_processed:131

expired_keys:0

evicted_keys:0

keyspace_hits:14

keyspace_misses:2

pubsub_channels:0

pubsub_patterns:0

latest_fork_usec:0

vm_enabled:0

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

db0:keys=20,expires=0

db6:keys=1,expires=0

如果此時停止6379,那麼就剩兩個從節點,要使6380成為新的節點,就要啟動redis-cli.exe,

slaveof no one,設定成新的節點。

redis主從切換介紹

這樣就可以在6380新的主節點上操作

redis主從切換介紹

當原來的主節點恢複啟動後,先将原來的主節點設定為從節點,這樣就可以從目前主節點擷取最新的資料。目前主節點是6380,是以先将6379設定為從節點,這樣可以從主節點擷取

redis主從切換介紹
redis主從切換介紹
redis主從切換介紹

6380的資料也就恢複過來了,然後将6380設定為從節點,6379設定為主節點

redis主從切換介紹
redis主從切換介紹

Redis主從複制(一主兩從/一主多從)的分析

IO劇增 

每次slave斷開以後(無論是主動斷開,還是網路故障)再連接配接master都要将master全部dump出來rdb,在aof,即同步的過程都要重新執行一遍;是以要記住多台slave不要一下都啟動起來,否則master可能IO劇增(間隔1-2分)

複制延遲 

由于所有的寫操作都是先在Master上操作,然後同步更新到Slave上,是以從Master同步到Slave機器有一定的延遲,當系統很繁忙的時候,延遲問題會更加嚴重,Slave機器數量的增加也會使這個問題更加嚴重。

可用性不高 

當有主節點發生異常情況,就會導緻不能寫入,導緻業務出錯!

1、redis的複制功能是支援多個資料庫之間的資料同步。一類是主資料庫(master)一類是從資料庫(slave),主資料庫可以進行讀寫操作,當發生寫操作的時候自動将資料同步到從資料庫,而從資料庫一般是隻讀的,并接收主資料庫同步過來的資料,一個主資料庫可以有多個從資料庫,而一個從資料庫隻能有一個主資料庫。

2、通過redis的複制功能可以很好的實作資料庫的讀寫分離,提高伺服器的負載能力。主資料庫主要進行寫操作,而從資料庫負責讀操作。