Redis中的主從複製(模擬一主二從)

撒子是主從複製?

主從複製是指將一臺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

在實際項目中的主從配置應該在配置文件中配置,這樣的配置是永久的。

主機可以寫,從機只能讀。主機中的所有信息和數據都會自動被從機保存。

主機寫數據:

從機讀數據:

主機斷開連接,從機依舊連接到主機,但是沒有寫操作。如果這個時候主機回來了,從機就可以直接獲取到主機寫的信息。

 

複製原理

  1. Slave啓動成功連接到master後會發送一個sync同步命令
  2. Master接到命令,啓動後臺的存盤進程,同時收集所有接收到的用於修改數據命令,在後臺進程執行完畢之後,master將傳送整個數據文件到slave,並完成一次完全同步。
  3. 全量複製:slave服務在接收到數據庫文件數據後,將其存盤並加載到內存中。
  4. 增量複製:Master繼續將新的所有收集到的修改命令一次傳給slave,完成同步。
  5. 但是要是重新連接master,一次完全同步將被自動執行。
     
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章