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

            靜以修身,儉以養(yǎng)德,非澹薄無以明志,非寧靜無以致遠。
            隨筆 - 398, 文章 - 0, 評論 - 196, 引用 - 0
            數(shù)據(jù)加載中……

            Reids集群的Redis Cluster模式

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

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

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

            ⑥ 檢查集群:任意連接一個集群節(jié)點,進行集群狀態(tài)檢查
            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、從節(jié)點個數(shù)的分配情況

            redis-cli --cluster info ip:port

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

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

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

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

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

            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

                                                             集群節(jié)點備份:backup
            7、遷移

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

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

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



             






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

            久久丝袜精品中文字幕| 久久午夜夜伦鲁鲁片免费无码影视| 国产成人久久激情91| 久久se精品一区精品二区国产| 久久亚洲天堂| 久久精品午夜一区二区福利| 久久久WWW免费人成精品| 亚洲精品乱码久久久久久按摩| 久久久国产精品福利免费| 国产A三级久久精品| 久久久久国色AV免费看图片| 久久这里只有精品18| 一本一道久久a久久精品综合| 久久综合久久综合久久| 亚洲精品乱码久久久久久久久久久久| 九九久久精品无码专区| 99久久国语露脸精品国产| 波多野结衣久久| 久久久久国产| 久久人人爽人人澡人人高潮AV | 亚洲国产精品成人AV无码久久综合影院| 中文字幕久久精品| 欧美性猛交xxxx免费看久久久| 久久精品国产91久久麻豆自制| 无码伊人66久久大杳蕉网站谷歌 | 亚洲午夜精品久久久久久app| 国产精品久久精品| 国产午夜精品理论片久久影视| 久久99国内精品自在现线| 无码人妻久久一区二区三区免费丨| 亚洲日韩欧美一区久久久久我 | 成人精品一区二区久久久| 精品国产乱码久久久久久1区2区 | 91久久精品电影| 7国产欧美日韩综合天堂中文久久久久| 久久精品中文闷骚内射| 欧美大香线蕉线伊人久久| 久久综合九色综合网站| 国产午夜免费高清久久影院| 国产欧美久久一区二区| 精品无码人妻久久久久久|