redis - 主從(高性能)

當併發量達到必定程度時,web應用沒法處理這麼多請求,咱們能夠用nginx作負載均衡,鏈接多個web應用。當數據庫沒法支撐的時候,咱們作主從架構,讀寫分離,分擔數據庫壓力。在redis中,也能夠用主歷來分擔壓力。nginx

簡單配置

複製redis.windows.conf文件,修改端口,以及添加slaveof這行配置。slaveof用於指向主redis服務的ip和端口。web

port 6380
slaveof 127.0.0.1 6379

先啓動master,再啓動slave,能夠看到slave已經同步了master的數據,在master的操做,也會同步到slave中。
master的信息,能夠看到他role是master,有個從服務器slave0,以及slave0的相關信息。redis

local:0>info replication
"# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=208,lag=1
master_repl_offset:208
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:207
"

salve的信息,能夠看到他的role是slave,以及master的相關信息。數據庫

local6380:0>info replication
"# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:194
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
"

若是想讓slave斷開同步,則能夠執行slaveof no one命令,再查看info replication時,發現他slave已經變成了master。若是繼續同步,則執行slaveof 127.0.0.1 6379,此時查看info replication,role仍是slave。windows

原理

image.png
若是master的rdb還沒生成完成,此時若是有其餘slave連進來,是能夠直接使用這個rdb以及緩衝區的命令的,若是已經生成完,則會從新生成rdb文件。
雖然從庫的數據能夠做爲備份,可是仍是建議開啓主庫的持久化。若是沒有開啓,當主庫宕機重啓後,主庫的數據是空的,而從庫就會把空的數據複製過來並清空自身的數據,則從庫的數據也變成空的了。
以上流程是第一次同步的時候,redis也支持斷點續傳。master中記錄了backlog,master和redis都記錄了對應的offset,master根據這個offer進行同步數據,若是沒有對應的offset,只能全量複製了。服務器

一主多從

生成rdb時,是fork了一個子進程來處理,此時並不影響master接收客戶端的命令,可是redis處理命令的效率會下降。若是咱們須要多個slave,會致使master的性能降低的嚴重,因此咱們能夠採用一主多從的方式來作。
image.png
當從服務器1從master同步的時候,他會斷開從服務器a、b、c的鏈接,同步完成後,再把數據以master的形式同步給服務器a、b、c。架構

相關文章
相關標籤/搜索