




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、干貨:一文輕松搞懂Redis集群原理核心內(nèi)容這里總結(jié)一下redis集群的搭建以便日后所需同時也希望能對你有所 幫助。一、redis的安裝Redis是c語言開發(fā)的。安裝redis需要c語言的編譯環(huán)境。如果沒有gcc需要在線安裝:yum install gcc-c+第一步: 獲 取 源 碼 包:wget :/download.redis.io/releases/redis-3.0.0.tar.gz第二步: 解壓縮 redis: tar zxvf redis-3.0.0.tar.gz第三步:編譯。進入redis源碼目錄(cd redis-3.0.0)。執(zhí)行make第 四步:安裝。make insta
2、ll PREFIX=/usr/local/redisPREFIX參數(shù)指定redis的安裝目錄。一般軟件安裝到/usr目錄 下這樣Redis就成功裝在了我們的usr/local/redis目錄下。第五步:設置后臺啟動:rootlocalhost redis-3.0.0# cp redis.conf /usr/local/redis/bin/(把/root/redis-3.0.0/redis.conf 復制到/usr/local/redis/bin 目錄下)修改配置文件:把daemonize后面的參數(shù)改為yes測試啟動:rootlocalhost bin#./redis-server redis.
3、conf查看 redis 進程:rootlocalhost bin#ps aux|grep redis二、集群原理一個系統(tǒng)建立集群主要需要解決兩個問題:數(shù)據(jù)同步問題和集群容錯問題。三、Naive方案一個簡單粗暴的方案是部署多臺一模一樣的Redis服務,再用 負載均衡來分攤壓力以及監(jiān)控服務狀態(tài)。這種方案的優(yōu)勢在于容錯簡 單,只要有一臺存活,整個集群就仍然可用。但是它的問題在于保證 這些Redis服務的數(shù)據(jù)一致時,會導致大量數(shù)據(jù)同步操作,反而影響 性能和穩(wěn)定性。四、Redis集群方案Redis集群方案基于分而治之的思想。Redis中數(shù)據(jù)都是以 Key-Value形式存儲的,而不同Key的數(shù)據(jù)之間是
4、相互獨立的。因此 可以將Key按照某種規(guī)則劃分成多個分區(qū),將不同分區(qū)的數(shù)據(jù)存放 在不同的節(jié)點上。這個方案類似數(shù)據(jù)結(jié)構(gòu)中哈希表的結(jié)構(gòu)。在Redis 集群的實現(xiàn)中,使用哈希算法(公式是CRC16(Key) mod 16383)將 Key映射到016383范圍的整數(shù)。這樣每個整數(shù)對應存儲了若干個 Key-Value數(shù)據(jù),這樣一個整數(shù)對應的抽象存儲稱為一個槽(slot)。 每個Redis Cluster的節(jié)點準確講是master節(jié)點負責一定范圍的槽,所有節(jié)點組成的集群覆蓋了 016383整個范圍的槽。據(jù)說任何計算機問題都可以通過增加一個中間層來解決。槽的 概念也是這么一層。它介于數(shù)據(jù)和節(jié)點之間,簡化了
5、擴容和收縮操作 的難度。數(shù)據(jù)和槽的映射關系由固定算法完成,不需要維護,節(jié)點只 需維護自身和槽的映射關系。五、Slave上面的方案只是解決了性能擴展的問題,集群的故障容錯能力 并沒有提升。提高容錯能力的方法一般為使用某種備份/冗余手段。 負責一定數(shù)量的槽的節(jié)點被稱為master節(jié)點。為了增加集群穩(wěn)定性, 每個master節(jié)點可以配置若干個備份節(jié)點稱為slave節(jié)點。Slave節(jié)點一般作為冷備份保存master節(jié)點的數(shù)據(jù),在master節(jié)點宕機時 替換master節(jié)點。在一些數(shù)據(jù)訪問壓力比較大的情況下,slave節(jié)點 也可以提供讀取數(shù)據(jù)的功能,不過slave節(jié)點的數(shù)據(jù)實時性會略差一 下。而寫數(shù)據(jù)的
6、操作則只能通過master節(jié)點進行。六、請求重定向當Redis節(jié)點接收到對某個key的命令時,如果這個key對應 的槽不在自己的負責范圍內(nèi),則返回MOVED重定向錯誤,通知客 戶端到正確的節(jié)點去訪問數(shù)據(jù)。如果頻繁出現(xiàn)重定向錯誤,勢必會影響訪問的性能。由于從key 映射到槽的算法是固定公開的,客戶端可以在內(nèi)部維護槽到節(jié)點的映 射關系,訪問數(shù)據(jù)時可以自己通過key計算出槽,然后找到正確的節(jié) 點,減少重定向錯誤。目前大部分開發(fā)語言的Redis客戶端都會實現(xiàn) 這個策略。這個地址s:/redis.io/clients可以查看主流語言的Redis客 戶端。七、節(jié)點通信盡管不同節(jié)點存儲的數(shù)據(jù)相互獨立,這些節(jié)
7、點仍然需要相互通 信以同步節(jié)點狀態(tài)信息。Redis集群采用P2P的Gossip協(xié)議,節(jié)點之 間不斷地通信交換信息,最終所有節(jié)點的狀態(tài)都會達成一致。常用的 Gossip消息有下面幾種:01、ping消息:每個節(jié)點不斷地向其他節(jié)點發(fā)起ping消息,用 于檢測節(jié)點是否在線和交換節(jié)點狀態(tài)信息。02、pong消息:收到ping、meet消息時的響應消息。03、meet消息:新節(jié)點加入消息。04、fail消息:節(jié)點下線消息。05、forget消息:忘記節(jié)點消息,使一個節(jié)點下線。這個命令必 須在60秒內(nèi)在所有節(jié)點執(zhí)行,否則超過60秒后該節(jié)點重新參與消息 交換。實踐中不建議直接使用forget命令來操作節(jié)點下
8、線。八、節(jié)點下線當某個節(jié)點出現(xiàn)問題時,需要一定的傳播時間讓多數(shù)master節(jié) 點認為該節(jié)點確實不可用,才能標記標記該節(jié)點真正下線。Redis集 群的節(jié)點下線包括兩個環(huán)節(jié):主觀下線(pfail)和客觀下線(fail)。01、主觀下線:當節(jié)點A在cluster-node-timeout時間內(nèi)和節(jié)點 B通信(ping-pong消息)一直失敗,則節(jié)點A認為節(jié)點B不可用, 標記為主觀下線,并將狀態(tài)消息傳播給其他節(jié)點。02、客觀下線:當一個節(jié)點被集群內(nèi)多數(shù)master節(jié)點標記為主 觀下線后,則觸發(fā)客觀下線流程,標記該節(jié)點真正下線。九、故障恢復一個持有槽的master節(jié)點客觀下線后,集群會從slave節(jié)點中
9、 選出一個提升為master節(jié)點來替換它。Redis集群使用選舉-投票的算 法來挑選slave節(jié)點。一個slave節(jié)點必須獲得包括故障的master節(jié) 點在內(nèi)的多數(shù)master節(jié)點的投票后才能被提升為master節(jié)點。假設 集群規(guī)模為3主3從,則必須至少有2個主節(jié)點存活才能執(zhí)行故障恢 復。如果部署時將2個主節(jié)點部署到同一臺服務器上,則該服務器不 幸宕機后集群無法執(zhí)行故障恢復。默認情況下,Redis集群如果有master節(jié)點不可用,即有一些 槽沒有負責的節(jié)點,則整個集群不可用。也就是說當一個master節(jié) 點故障,到故障恢復的這段時間,整個集群都處于不可用的狀態(tài)。這 對于一些業(yè)務來說是不可忍受的
10、??梢栽谂渲弥袑?cluster-require-full-coverage配置為no,那么master節(jié)點故障時只會影 響訪問它負責的相關槽的數(shù)據(jù),不影響對其他節(jié)點的訪問。十、搭建集群啟動新節(jié)點修改Redis配置文件以啟動集群模式:#開啟集群模式cluster-enabled yes #節(jié)點超時時間,單位毫秒 cluster-node-timeout 15000 # 集群節(jié)點信息文件 cluster-config-file nodes-6379.conf然后啟動新節(jié)點。發(fā)送meet消息將節(jié)點組成集群使用客戶端發(fā)起命令cluster ip port,節(jié)點會發(fā)送meet消息將指 定IP和端口的新
11、節(jié)點加入集群。十一、分配槽上一步執(zhí)行完后我們得到的是一個還沒有負責任何槽的“空”集 群。為了使集群可用,我們需要將16384個槽都分配到master節(jié)點 數(shù)。在客戶端執(zhí)行cluster add addslots a.b命令,將ab范圍的槽 都分配給當前客戶端所連接的節(jié)點。將所有的槽都分配給master節(jié) 點后,執(zhí)行cluster nodes命令,查看各個節(jié)點負責的槽,以及節(jié)點的 ID。接下來還需要分配slave節(jié)點。使用客戶端連接待分配的slave 節(jié)點,執(zhí)行cluster replicate nodeld命令,將該節(jié)點分配為nodeld指定 的master節(jié)點的備份。十二、使用命令直接創(chuàng)建集
12、群在Redis 5版本中redis-cli客戶端新增了集群操作命令。如下所示,直接使用命令創(chuàng)建一個3主3從的集群:redis-cli -cluster create 127.0.0.1:7000127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003127.0.0.1:7004 127.0.0.1:7005 -cluster-replicas 1如果你用的是舊版本的Redis,可以使用官方提供的redis-trib.rb 腳本來創(chuàng)建集群:./redis-trib.rb create -replicas 1 127.0.0.1:7000 127.0.0.1:700
13、1 127.0.0.1:7002 127.0.0.1:7003十三、集群伸縮1、擴容127.0.0.1:7004 127.0.0.1:7005擴容操作與創(chuàng)建集群操作類似,不同的在于最后一步是將槽從已有的節(jié)點遷移到新節(jié)點。01、啟動新節(jié)點:同創(chuàng)建集群。02、將新節(jié)點加入到集群:使用redis-cli -cluster add-node命令 將新節(jié)點加入集群(內(nèi)部使用meet消息實現(xiàn))。03、遷移槽和數(shù)據(jù):添加新節(jié)點后,需要將一些槽和數(shù)據(jù)從舊 節(jié)點遷移到新節(jié)點。使用命令redis-cli -cluster reshard進行槽遷移操 作。2、收縮為了安全刪除節(jié)點,Redis集群只能下線沒有負責槽的
14、節(jié)點。因 此如果要下線有負責槽的master節(jié)點,則需要先將它負責的槽遷移 到其他節(jié)點。01、遷移槽:使用命令redis-cli -cluster reshard將待刪除節(jié)點的 槽都遷移到其他節(jié)點。02、忘記節(jié)點:使用命令redis-cli -cluster del-node刪除節(jié)點(內(nèi) 部使用forget消息實現(xiàn))。十四、集群配置工具如果你的redis-cli版本低于5,那么可以使用redis-trib.rb腳本 來完成上面的命令。點擊這里查看redis-cli和redis-trib.rb操作集群的 命令。持久化Redis有RDB和AOF兩種持久化策略。一個RDB持久化的坑RDB持久化神坑:即使設置了 save試圖關閉RDB,然而RDB持久化仍然有可能 會觸發(fā)。從節(jié)點全量復制(比如新增從節(jié)點時),主節(jié)點觸發(fā)RDB持久 化產(chǎn)生RDB文件。然后發(fā)送RDB文件給從節(jié)點。最后該從節(jié)點和對 應的主節(jié)點都會有RDB文件。執(zhí)行shutdown時,如果沒有開啟AOF,也會觸發(fā)RDB持久化。不管save如何設置,只要RDB文件存在,redis啟動
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 短期倉庫租賃合同2025
- 自建房買賣合同模板
- 吉林省長春市外國語學校2024-2025學年高三5月綜合試題數(shù)學試題含解析含解析
- 嘉峪關市重點中學2024-2025學年高三第二學期期中練習(一模)生物試題試卷含解析
- 新疆兵團八師一四三團一中2024-2025學年高考模擬試題含解析
- 山東畜牧獸醫(yī)職業(yè)學院《數(shù)字錄像》2023-2024學年第一學期期末試卷
- 徐州工業(yè)職業(yè)技術學院《數(shù)據(jù)結(jié)構(gòu)》2023-2024學年第二學期期末試卷
- 長春師范高等??茖W校《工程項目融資》2023-2024學年第二學期期末試卷
- 四川省成都市2025年高三開學摸底聯(lián)考物理試題試卷含解析
- 泰山職業(yè)技術學院《醫(yī)患關系及溝通技巧》2023-2024學年第二學期期末試卷
- 江西卷-2025屆高考歷史4月模擬預測卷(解析版)
- bim安全教育試題及答案
- 婦科管理制度
- 初中數(shù)學課標培訓
- 2025年濟源職業(yè)技術學院單招職業(yè)技能測試題庫附答案
- 《浙江省中藥飲片炮制規(guī)范》 2015年版
- GB 19762-2025離心泵能效限定值及能效等級
- 廣東省清遠市清新區(qū)2025年中考一模語文試題(含答案)
- ISO9001-2015版質(zhì)量管理體系標準培訓教程
- 人教部編版初中語文七年級下冊 《15.青春之光》課件
- 2025中國海洋石油集團有限公司校園招聘筆試參考題庫附帶答案詳解
評論
0/150
提交評論