主從模式的概念:
主從模式就是N個redis實例,可以是1主N從朗儒,也可以N主N從(N主N從則不是嚴格意義上的主從模式了颊乘,后續(xù)的集群模式會說到,N主N從就是N+N個redis實例醉锄。)
主從模式的一個作用是備份數(shù)據乏悄,這樣當一個節(jié)點損壞(指不可恢復的硬件損壞)時,數(shù)據因為有備份恳不,可以方便恢復檩小。
另一個作用是負載均衡,所有客戶端都訪問一個節(jié)點肯定會影響Redis工作效率烟勋,有了主從以后规求,查詢操作就可以通過查詢從節(jié)點來完成
redis主從需要了解的概念
一個Master可以有多個Slaves筐付,可以是1主N從。
默認配置下阻肿,master節(jié)點可以進行讀和寫瓦戚,slave節(jié)點只能進行讀操作,寫操作被禁止(readonly)丛塌。
不要修改配置讓slave節(jié)點支持寫操作较解,沒有意義,原因一姨伤,寫入的數(shù)據不會被同步到其他節(jié)點哨坪;原因二,當master節(jié)點修改同一條數(shù)據后乍楚,slave節(jié)點的數(shù)據會被覆蓋掉当编。
slave節(jié)點掛了不影響其他slave節(jié)點的讀和master節(jié)點的讀和寫,重新啟動后會將數(shù)據從master節(jié)點同步過來徒溪。
master節(jié)點掛了以后忿偷,不影響slave節(jié)點的讀,Redis將不再提供寫服務臊泌,master節(jié)點啟動后Redis將重新對外提供寫服務鲤桥。
特別說明:該種模式下,master節(jié)點掛了以后渠概,slave不會競選成為master茶凳。哨兵模式(Sentinel)下會進行master的競選,后續(xù)我們再嘗試
主從模式的搭建
- 啟動一個節(jié)點播揪,把它當做master節(jié)點(port:7001)
- 配置slave節(jié)點(port:7000)有兩種方法
- 我們可以直接在配置文件中加入配置
slaveof 192.168.3.67 7001
然后啟動就可以了
- redis-cli 進入操作界面后
192.168.3.67:7000> slaveof 192.168.3.67 7001
OK Already connected to specified master
測試主從節(jié)點
master節(jié)點上的信息
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幾點上的信息
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é)點get
192.168.3.67:7001> set test hello
OK
192.168.3.67:7000> get test
"hello"
從節(jié)點只讀贮喧,寫的話會報錯
192.168.3.67:7000> set test nihao
(error) READONLY You can't write against a read only replica.
斷開主從關系
通過slaveof <masterip> <masterport>命令建立主從復制關系以后,可以通過slaveof no one斷開猪狈。需要注意的是箱沦,從節(jié)點斷開復制后,不會刪除已有的數(shù)據雇庙,只是不再接受主節(jié)點新的數(shù)據變化谓形。
從節(jié)點執(zhí)行slaveof no one后,打印日志如下所示疆前;可以看出斷開復制后寒跳,從節(jié)點又變回為主節(jié)點
參考文章
-
主從復制
搭建以及主從之間數(shù)據復制的問題 -
redis 服務器的安裝、主從復制的搭建
搭建和測試