撒子是主從複製?
主從複製是指將一臺Redis服務器的數據,複製到其他的Redis服務器。前者稱爲主節點(master/leader),後者稱爲從(slave/follower)。數據的複製是單向的,只能由主節點到從節點。Master以寫爲主,Slave以讀爲主。默認情況下,每臺Redis服務器都是主節點。且一個主節點可以有多個從節點,但一個從節點只能有一個主節點。
主從複製的作用:
- 數據冗餘:主從複製實現了數據的熱備份,是持久化之外的一種數據冗餘方式。
- 故障恢復:當主節點出現問題時,可以由從節點提供服務,實現快速的故障恢復,實際上是一種服務的冗餘。
- 負載均衡:在主從複製的基礎上,配合讀寫分離,可以由主節點提供寫服務,由從節點提供讀服務,分擔服務器負載,尤其在寫少讀多的場景下,通過多個從節點分擔讀負載,可以大大提高Redis服務器的併發量。
- 高可用(集羣)基石:除了上述作用以外,主從複製還是哨兵和集羣能夠實施的基礎,因此主從複製是Redis高可用的基礎
Redis運用於工程項目中,只使用一臺Redis是不行的,原因:
- 從結構上,單個Redis服務器會發生單點故障,並且一臺服務器需要處理所有的請求負載,壓力較大。
- 從容量上,單個Redis服務器內存容量有限,單臺Redis最大使用內存不應該超過20G。
環境配置
1、用一個主機的三個端口來實現一主二從複製出三個新的 redis-79.conf、 redis-80.conf 、redis-81.conf
2、在配置文件中分別把端口號,輸出日誌改爲對應的79、80、81
3、通過info replication查看當前客戶端的信息:
127.0.0.1:6379> info replication
# Replication
role:master #當前角色是主機
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=70,lag=0 #有80和81兩個從機
slave1:ip=127.0.0.1,port=6381,state=online,offset=70,lag=0
master_replid:db82bb0464e1aa93484ee2336e2513119027c217
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:70
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:70
4、默認每個主機都是主節點,一般需要slaveof配置一下就好了
127.0.0.1:6380> slaveof 127.0.0.1 6379 #歸附於6379這個端口號
OK
在實際項目中的主從配置應該在配置文件中配置,這樣的配置是永久的。
主機可以寫,從機只能讀。主機中的所有信息和數據都會自動被從機保存。
主機寫數據:
從機讀數據:
主機斷開連接,從機依舊連接到主機,但是沒有寫操作。如果這個時候主機回來了,從機就可以直接獲取到主機寫的信息。
複製原理
- Slave啓動成功連接到master後會發送一個sync同步命令
- Master接到命令,啓動後臺的存盤進程,同時收集所有接收到的用於修改數據命令,在後臺進程執行完畢之後,master將傳送整個數據文件到slave,並完成一次完全同步。
- 全量複製:slave服務在接收到數據庫文件數據後,將其存盤並加載到內存中。
- 增量複製:Master繼續將新的所有收集到的修改命令一次傳給slave,完成同步。
- 但是要是重新連接master,一次完全同步將被自動執行。