IT技術(shu)互動交流平台

吉林体彩网官网

作者︰lpxxn  來源︰IT165收(shou)集  發布日期(qi)︰2020-02-26 01:40:24
上一篇(pian)︰http://www.cnblogs.com/li-peng/p/6143709.html   官方原文地址︰https://redis.io/topics/cluster-tutorial    水(shui)平jie)邢蓿 ru)果您(nin)在閱讀過程中發現有翻譯的不(bu)合理的地方,請留言,我(wo)會盡快(kuai)修改,謝謝。      使用create-cluster角本創建Redis集群      如(ru)果你不(bu)想(xiang)通過配置來創建Redis集群並且不(bu)想(xiang)向上邊闡明的一樣手動的去執行(xing)單獨(du)的實例,這里還(huai)有更簡單的系統(但是(shi)你將不(bu)會學到等量(liang)的操作細節)      只需(xu)查(cha)看在Redis發行(xing)版本中的utils/create-cluster目(mu)錄。在里面(mian)有一個叫 create-cluster的角本(和包含他(ta)的目(mu)錄名稱(chen)一樣),為了啟動包含3個主節點和3個從(cong)節點的6節點集群,只需(xu)輸入下面(mian)的命(ming)令︰      1.create-cluster start      2.create-cluster create      在第2步當redis-trib實用工具程序想(xiang)讓你接(jie)受(shou)集群的布局時答復為yes.      現在你可以和你的集群進(jin)行(xing)交互了,第一個節點將默認使用30001端口啟動。當你操作完(wan)後,使用下面(mian)的命(ming)令停止(zhi)集群︰      1.create-cluster stop      請閱讀此目(mu)錄內(na)的README文件,以獲得有關如(ru)何運行(xing)角本的更多信息。            和tu) 和嫠/strong>      在這個階段Redis集群有一個問題是(shi)缺少客戶端庫實現。      下面(mian)是(shi)我(wo)知(zhi)道的實現︰      > redis-rb-cluster是(shi)我(wo)(@antirez)用Ruby實現zhi)模 鑫 淥yu)言的參(can)考。這是(shi)圍繞(rao)原始的redis-rb的簡單包裝,高效實現了和tu) 和ㄐ諾淖鐶∮yu)義。      > redis-py-clusterredis-rb-cluster的Python移植版本,支(zhi)持redis-py的絕大部分(fen)zhi)δ塴;huai)處于積極開(kai)發中。      > 流行(xing)的  Predis現在也支(zhi)持Redis集群,該支(zhi)持最近剛更新過,並且還(huai)在積極開(kai)發中。      > 使用最多的java客戶端, Jedis最近新增了對Redis集群的支(zhi)持,在項目(mu)README里查(cha)看 Jedis Cluster 章(zhang)節。      > StackExchange.Redis 提(ti)供對C#的支(zhi)持(並且適用于大多數.NET語(yu)言; VB, F#等)      > redis-go-cluster 提(ti)供對Node.js和io.js的支(zhi)持,它是(shi)基于thunk/promise的redis客戶端並含有管道和tu) 骸     > redis-go-cluster是(shi)使用 Redigo library client做為基本客戶端的Go語(yu)言的Redis集群實現,通過結果聚合實現MGET/MSET。      > 在GitHub上Redis unstable分(fen)支(zhi)內(na)的redis-cli實用工具在使用-c開(kai)關啟動時實現了最基本的集群支(zhi)持。      測試Redis集群 最簡單的方式(shi)是(shi)嘗試使用上述任(ren)wo)庖恢摯突?耍 蛘咧皇shi)redis-cli命(ming)令行(xing)工具。      下面(mian)是(shi)使用redis-cli的交互示例︰
$ redis-cli -c -p 7000redis 127.0.0.1:7000> set foo bar-> Redirected to slot [12182] located at 127.0.0.1:7002OKredis 127.0.0.1:7002> set hello world-> Redirected to slot [866] located at 127.0.0.1:7000OKredis 127.0.0.1:7000> get foo-> Redirected to slot [12182] located at 127.0.0.1:7002'bar'redis 127.0.0.1:7000> get hello-> Redirected to slot [866] located at 127.0.0.1:7000'world'
       注意︰如(ru)果你使用角本創建的集群,你的節點可能監(jian)听不(bu)同的端口,默認情況(kuang)下從(cong)30001開(kai)始。      redis-cli對集群的支(zhi)持是(shi)非常基本的,所(suo)以他(ta)總是(shi)使用Redis集群節點將客戶端重定向一個到正確節點。一個完(wan)善(shan)的mu)突?絲梢宰齙母hao),並且緩存(cun)hash槽(cao)和節點地址的映射,用于直接(jie)使用正確的連接(jie)到正確的節點。這個映射只有在集群配置有變動時才會被刷新,例如(ru)故shou)獻 浦zhi)後或者系統管理員通過地址修改集群層或移除(chu)節點之(zhi)後。      編(bian)寫一個redis-rb-cluster實例程序      在展示如(ru)何操作redis集群,像這些執行(xing)故shou)獻 疲 蛘咧匭路(lu)制resharding)之(zhi)前, 我(wo)們需(xu)要創建一些示例程序,至少能明白簡單的Redis集群客戶端交互語(yu)義。      這樣我(wo)們可以運行(xing)一個示例同時嘗試讓節點發生故shou)希 蛘嚦kai)始重新lu)制resharding),以了解在真(zhen)實環(huan)境中Redis集群的行(xing)為。這對za)諏私獾奔 好(hao)揮行(xing)慈朊ming)令時發生了什(shi)麼不(bu)是(shi)非常有幫助(zhu)。      本節使用兩個示例來解釋redis-rb-cluster的基本用法(fa)。下面(mian)是(shi)第一個,它是(shi)redis-rb-cluster發行(xing)版本內(na)的example.rb文件。        
 1 require './cluster' 2 3 if ARGV.length != 2 4 startup_nodes = [ 5  {:host => '127.0.0.1', :port => 7000}, 6  {:host => '127.0.0.1', :port => 7001} 7 ] 8 else 9 startup_nodes = [ 10  {:host => ARGV[0], :port => ARGV[1].to_i} 11 ] 12 end 13 14 rc = RedisCluster.new(startup_nodes,32,:timeout => 0.1) 15 16 last = false 17 18 while not last 19 begin 20  last = rc.get('__last__') 21  last = 0 if !last 22 rescue => e 23  puts 'error #{e.to_s}' 24  sleep 1 25 end 26 end 27 28 ((last.to_i+1)..1000000000).each{x 29 begin 30  rc.set('foo#{x}',x) 31  puts rc.get('foo#{x}') 32  rc.set('__last__',x) 33 rescue => e 34  puts 'error #{e.to_s}' 35 end 36 sleep 0.1 37 }
     這個程序做了非常簡單的事情,他(ta)以foo<number>的形式(shi),一個接(jie)一個的設置鍵值(zhi)為number,所(suo)以如(ru)果你運行(xing)這個程序它的結果是(shi)下面(mian)的命(ming)令流︰      SET foo0 0      SET foo1 1      SET foo2 2      And so forth...        這個程序看起來比通常應用更復雜(za),因(yin)為他(ta)被設計(ji)為在屏幕上顯示錯(cuo)誤信息,而(er)不(bu)是(shi)發生異常退(tui)出,所(suo)以每一個與集群執行(xing)的操作都被包在begin recue塊(kuai)中。      在程序中第14行(xing)代碼是(shi)第一處有意思的地方,他(ta)創建了Redis集群對象,使用啟動節點(startup nodes )列表作為參(can)數,允許連接(jie)這個對象對za)Σbu)同節點的最大數量(liang),最後在給定的操作超後被認為故shou)。      啟動節點不(bu)需(xu)要集群內(na)的所(suo)有節點。重要的是(shi)至少有一個節點是(shi)可訪問的。注意只要redis-rb-cluster能連接(jie)到一個節點就會更新啟動列表。你應該期(qi)待其他(ta)嚴格的mu)突?艘燦姓庋男xing)為。      現在我(wo)們已經有Redis集群對象的實例保存(cun)在rc變量(liang)中,我(wo)們準備(bei)好(hao)象使用一般(ban)的redis對象實例一樣使用這個對象。      這是(shi)確實發生在 18 到 26行(xing)︰當我(wo)們重啟個這示例,面(mian)不(bu)想(xiang)重新從(cong)foo0開(kai)始,所(suo)以我(wo)們把這個計(ji)數保存(cun)在Redis內(na)。上面(mian)的代碼被設計(ji)為讀取這個計(ji)數器,或者如(ru)果這個計(ji)數器不(bu)存(cun)在,就設置為0.      然而(er)注意他(ta)是(shi)一個怎樣的while循(xun)環(huan),由于我(wo)們想(xiang)一次又一次的嘗試,即使集群已關閉(bi)並且返回錯(cuo)誤。不(bu)般(ban)的應用程序不(bu)需(xu)要這麼小心。      28到37行(xing)開(kai)始主要的的循(xun)環(huan),循(xun)環(huan)里設置鍵值(zhi)或者顯示錯(cuo)誤信息。      注意在循(xun)環(huan)的最後調用了sleep。在你的測試中如(ru)果你想(xiang)寫入到集群的速(su)度足夠快(kuai)那(na)就把sleep去掉(相對za)誑kuai)這里只是(shi)一個頻(pin)繁的循(xun)環(huan),當然不(bu)是(shi)真(zhen)正的並發,這樣在最好(hao)的狀態下,你通常會得到10k ops/s)。      一般(ban)情況(kuang)下對za)謔糾絛蚰莧菀椎謀蝗ren)類跟(gen)隨(sui)會把寫入速(su)度放慢。      開(kai)始這個應用程序後就產生下面(mian)的輸出︰
