<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 主從復制 Redis 的復制功能是支持多個數據庫之間的數據同步。主數據庫可以進行讀寫操作,當主數據庫的數據發生變化時會自動將數據同步到從數據庫。從數據庫一般是只讀的,它會接收主數據庫同步過來的數據。一個主數據庫可以有多個從數據庫,而一個從數據庫只能有一個主數據庫。 **數據的復制是單向的,只能由主節點到從節點。 Master以寫為主,Slave 以讀為主。** 默認情況下,每臺Redis服務器都是主節點; 且一個主節點可以有多個從節點(或沒有從節點),但一個從節點只能有一個主節點。 ## 作用 1. 數據冗余:主從復制實現了數據的熱備份,是持久化之外的一種數據冗余方式。 2. 故障恢復:當主節點出現問題時,可以由從節點提供服務,實現快速的故障恢復;實際上是一種服務的冗余。 3. 負載均衡衡:在主從復制的基礎上,配合讀寫分離,可以由主節點提供寫服務,由從節點提供讀服務,分擔服務器負載 4. 高可用的基礎 ## 原理 1. 當啟動一個從節點時,它會發送一個`PSYNC`命令給主節點; 2. 如果是從節點**初次連接到主節點,那么會觸發一次全量復制**。此時主節點會啟動一個后臺線程,開始生成一份 RDB 快照文件; 3. 同時還會將從客戶端 client 新收到的所有寫命令緩存在內存中。RDB 文件生成完畢后, 主節點會將 RDB 文件發送給從節點,**從節點會先將 RDB 文件寫入本地磁盤,然后再從本地磁盤加載到內存** 4. 接著主節點會將內存中緩存的寫命令發送到從節點,從節點同步這些數據; 5. 如果從節點跟主節點之間網絡出現故障,連接斷開了,會自動重連,連接之后主節點僅會將部分缺失的數據同步給從節點。 ## 配置 例:開啟三個 redis 服務,配置一主二從。端口號分別是 6379、6380、6381 ~~~shell 127.0.0.1:6379> info replication # 查看當前庫的信息 # Replication role:master # 角色 master connected_slaves:0 # 沒有從機 master_failover_state:no-failover master_replid:9a6cd17bac5608f98698b2ff808f001eeecfdc42 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 ~~~ > 只配置從庫,不用配置主庫! ~~~shell # 從機 1 127.0.0.1:6380> slaveof 127.0.0.1 6379 OK 127.0.0.1:6380> info replication # Replication role:slave # 當前角色是從機 master_host:127.0.0.1 # 主機的信息 master_port:6379 master_link_status:down master_last_io_seconds_ago:-1 master_sync_in_progress:0 slave_repl_offset:1 master_link_down_since_seconds:jd slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 ------------------------------------------------------------------------------ # 從機 2 127.0.0.1:6380> slaveof 127.0.0.1 6379 ------------------------------------------------------------------------------ # 在主機中查看! 127.0.0.1:6379> info replication # Replication role:master connected_slaves:2 # 多了從機的配置 slave0:ip=127.0.0.1,port=6380,state=online,offset=0,lag=4 slave1:ip=127.0.0.1,port=6381,state=online,offset=0,lag=1 master_failover_state:no-failover master_replid:d270c363e7eea2ada10075696d6c99c0149a597f master_replid2:0000000000000000000000000000000000000000 master_repl_offset:434 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:434 127.0.0.1:6379> set name 1 OK ------------------------------------------------------------------------------ # 從機查看 127.0.0.1:6380> get name "1" 127.0.0.1:6381> get name "1" ~~~ ### 在配置文件配置 ~~~ replicaof 127.0.0.1 6379 masterauth 123456 # 主服務器密碼 ~~~ > 詳細配置:https://redis.io/docs/manual/replication/ # 哨兵 Sentinel 主從切換技術的方法是:當主服務器宕機后,需要手動把一臺從服務器切換為主服務器,這就需要人工 干預,費事費力,還會造成一段時間內服務不可用。這不是一種推薦的方式,更多時候,我們優先考慮 哨兵模式。Redis從2.8開始正式提供了Sentinel(哨兵) 架構來解決這個問題 :-: ![](https://img.kancloud.cn/38/79/387965c0817704a5ebc61d401ebb15ab_710x563.png) 客戶端連接 Redis 的時候,先連接哨兵,哨兵會告訴客戶端 Redis 主節點的地址,然后客戶端連接上 redis 并進行后續的操作,當主節點宕機的時候,哨兵監測到主節點宕機,會重新推選出某個表現良好的從節點成為新的主節點,然后通過發布訂閱模式通知其他服務器,讓他們切換主機。 > 官網詳細:https://redis.io/docs/manual/sentinel ## 工作原理 * 每個**Sentinel**以每秒鐘一次的頻率向它所知道的Master,Slave以及其他 **Sentinel**實例發送一個`PING`命令。 * 如果一個實例距離最后一次有效回復 `PING` 命令的時間超過指定值, 則這個實例會被 **Sentine** 標記為**主觀下線**。 * 如果一個 Master 被標記為主觀下線,則正在監視這個 Master 的所有 Sentinel 要以每秒一次的頻率確認 Master 是否真正進入主觀下線狀態 * 當有足夠數量的 Sentinel(大于等于配置文件指定值)在指定的時間范圍內確認 Master 的確進入了主觀下線狀態, 則 Master 會被標記為**客觀下線** 。若沒有足夠數量的 Sentinel 同意 Master 已經下線, Master 的客觀下線狀態就會被解除。若 Master 重新向 Sentinel 的 PING 命令返回有效回復, Master 的主觀下線狀態就會被移除。 * 哨兵節點會選舉出**哨兵 leader**,負責故障轉移的工作。 * **哨兵 leader** 會推選出某個表現良好的從節點成為新的主節點,然后通知其他從節點更新主節點信息。 ## 配置 sentinel.conf ~~~shell sentinel monitor mymaster 127.0.0.1 6379 2 # Redis 監控一個名為*mymaster*的主服務器,該主服務器位于地址 127.0.0.1 和端口 6379,投票機制為 2 sentinel down-after-milliseconds mymaster 60000 sentinel failover-timeout mymaster 180000 sentinel parallel-syncs mymaster 1 ~~~ sentinel monitor <master-group-name> <ip> <port> <quorum> 例如,如果您有 5 個 Sentinel 進程,并且給定主進程的法定人數設置為 2,則會發生以下情況: * 如果兩個 Sentinel 同時同意 master 不可訪問,則兩個 Sentinel 中的一個將嘗試啟動故障轉移。 * 如果總共至少有三個 Sentinel 可達,則故障轉移將被授權并實際啟動 sentinel <option_name> <master_name> <option_value> * `down-after-milliseconds`是以毫秒為單位的時間,Sentinel 開始認為它已關閉,因此實例不應到達(不回復我們的 PING 或回復錯誤)。 * `parallel-syncs`設置在故障轉移后可以重新配置以同時使用新主服務器的副本數。數字越小,完成故障轉移過程所需的時間就越長,但是如果將副本配置為服務舊數據,您可能不希望所有副本同時與主服務器重新同步。雖然復制過程對于副本來說大部分是非阻塞的,但有時它會停止從主服務器加載批量數據。您可能希望通過將此選項設置為值 1 來確保一次只能訪問一個副本。 ## 優點 * 主從可以切換,故障可以轉移,系統的可用性就會更好 * 哨兵模式就是主從模式的升級,手動到自動,更加健壯! ## 缺點 * 配置麻煩 # Redis cluster 哨兵模式解決了主從復制不能自動故障轉移、達不到高可用的問題,但還是存在主節點的寫能力、容量受限于單機配置的問題。而 cluster 模式實現了 Redis 的分布式存儲,每個節點存儲不同的內容,解決主節點的寫能力、容量受限于單機配置的問題 Redis cluster 集群節點最小配置 6 個節點以上(3 主 3 從),其中主節點提供讀寫操作,從節點作為備用節點,不提供請求,只作為故障轉移使用
                  <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>

                              哎呀哎呀视频在线观看