Linux(redis服務3(主從複製、一主二從、哨兵模式(Sentinel)))

Linux操作系統

Redis服務

(一)Redis的主從複製

1. 概述

  • 主從複製:當前的服務器(slave)複製指定服務器(master)的內容,被複制的服務器稱爲主服務器(master),對主服務器進行復制操作的爲從服務器(slave);主服務器master可以進行讀寫操作,當主服務器的數據發生變化,master會發出命令流來保持對salve的更新,而從服務器slave通常是隻讀的,在主從複製模式下,即便master宕機了,slave是不能變爲主服務器進行寫操作的,一個master可以有多個slave,即一主多從
  • 主從複製的好處:
    數據冗餘,實現數據的熱備份;
    故障恢復,避免單點故障帶來的服務不可用;
    讀寫分離,負載均衡。主節點負載讀寫,從節點負責讀,提高服務器併發量;
    高可用基礎,是哨兵機制和集羣實現的基礎。

2. 一主二從

- 配置
  1. 查看主機複製配置信息
127.0.0.1:6379> info replication
# Replication
role:master                # 角色:master
connected_slaves:0         # 從機連接數
master_replid:1b8b9826d210720c3cc7cda438d0a0b93d8995cb
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
  1. 單機模擬一主二從的設置:
    首先複製二份配置文件 6379.conf ,修改port(6380、6381)、pid、log文件、dump.rdb即可實現!登錄使用該配置文件,即 redis-server 配置文件,然後在redis-cli -p 6380redis-cli -p 6380登錄即可;最後在服務端執行REPLICAOF 192.168.0.200 6379,連接主機即可。
    注意:使用命令行配置的主從,當從機重啓時,從機會自動變爲master,需從連接主機才恢復!數據也會依舊獲取到!

可以查看從機的role已經切換爲slave了:
在這裏插入圖片描述
主機已經連接了兩臺從機:
在這裏插入圖片描述

- 測試主從讀寫

主機可寫可讀,從機只讀不寫

主機:
在這裏插入圖片描述
從機:
在這裏插入圖片描述
注意:

  • 當主機宕機後,從機照樣可以讀取數據,當主機重新恢復,寫入新的數據,從機依舊可以獲得;
  • 當主機宕機,下一臺從機執行 SLAVEOF no one,會使自己變爲主機,但主機恢復後,就不會有連接的從機了。
- 主從複製原理

1、Slave啓動成功連接到master後會發送一個sync(同步)命令;
2、Master接到命令啓動後的存盤進程,同時收集所有接收到的用於修改數據集命令,在後臺進程執行完畢之後,master將傳送整個數據文件到slave,以完成一次完全同步;
3、全量複製:而slave服務在數據庫文件數據後,將其存盤並加載到內存中;
4、增量複製:Master繼續將新的所有收集到的修改命令依次傳給slave,完成同步;
5、但是隻要是重新連接master,一次完全同步(全量複製)將被自動執行。

3. 哨兵模式

- 概述

主從切換技術的方法是:當主服務器宕機後,需要手動把一臺從服務器切換爲主服務器,這就需要人工干預,費事費力,還會造成一段時間內服務不可用。這不是一種推薦的方式,更多時候,我們優先考慮哨兵模式,Redis從2.8後正式提供Sentinel(哨兵)架構。

哨兵模式是一種特殊的模式,首先Redis提供了哨兵的命令,哨兵是一個獨立的進程,作爲進程,它會獨立運行。其原理是哨兵通過發送命令,等待Redis服務器響應,從而監控運行的多個Redis實例。
在這裏插入圖片描述

- 哨兵的作用
  • 通過發送命令,讓Redis服務器返回監控其運行狀態,包括主服務器和從服務器。
  • 當哨兵監測到master宕機,會自動將slave切換成master,然後通過發佈訂閱模式通知其他的從服務器,修改配置文件,讓它們切換主機。
- 多哨兵模式

一個哨兵進程對Redis服務器進行監控,可能會出現問題,爲此,我們可以使用多個哨兵進行監控。各個哨兵之間還會進行監控,這樣就形成了多哨兵模式。
在這裏插入圖片描述
描述:假設主服務器宕機,哨兵1先檢測到這個結果,系統並不會馬上進行故障切換(failover)過程,僅僅是哨兵1主觀的認爲主服務器不可用,這個現象成爲主觀下線。當後面的哨兵也檢測到主服務器不可用,並且數量達到一定值時,那麼哨兵之間就會進行一次投票,投票的結果由一個哨兵發起,進行failover操作。切換成功後,就會通過發佈訂閱模式,讓各個哨兵把自己監控的從服務器實現切換主機,這個過程稱爲客觀下線。這樣對於客戶端而言,一切都是透明的。

- 測試

配置一個 sentinel.conf 文件:

# sentinel monitor代表監控
# mymaster代表自定義的服務器名稱
# 127.0.0.1 6379代表監控的主服務器,6379代表端口
# 1代表只有一個或一個以上的哨兵認爲主服務器不可用的時候,纔會進行failover操作。
entinel monitor mymaster 127.0.0.1 6379 1

啓動哨兵模式:redis-sentinel sentinel.conf
可以看到監控的主機,從機信息
在這裏插入圖片描述
當master宕機,我們來看看哨兵:當6379 宕機後,哨兵“選舉”6380端口爲master!
在這裏插入圖片描述
此時的6380服務器已經爲master,6382爲6381的slave:
在這裏插入圖片描述

  • 哨兵模式完整配置
# 哨兵的端口號(默認爲26379)
port 26379
# 哨兵默認的工作目錄
dir /tmp
# 核心配置
entinel monitor mymaster 127.0.0.1 6379 1
# sentinel auth-pass <master-name> <password>
# # sentinel author-pass定義服務的密碼,mymaster是服務名稱,123456是Redis服務器密碼
sentinel auth-pass mymaster 123456
# 指定多少毫秒之後 主節點沒有應答哨兵sentinel 此時 哨兵主觀上認爲主節點下線 默認30秒
# sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds mymaster 30000
...
其他配置太多了可以baidu

//下篇再見…謝謝
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章