ruby ./example.rb123456789^C (I stopped the program here)
     這不(bu)是(shi)一個非常有趣的程序,我(wo)們一會兒會使用一個更好(hao)的,但是(shi)我(wo)們已經可以看到在程序運行(xing)起來後在分(fen)片期(qi)間發生了什(shi)麼chu)  集群的重新lu)制Resharding)      現在我(wo)們準備(bei)嘗試集群的重新lu)制 N 誦xu)要example.rb程序保持運行(xing),因(yin)此可以看到是(shi)否(fu)對程序運行(xing)過程中有影響。同樣的在分(fen)片期(qi)間為了更嚴格的寫入負載(zai)你可能可能想(xiang)注釋掉sleep調用。      重新lu)制 舊弦 蹲虐壓2cao) 從(cong)一組節點移動到另一組節點,就像使用redis-trib實用工具完(wan)成集群的創建一樣。      只需(xu)輸入下面(mian)的代碼就可以開(kai)始重新lu)制 nbsp;
./redis-trib.rb reshard 127.0.0.1:7000
     你唯一需(xu)要做的就是(shi)指(zhi)定一個節點,redis-trib會自動的找到其他(ta)的節點。      一般(ban)情況(kuang)下需(xu)要管理員的支(zhi)持reids-trib才能重新lu)制你不(bu)能說只從(cong)這個節點移動槽(cao)的5%到其它節點(但是(shi)這是(shi)很空間實現zhi)模 Ksuo)以從(cong)詢問開(kai)始。第一是(shi)你想(xiang)要做多大的分(fen)片︰
