(四)Redis主從原理與搭建

主從模式的概念:

主從模式就是N個(gè)redis實(shí)例,可以是1主N從,也可以N主N從(N主N從則不是嚴(yán)格意義上的主從模式了,后續(xù)的集群模式會(huì)說(shuō)到,N主N從就是N+N個(gè)redis實(shí)例。)

主從模式的一個(gè)作用是備份數(shù)據(jù),這樣當(dāng)一個(gè)節(jié)點(diǎn)損壞(指不可恢復(fù)的硬件損壞)時(shí),數(shù)據(jù)因?yàn)橛袀浞?,可以方便恢?fù)。
  
另一個(gè)作用是負(fù)載均衡,所有客戶端都訪問(wèn)一個(gè)節(jié)點(diǎn)肯定會(huì)影響Redis工作效率,有了主從以后,查詢操作就可以通過(guò)查詢從節(jié)點(diǎn)來(lái)完成

redis主從需要了解的概念

  1. 一個(gè)Master可以有多個(gè)Slaves,可以是1主N從。

  2. 默認(rèn)配置下,master節(jié)點(diǎn)可以進(jìn)行讀和寫,slave節(jié)點(diǎn)只能進(jìn)行讀操作,寫操作被禁止(readonly)。

  3. 不要修改配置讓slave節(jié)點(diǎn)支持寫操作,沒(méi)有意義,原因一,寫入的數(shù)據(jù)不會(huì)被同步到其他節(jié)點(diǎn);原因二,當(dāng)master節(jié)點(diǎn)修改同一條數(shù)據(jù)后,slave節(jié)點(diǎn)的數(shù)據(jù)會(huì)被覆蓋掉。

  4. slave節(jié)點(diǎn)掛了不影響其他slave節(jié)點(diǎn)的讀和master節(jié)點(diǎn)的讀和寫,重新啟動(dòng)后會(huì)將數(shù)據(jù)從master節(jié)點(diǎn)同步過(guò)來(lái)。

  5. master節(jié)點(diǎn)掛了以后,不影響slave節(jié)點(diǎn)的讀,Redis將不再提供寫服務(wù),master節(jié)點(diǎn)啟動(dòng)后Redis將重新對(duì)外提供寫服務(wù)。

  6. 特別說(shuō)明:該種模式下,master節(jié)點(diǎn)掛了以后,slave不會(huì)競(jìng)選成為master。哨兵模式(Sentinel)下會(huì)進(jìn)行master的競(jìng)選,后續(xù)我們?cè)賴L試

主從模式的搭建

  1. 啟動(dòng)一個(gè)節(jié)點(diǎn),把它當(dāng)做master節(jié)點(diǎn)(port:7001)
  2. 配置slave節(jié)點(diǎn)(port:7000)有兩種方法
  • 我們可以直接在配置文件中加入配置

slaveof 192.168.3.67 7001

然后啟動(dòng)就可以了

  • redis-cli 進(jìn)入操作界面后

192.168.3.67:7000> slaveof 192.168.3.67 7001
OK Already connected to specified master

測(cè)試主從節(jié)點(diǎn)

master節(jié)點(diǎn)上的信息

192.168.3.67:7001> info Replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.3.67,port=7000,state=online,offset=2379,lag=0
master_replid:ed564db30c302becd3995539e7ce9b30ad5d5af6
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2379
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:2379

slave幾點(diǎn)上的信息

192.168.3.67:7000> info Replication
# Replication
role:slave
master_host:192.168.3.67
master_port:7001
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_repl_offset:2337
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:ed564db30c302becd3995539e7ce9b30ad5d5af6
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2337
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:2337

在master上set key-value
然后在從節(jié)點(diǎn)get

192.168.3.67:7001> set test hello
OK

192.168.3.67:7000> get test
"hello"

從節(jié)點(diǎn)只讀,寫的話會(huì)報(bào)錯(cuò)

192.168.3.67:7000> set test nihao
(error) READONLY You can't write against a read only replica.

斷開主從關(guān)系

通過(guò)slaveof <masterip> <masterport>命令建立主從復(fù)制關(guān)系以后,可以通過(guò)slaveof no one斷開。需要注意的是,從節(jié)點(diǎn)斷開復(fù)制后,不會(huì)刪除已有的數(shù)據(jù),只是不再接受主節(jié)點(diǎn)新的數(shù)據(jù)變化。

從節(jié)點(diǎn)執(zhí)行slaveof no one后,打印日志如下所示;可以看出斷開復(fù)制后,從節(jié)點(diǎn)又變回為主節(jié)點(diǎn)

參考文章

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容