1. 程式人生 > 遊戲 >美觀實用 最新《生化危機》主題人體工學遊戲椅公開

美觀實用 最新《生化危機》主題人體工學遊戲椅公開

Redis主從複製

概念

主從複製,是指將一臺Redis伺服器的資料,複製到其他的Redis伺服器。前者稱為主節點(master/leader),後者稱為從節點(slave/follower);資料的複製是單向的,只能由主節點到從節點。Master以寫為主,Slave以讀為主。

預設情況下,每臺Redis伺服器都是主節點;且一個主節點可以有多個從節點(或者沒有從節點),但一個從節點只能有一個主節點。

主從複製的作用主要包括:

  1. 資料冗餘:主從複製實現了資料的熱備份,是持久化之外的一種資料冗餘方式。
  2. 故障恢復:當主節點出現問題時,可以由從節點提供服務,實現快速的故障恢復;實際上是一種服務的冗餘。
  3. 負載均衡:在主從複製的基礎上,配合讀寫分離,可以由主節點提供寫服務,由從節點提供讀服務(即寫Redis資料時應用連線主節點,讀Redis資料時應用連線從節點),分擔伺服器負載;尤其時在寫少讀多的場景下,通過多個從節點分擔讀負載,可以大大提高Redis伺服器的併發量。
  4. 高可用基石:除了上述作用以外,主從複製還是哨兵和叢集能夠實施的基礎,因此說主從複製是Redis高可用的基礎。

一般來說,要將Redis運用於工程專案中,只使用一臺Redis是萬萬不能的,原因如下:

  1. 從結構上,單個Redis伺服器會發生單點故障,並且一臺伺服器需要處理所有的請求負載,壓力較大
  2. 從容量上,單個Redis伺服器記憶體容量有限,就算一臺Redis伺服器記憶體熔鍊為256G,也不能將所有記憶體用作Redis儲存記憶體,一般來說,單臺Redis最大使用記憶體不應該超過20G。
  3. 電商網站上的商品,一般都是一次上次,無數次瀏覽的,說專業點也就是“讀多寫少”。

對於這種場景,我們可以使用如下這種架構:

主從複製,讀寫分離!80%的情況下都是在進行讀操作!減緩伺服器的壓力!架構中經常使用!一主二從!

環境配置

只配置從庫,不用配置主庫!

127.0.0.1:6379> info replication    # 檢視當前庫的資訊
# Replication
role:master    # 角色 master
connected_slaves:0    # 沒有從機
master_replid:f6c9f7a4dd4dfb31c1e0ba2860508616af6149d2
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379>

複製三個配置檔案然後修改對應的資訊

1、埠

2、pid名字

3、log檔名字

4、dump.rdb名字

修改完畢之後,啟動我們3個redis伺服器,可以通過程序資訊檢視!

一主二從

預設情況下,每臺Redis伺服器都是主節點

認老大!一主(79)二從(80、81)

[root@iZwz923puo56yoq4a7egutZ bin]# redis-cli -p 6380
127.0.0.1:6380> SLAVEOF 127.0.0.1 6379    # SLAVEOF host 6379 找誰當自己的老大
OK
127.0.0.1:6380> info replication
# Replication
role:slave    # 角色 從機
master_host:127.0.0.1
master_port:6379    # 主機埠號
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:14
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:2d9cd4d2c7786cb0f242a5a448651f943400e18c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14
127.0.0.1:6380> 
# 在主機中檢視!
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1    # 多了從機的配置
slave0:ip=127.0.0.1,port=6380,state=online,offset=140,lag=1
master_replid:2d9cd4d2c7786cb0f242a5a448651f943400e18c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:140
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:140

繼續配置另一臺從機

真實的從主配置應該在配置檔案中配置,這樣才是永久的,我們這裡使用的是命令,是暫時的!

細節

主機可以寫,從機只能讀!主機中所有資訊和資料,都會自動被從機儲存!

測試:主機斷開連線,從機依舊連線到主機的,但是沒有寫操作了,這個時候,主機如果回來的,從機依舊可以直接獲取到主機寫的資訊!

如果是使用命令列,來配置的主從,這個時候如果重啟了,就會變回主機!只要變為從機,立馬就會從主機中獲取值!

複製原理

Slave啟動成功連線到master後傳送一個sync命令

Master街道命令,啟動後臺的存檔程序,同時收集所有接收到的用於修改資料集命令,後臺程序執行完畢之後,master將傳送整個資料檔案到slave,並完成一次完全同步。

全量複製:而slave服務在接收到資料庫檔案資料後,將其存檔並載入到記憶體中。

增量複製:Master繼續將新的所有收集到的修改命令一次傳給slave,完成同步,但是隻要是重新連線master,一次完全同步(全量複製)將被自動執行

層層鏈路

上一個M連線下一個S!

這時候也可以完成我們的主從複製!

如果沒有老大了,這個時候能不能選擇一個老大出來呢?手動!

謀權篡位

如果主機斷開了連線,我們可以是用SLAVEOF no one讓自己變成主機!其他的節點就可以手動連線到最新的這個主節點(手動)!如果這個時候老大修復了,那就重新連線(手動)!