<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                **概念** 什么叫做主從復制?Redis主從復制實際上就是將主Redis服務器的數據,復制到其他從Redis服務器去進行存儲,默認情況下每臺Redis服務器都是主節點,一個主節點可以擁有多個從節點,但是每個從節點只能設置一個主節點。數據復制是單向復制,只能從主節點復制到從節點中存儲。在主節點中不需要進行特殊的配置,而只需要在從節點添加slaveof指令: * slaveof 在從節點的配置文件中通過slaveof指令可以設置該從節點擁有的主節點。 **開啟主從復制方式** 在從節點中配置slaveof指令一共有三種方式: * 在redis.conf配置文件中配置:在配置文件中加入:slaveof 。 * 從節點啟動命令添加slaveof參數:在reids啟動命令后加上 --slaveof 。 * 從節點Redis啟動成功執行slaveof命令:slaveof 。 **主從復制的作用** * 數據冗余:可以實現數據熱備份,在Redis持久化的基礎上進一步對數據備份進行優化。 * 故障恢復:當主節點硬盤持久化出現問題,可以快速從從節點提供服務,實現數據恢復。 * 讀寫分離:可以主節點負責所有寫操作,從節點負責所有讀操作,實現Redis讀寫分離提高服務器負載能力。 * 負載均衡:主從復制配合實現讀寫分離,可以減輕服務器負載,實現負載均衡。 * 高可用:主從復制是實現集群的基礎,所以高并發下主從配置是必不可少的配置之一。 **主從復制三大階段** 主從復制主要分為3個大階段:準備階段、數據同步階段、命令傳輸階段。 **準備階段** **保存主節點信息** 從節點服務器中存在兩個字段:masterhost和masterport。masterhost字段用于存儲主節點的ip信息,masterport用于存儲主節點的端口號信息,實際上就是我們通過slaveof指令設置的信息。 **主節點與從節點建立socket連接** 成功執行slaveof指令,從節點會每秒1次定時調用replicationCron()函數,尋找是否可以連接主節點,當發現存在新的主節點時,便通過上一步維護的ip與port嘗試與該主節點建立socket連接。當主節點與從節點成功建立socket連接,從節點會建立一個ssocket套接字,專門負責接受主節點發送的復制數據命令。而主節點同時也會為該從節點創建相應的客戶端狀態。 **發送ping命令** 通過上一步,從節點就成功的成為主節點的一個客戶端。可以通過發送ping請求進行第一次請求,第一次請求的目的不是為了復制數據,而是為了檢查剛才創建的socket連接是否可用以及主節點是否可以能夠正常處理請求。從節點向主節點發送ping命令一般會有三種響應結果: * 返回pong:表示socket連接可用,可以繼續操作。 * 超時未返回:表示socket不可用,則從節點斷開socket連接。 * 返回其他結果:代表主節點目前處于忙碌狀態無法處理從節點請求,則從節點斷開socket連接。 **權限驗證** 如果主節點配置了requirepass參數,則表示需要權限驗證,從節點必須配置masterauth參數,masterauth參數配置成與主節點requirepass參數一致,才可以通過驗證。否則權限驗證失敗,從節點斷開socket連接。 **數據同步階段** 準備工作結束后,便可以進行數據同步。首次數據復制,主節點會將所有數據發送給子節點,也就是全量復制,所以這部分是耗時操作。非首次數據同步,則會根據主節點和從節點當前狀態的不同,選擇全量復制或者不分膚質。在本階段,主節點需要主動向從節點發送請求完成復制。 **數據全量復制** 主節點收到全量復制的請求后,fork出一個后臺進程,將數據庫快照生成RDB文件,并且將生成過程中接受到的寫請求暫時緩存,否則會影響數據一致性。然后在RDB文件生成之后將RDB文件發送給從節點,從節點先清除舊數據,然后接收RDB文件更新數據,最后主節點將緩存的寫命令全部發送給從節點,從節點執行寫命令,最終保持和主節點的數據一致性。 **部分復制** 因為進行全量復制要fork子進程并且進行RDB持久化會極度消耗CPU,而且發送RDB文件給從節點也會對網絡帶寬造成影響,所以全量復制實際效率并不高,所以可以使用部分復制對數據進行主從復制。進行部分復制時,主節點和從節點會分別維護一個offset變量來存儲主節點傳遞給從節點的字節數,通過offset可以判斷主從節點數據是否一致,若不一致可以從從節點所在的offset字節數然后在主節點的offset輕松找到缺少的數據進行部分復制。但是進行部分復制最關鍵的一點就是必須為非首次復制,主從節點首次復制必須為全量復制過程。 **命令傳輸階段** 當主節點將當前數據同步給從節點后,復制的建立流程就完成了。只要從節點不關閉主從復制,則主節點會不斷的把寫命令發送給從節點,保證主從數據的一致性。命令傳輸階段是異步操作,所以可能存在一定程度的延遲,無法保證數據的實時一致性。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看