• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Benjamin

            靜以修身,儉以養德,非澹薄無以明志,非寧靜無以致遠。
            隨筆 - 397, 文章 - 0, 評論 - 196, 引用 - 0
            數據加載中……

            Reids集群的Redis Cluster模式

            Redis集群(Redis Cluster)是Redis提供的一種分布式解決方案,它允許Redis數據在多個Redis節點之間進行分片(sharding),從而可以水平擴展以支持更大的數據量、更高的并發查詢負載以及更高的可用性。
            一、Redis Cluster特點:
            1、哈希槽(Hash ):使用16384個哈希槽存儲數據;每個節點都負責一部分哈希槽;當客戶需要存儲或檢索數據時,使用CRC16算法對鍵進行哈希,根據結果確定使用哪個哈希槽。
            2、數據分片:通過哈希槽分配給集群中的節點,每個節點只負責分配到哈希槽數據9、
            3、高可用性和故障恢復:Redis集群主節點均有一個或多個備份節點;如主節點故障,集群自動將節點提升到主節點,以保證服務的連續性;集群會檢測和自動處理故障節點。
            4、客戶端重定向:客戶端訪問不在其當前節點的哈希槽時,該節點會自動向客戶端發送重定向命令,告訴客戶端應連接哪個節點;客戶端根據這個命令重新連接到正確的節點,并執行相應的操作。
            5、一致保證性:Redis集群在CAP(
            Consistency, Availability, Partition tolerance)中傾向于AP(可用性和分區容忍性);某情況下,如網絡故障或節點故障,集群會暫時犧牲一致性。
            6、使用場景:處理大量數據和高并發查詢;需要高可用性和故障恢復能力的場景。
            7、配置和部署:需配置多個Redis節點;可使用reids-cli獲取其他集群管理工具
            如(Redis Cluster Manager)來創建、配置和管理集群。
            8、客戶端支持:大多數Reids客戶端支持并提供api與集群交互;客戶端通常會自動處理哈希槽的映射、重定向和故障恢復等底層細節,使得開發象使用單個redis示例一樣使用Reids集群。
            9、其他:
            不支持某些Redis命令(如跨多個鍵的操作)和配置(如持久化到磁盤的配置)
            二、部署:
            1、規模:
            至少需要3個主節點來構成,因為集群使用了投票容錯機制,要求超過半數節點認為某個節點掛了,該節點才被視為不可用;每個主節點都應該有一個或多個從節點(即備份節點)。因此,一個基本的Redis集群至少需要6臺服務器(3主3從)。
            2、
            安裝redis節點
            redis配置文件詳解
            3、配置集群節點:修改Redis節點的配置文件,確保cluster-enabled yes:啟用Redis集群模式;
                                  分配不同的端口號給每個節點,確保它們不沖突(例如,使用1001-9001);
                                   根據需要配置其他相關參數,如密碼、內存限制等
            4、啟動redis:使用redis-server命令
            5、使用reids-cli命令行工具,
            Redis Cluster 在5.0之后取消了ruby腳本 redis-trib.rb的支持。
            redis-cli --cluster help
            Cluster Manager Commands:
              create         host1:port1 ... hostN:portN   #創建集群
                             --cluster-replicas <arg>      #從節點個數
              check          host:port                     #檢查集群
                             --cluster-search-multiple-owners #檢查是否有槽同時被分配給了多個節點
              info           host:port                     #查看集群狀態
              fix            host:port                     #修復集群
                             --cluster-search-multiple-owners #修復槽的重復分配問題
              reshard        host:port                     #指定集群的任意一節點進行遷移slot,重新分slots
                             --cluster-from <arg>          #需要從哪些源節點上遷移slot,可從多個源節點完成遷移,以逗號隔開,傳遞的是節點的node id,還可以直接傳遞--from all,這樣源節點就是集群的所有節點,不傳遞該參數的話,則會在遷移過程中提示用戶輸入
                             --cluster-to <arg>            #slot需要遷移的目的節點的node id,目的節點只能填寫一個,不傳遞該參數的話,則會在遷移過程中提示用戶輸入
                             --cluster-slots <arg>         #需要遷移的slot數量,不傳遞該參數的話,則會在遷移過程中提示用戶輸入。
                             --cluster-yes                 #指定遷移時的確認輸入
                             --cluster-timeout <arg>       #設置migrate命令的超時時間
                             --cluster-pipeline <arg>      #定義cluster getkeysinslot命令一次取出的key數量,不傳的話使用默認值為10
                             --cluster-replace             #是否直接replace到目標節點
              rebalance      host:port                                      #指定集群的任意一節點進行平衡集群節點slot數量 
                             --cluster-weight <node1=w1...nodeN=wN>         #指定集群節點的權重
                             --cluster-use-empty-masters                    #設置可以讓沒有分配slot的主節點參與,默認不允許
                             --cluster-timeout <arg>                        #設置migrate命令的超時時間
                             --cluster-simulate                             #模擬rebalance操作,不會真正執行遷移操作
                             --cluster-pipeline <arg>                       #定義cluster getkeysinslot命令一次取出的key數量,默認值為10
                             --cluster-threshold <arg>                      #遷移的slot閾值超過threshold,執行rebalance操作
                             --cluster-replace                              #是否直接replace到目標節點
              add-node       new_host:new_port existing_host:existing_port  #添加節點,把新節點加入到指定的集群,默認添加主節點
                             --cluster-slave                                #新節點作為從節點,默認隨機一個主節點
                             --cluster-master-id <arg>                      #給新節點指定主節點
              del-node       host:port node_id                              #刪除給定的一個節點,成功后關閉該節點服務
              call           host:port command arg arg .. arg               #在集群的所有節點執行相關命令
              set-timeout    host:port milliseconds                         #設置cluster-node-timeout
              import         host:port                                      #將外部redis數據導入集群
                             --cluster-from <arg>                           #將指定實例的數據導入到集群
                             --cluster-copy                                 #migrate時指定copy
                             --cluster-replace                              #migrate時指定replace
            ① 創建集群主節點:
            redis-cli --cluster create ip:port
            ② 創建集群主從節點:
            redis-cli --cluster create ip:port ip1:port1 --cluster-replicas 1  --cluster-replicas 參數為數字,1表示每個主節點需要1個從節點。
            ③ 添加集群主節點:
            redis-cli --cluster add-node ip:port
            ④ 添加集群從節點:把ip:port節點加入到ip_master:port_master,當做node_id為 117457eab5071954faab5e81c3170600d5192270 的從節點,如不指定 --cluster-master-id 會隨機分配到任意一個主節點。
            redis-cli --cluster add-node ip:port ip_master:port_master --cluster-slave --cluster-master-id 117457eab5071954faab5e81c3170600d519227
            ⑤ 刪除節點:有slot分配的主節點不能直接刪除。
            redis-cli --cluster del-node 
            :port
            f6a6957421b80409106cb36be3c7ba41f3b603ff

            注意:當被刪除掉的節點重新起來之后不能自動加入集群,但其和主的復制還是正常的,也可以通過該節點看到集群信息(通過其他正常節點已經看不到該被del-node節點的信息)。

            如果想要再次加入集群,則需要先在該節點執行cluster reset,再用add-node進行添加,進行增量同步復制。

            ⑥ 檢查集群:任意連接一個集群節點,進行集群狀態檢查
            redis-cli --cluster check 192.168.198.102:6384 --cluster-search-multiple-owners
            ⑦ 集群信息查看:說明:檢查ke

            redis-cli --cluster set-timeout 192.168.163.112:6382 10000

            y、slots、從節點個數的分配情況

            redis-cli --cluster info ip:port

            ⑧ 修復集群:修復集群和槽的重復分配問題

            redis-cli --cluster fix ip:port --cluster-search-multiple-owners

            ⑨ 設置集群的超時時間 :連接到集群的任意一節點來設置集群的超時時間參數cluster-node-timeout

            redis-cli --cluster set-timeout 192.168.163.132:6382 1000

            ⑩ 集群中執行相關命令:連接到集群的任意一節點來對整個集群的所有節點進行設置。

            redis-cli --cluster call ip:6381 config set requirepass cc
            redis-cli -a cc --cluster ip1:6381 config set masterauth cc
            redis-cli -a cc --cluster call ip2:6381 config rewrite
             6、Redis 6.0 新增了幾個命令:fix 的子命令:--cluster-fix-with-unreachable-masters

                                                             call的子命令:--cluster-only-masters、--cluster-only-replicas

                                                             集群節點備份:backup
            7、遷移

            ① 在線遷移slot :在線把集群的一些slot從集群原來slot節點遷移到新的節點,即可以完成集群的在線橫向擴容和縮容。有2種方式進行遷移

            1)直接連接到集群的任意一節點:
               redis-cli -a cc --cluster reshard ip:port
            2)連接到集群的任意一節點來對指定節點指定數量的slot進行遷移到指定的節點:

            redis-cli -a cc --cluster reshard 192.168.165.132:6379 --cluster-from 117457eab5071954faab5e81c3170600d5192270 --cluster-to 815da8448f5d5a304df0353ca10d8f9b77016b28 --cluster-slots 10 --cluster-yes --cluster-timeout 5000 --cluster-pipeline 10 --cluster-replace

            ② 平衡(rebalance)slot 

            1)平衡集群中各個節點的slot數量
            redis-cli -a cc --cluster rebalance 192.168.163.132:6379
            2)根據集群中各個節點設置的權重等平衡slot數量(不執行,只模擬)
            redis-cli -a cc --cluster rebalance --cluster-weight 117457eab5071954faab5e81c3170600d5192270=5 815da8448f5d5a304df0353ca10d8f9b77016b28=4 56005b9413cbf225783906307a2631109e753f8f=3 --cluster-simulate 192.168.163.132:6379
            ③ 導入集群:外部Redis實例(9021)導入到集群中的任意一節點。
            redis-cli --cluster import 192.168.165.132:6379 --cluster-from 192.168.165.132:9021 --cluster-replace
            注意:測試下來發現參數--cluster-replace沒有用,如果集群中已經包含了某個key,在導入的時候會失敗,不會覆蓋,只有清空集群key才能導入。
            如果集群設置了密碼,也會導入失敗,需要設置集群密碼為空才能進行導入(call)。通過monitor(9021)的時候發現,在migrate的時候需要密碼進行auth認證。



             






            posted on 2024-07-12 20:52 Benjamin 閱讀(45) 評論(0)  編輯 收藏 引用 所屬分類: 數據庫

            久久WWW免费人成—看片| 欧美一区二区久久精品| 久久久久久亚洲AV无码专区| 青青青青久久精品国产h| 国产精品免费久久久久久久久| 久久国产免费观看精品3| 久久精品人人做人人爽电影| 区久久AAA片69亚洲| 免费久久人人爽人人爽av| 久久精品国产免费观看| 精品久久人人爽天天玩人人妻| 狠狠色丁香久久婷婷综合| 无码国内精品久久人妻蜜桃| 精品国产一区二区三区久久久狼| 中文字幕无码免费久久| 精品久久久久久无码不卡| 久久乐国产综合亚洲精品| 日韩人妻无码一区二区三区久久 | 久久久久人妻精品一区| 无码精品久久久久久人妻中字 | 久久久老熟女一区二区三区| 2021精品国产综合久久| 欧美一区二区精品久久| 欧美午夜精品久久久久久浪潮| 久久人人青草97香蕉| 久久久精品人妻一区二区三区四 | 久久久国产亚洲精品| 青青草原精品99久久精品66| 色偷偷888欧美精品久久久| 欧美久久综合九色综合| 久久综合狠狠综合久久| 国产AV影片久久久久久| 一本色道久久99一综合| 99久久国产热无码精品免费久久久久| 久久天天躁狠狠躁夜夜av浪潮| 日本人妻丰满熟妇久久久久久| 国产三级精品久久| 久久精品国产第一区二区三区| 国产成人精品久久| 国内高清久久久久久| 国产精品久久久天天影视香蕉 |