How many slots do you want to move (from 1 to 16384)?

     我(wo)們可以嘗試對1000個哈希槽(cao)分(fen)片,如(ru)果示例依然在不(bu)調用sleep的na)榭kuang)下運行(xing),那(na)麼它已經包含了一些重要的鍵。

     這時,redis-trib需(xu)要知(zhi)道分(fen)片的目(mu)標什(shi)麼是(shi) 。也就是(shi)說將要接(jie)收(shou)哈希槽(cao)的節點。我(wo)將使用第一個主節點,也就是(shi)127.0.0.1︰7000,但是(shi)我(wo)需(xu)要指(zhi)定實例的節點ID。通過redis-trib已經在一個列表內(na)打印出來了,但是(shi)如(ru)果需(xu)要我(wo)經常使用下面(mian)的命(ming)令來找節點的ID︰
$ redis-cli -p 7000 cluster nodes grep myself97a3a64667477371c4479320d683e4c8db5858b1 :0 myself,master - 0 0 0 connected 0-5460

     ok所(suo)以我(wo)們的目(mu)標節點是(shi) 97a3a64667477371c4479320d683e4c8db5858b1.

     現在你會得到一個詢問你想(xiang)從(cong)哪些節點來取這些鍵,為了能從(cong)其它所(suo)有的主節點取出一些哈希槽(cao)我(wo)只需(xu)輸入all.      在最後的配置後,你會看到每一個redis-trib要從(cong)一個節點移動到另一個節點的槽(cao)的信息,並且會為每一個從(cong)一個節點移動到另一個節點的實際的鍵打印一個點。      在分(fen)片過程中你會看到對你運行(xing)中的示例是(shi)沒有影響的。在分(fen)片期(qi)間,只要你想(xiang),你可以多次停止(zhi)或重啟你的示例程序 。      分(fen)片結束後,你可以使用下面(mian)的命(ming)令來測試集群的健康︰      通常將覆蓋(gai)所(suo)有的槽(cao),但這些主節點127.0.0.1︰7000 將有更多的哈希槽(cao),大約為6461.      
Tag標簽︰集群  教程  個人(ren)  
  • 吉林体彩网官网

About IT165 - 廣告服務 - 隱私聲明 - 版權申明 - 免責條(tiao)款(kuan) - 網站地圖(tu) - 網友投稿 - 聯(lian)系方式(shi)
本站內(na)容來自za)諢?lian)網,僅供用于網絡技術(shu)學習(xi),學習(xi)中請遵循(xun)相關法(fa)律法(fa)規
吉林体彩网官网 | 下一页