• <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)德,非澹薄無以明志,非寧靜無以致遠(yuǎn)。
            隨筆 - 397, 文章 - 0, 評論 - 196, 引用 - 0
            數(shù)據(jù)加載中……

            Reids集群的Redis Cluster模式

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

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

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

            ⑥ 檢查集群:任意連接一個(gè)集群節(jié)點(diǎn),進(jìn)行集群狀態(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é)點(diǎn)個(gè)數(shù)的分配情況

            redis-cli --cluster info ip:port

            ⑧ 修復(fù)集群:修復(fù)集群和槽的重復(fù)分配問題

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

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

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

            ⑩ 集群中執(zhí)行相關(guān)命令:連接到集群的任意一節(jié)點(diǎn)來對整個(gè)集群的所有節(jié)點(diǎn)進(jìn)行設(shè)置。

            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 新增了幾個(gè)命令:fix 的子命令:--cluster-fix-with-unreachable-masters

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

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

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

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

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



             






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

            久久夜色撩人精品国产| 久久高潮一级毛片免费| 久久亚洲高清综合| 久久91精品国产91久久户| 久久久久免费精品国产| 热RE99久久精品国产66热| 久久99精品久久久久久水蜜桃| 国产一区二区三区久久精品| 日韩精品无码久久久久久| 欧美一区二区三区久久综合 | 午夜不卡久久精品无码免费| 一级做a爰片久久毛片毛片| 色99久久久久高潮综合影院| 免费精品久久久久久中文字幕| 99久久国产免费福利| 久久精品国产清自在天天线| 热RE99久久精品国产66热| 色狠狠久久综合网| 久久WWW免费人成一看片| 亚洲精品美女久久久久99| 嫩草伊人久久精品少妇AV| 精品久久久久久久无码| 久久精品一区二区| 久久久久九国产精品| 日本WV一本一道久久香蕉| 无码人妻久久一区二区三区免费丨 | 亚洲精品无码久久毛片| 久久www免费人成看片| 久久精品国产亚洲AV香蕉| 秋霞久久国产精品电影院| 久久精品国产亚洲Aⅴ香蕉| 三级片免费观看久久| 久久久免费精品re6| 国产成人精品久久亚洲高清不卡| 色婷婷综合久久久久中文字幕| 久久亚洲AV成人无码软件| 国产精品久久久久影视不卡| 久久天天躁狠狠躁夜夜2020老熟妇 | 四虎国产精品免费久久5151| 少妇被又大又粗又爽毛片久久黑人 | 人人狠狠综合久久亚洲88|