redis集群原理

来源:http://www.cnblogs.com/liyasong/archive/2017/02/11/redis_jiqun.html
-Advertisement-
Play Games

redis 集群的原理介紹。寫的不對的地方,還望給位大神多多指正。 ...


    redis是單線程,但是一般的作為緩存使用的話,redis足夠了,因為它的讀寫速度太快了。

      官方的一個簡單測試:

      測試完成了50個併發執行100000個請求

      設置和獲取的值是一個256位元組字元串。

      結果:讀的速度是110000次/s,寫的速度是81000次/s 

    在這麼快的讀寫速度下,對於一般程式來說足夠用了,但是對於訪問量特別大的網站來說,還是稍有不足。那麼,如何提升redis的性能呢?看標題就知道了,搭建集群。

  3.0版本之前

    3.0版本之前的redis是不支持集群的,我們的徐子睿老師說,那個時候,我們的redis如果想要集群的話,就需要一個中間件,然後這個中間件負責將我們需要存入redis中的數據的key通過一套演算法計算得出一個值。然後根據這個值找到對應的redis節點,將這些數據存在這個redis的節點中。

    在取值的時候,同樣先將key進行計算,得到對應的值,然後就去找對應的redis節點,從對應的節點中取出對應的值。

    這樣做有很多不好的地方,比如說我們的這些計算都需要在系統中去進行,所以會增加系統的負擔。還有就是這種集群模式下,某個節點掛掉,其他的節點無法知道。而且也不容易對每個節點進行負載均衡。

  3.0版本及以後

    先來一張redis集群的架構圖:

    

    在這個圖中,每一個藍色的圈都代表著一個redis的伺服器節點。它們任何兩個節點之間都是相互連通的。客戶端可以與任何一個節點相連接,然後就可以訪問集群中的任何一個節點。對其進行存取和其他操作。

    那麼redis是怎麼做到的呢?首先,在redis的每一個節點上,都有這麼兩個東西,一個是插槽(slot)可以理解為是一個可以存儲兩個數值的一個變數這個變數的取值範圍是:0-16383。還有一個就是cluster我個人把這個cluster理解為是一個集群管理的插件。當我們的存取的key到達的時候,redis會根據crc16的演算法得出一個結果,然後把結果對 16384 求餘數,這樣每個 key 都會對應一個編號在 0-16383 之間的哈希槽,通過這個值,去找到對應的插槽所對應的節點,然後直接自動跳轉到這個對應的節點上進行存取操作。

    

    還有就是因為如果集群的話,是有好多個redis一起工作的,那麼,就需要這個集群不是那麼容易掛掉,所以呢,理論上就應該給集群中的每個節點至少一個備用的redis服務。這個備用的redis稱為從節點(slave)。那麼這個集群是如何判斷是否有某個節點掛掉了呢?

    首先要說的是,每一個節點都存有這個集群所有主節點以及從節點的信息。

    它們之間通過互相的ping-pong判斷是否節點可以連接上。如果有一半以上的節點去ping一個節點的時候沒有回應,集群就認為這個節點宕機了,然後去連接它的備用節點。如果某個節點和所有從節點全部掛掉,我們集群就進入faill狀態。還有就是如果有一半以上的主節點宕機,那麼我們集群同樣進入發力了狀態。這就是我們的redis的投票機制,具體原理如下圖所示:

    

    (1)投票過程是集群中所有master參與,如果半數以上master節點與master節點通信超時(cluster-node-timeout),認為當前master節點掛掉.

    (2):什麼時候整個集群不可用(cluster_state:fail)? 

        a:如果集群任意master掛掉,且當前master沒有slave.集群進入fail狀態,也可以理解成集群的slot映射[0-16383]不完整時進入fail狀態. ps : redis-3.0.0.rc1加入cluster-require-full-coverage參數,預設關閉,打開集群相容部分失敗.

        b:如果集群超過半數以上master掛掉,無論是否有slave,集群進入fail狀態.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 真機測試錯誤“The application could not be verified” 真機測試的時候報錯:“The application could not be verified”。這裡 http://stackoverflow.com/questions/28231338/ios app ...
  • 在BaseAdapter獲取View之前,BaseAdapter需要與數據源相關聯。 可以使用構造方法: BaseAdapter獲取View分三種:逗比式,普通式,文藝式。 逗比式:需要多次新建View,沒有充分利用列表組件(ListView,GridView)的緩衝機制,有浪費很大資源的嫌疑。 普 ...
  • 一、MySQL的下載 1.登陸MySQL的官網下載適用於64位系統的ZIP壓縮包(https://dev.mysql.com/downloads/mysql/) 二、解壓安裝包 將下載的ZIP壓縮包解壓到任意文件夾。(此處為: C:\mysql5.7) 三、修改配置文件 將解壓文件夾目錄下的my-d ...
  • 開發過程中經常遇到遠程訪問mysql的問題,每次都需要搜索,感覺太麻煩,這裡記錄下,也方便我以後查閱。 首先訪問本機的mysql(用ssh登錄終端,輸入如下命令): 輸入密碼登陸進去後,輸入如下的語句: 其中: user是用戶名mysql預設的是rootpassword是密碼自己設置%表示任意主機, ...
  • 這是一份貝葉斯機器學習路線圖, 正在不斷更新中. 路線圖由簡短的介紹配以相應的學習資源組成, 讀者不一定要按順序學習, 可以直接定位到自己需要的地方. 很多時候, 我們希望自學某個領域的知識, 學習能力是不差的, 但苦於不知該學哪些, 從何學起, 看什麼書/視頻好? 各個概念/知識點之間是怎樣的聯繫... ...
  • Mysql官網下載教程: http://jingyan.baidu.com/article/ceb9fb10b77bba8cad2ba09a.html Mysql安裝圖文教程: http://jingyan.baidu.com/article/cd4c2979033a17756f6e6047.htm ...
  • 一、SQL分類 DDL—數據定義語言(CREATE,ALTER,DROP,DECLARE) DML—數據操縱語言(SELECT,DELETE,UPDATE,INSERT) DCL—數據控制語言(GRANT,REVOKE,COMMIT,ROLLBACK) 二、基礎語句 2.1、說明:創建資料庫 2.2 ...
  • 1. 使用Upgrade Adviser評估升級前需要解決的事情。 https://msdn.microsoft.com/zh-cn/library/ms144256(v=sql.110).aspx https://msdn.microsoft.com/zh-cn/library/ms144256( ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...