Redis 必備知識總結(jié)(基礎(chǔ)知識 架構(gòu) 調(diào)優(yōu)和監(jiān)控知識及難點(diǎn)解決)_第1頁
Redis 必備知識總結(jié)(基礎(chǔ)知識 架構(gòu) 調(diào)優(yōu)和監(jiān)控知識及難點(diǎn)解決)_第2頁
Redis 必備知識總結(jié)(基礎(chǔ)知識 架構(gòu) 調(diào)優(yōu)和監(jiān)控知識及難點(diǎn)解決)_第3頁
Redis 必備知識總結(jié)(基礎(chǔ)知識 架構(gòu) 調(diào)優(yōu)和監(jiān)控知識及難點(diǎn)解決)_第4頁
Redis 必備知識總結(jié)(基礎(chǔ)知識 架構(gòu) 調(diào)優(yōu)和監(jiān)控知識及難點(diǎn)解決)_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

分是證州eet01的AEQ\*jc3\*hps13\o\al(\s\up2(e),)起0多8器n個可以理解為注冊的一段函數(shù),定義了事件發(fā)生的時候應(yīng)該執(zhí)行的動作),這里定期刪除指的是redis默認(rèn)每100ms就隨機(jī)抽取一些設(shè)置了過期事件的key,檢查是否過期,如果過期就刪除。如果redis設(shè)置了10萬個key都設(shè)置了過期時間,每隔幾百毫秒就要檢查10萬個key那CPU負(fù)載就很高了,所以redis并不會每隔100ms就檢查所有的key,而是隨機(jī)抽取這兩個策略結(jié)合起來保證過期的key一定會被刪除。pnyneTranamtADB部分間步注冊積壓函數(shù)事件連接主機(jī)哨兵+主從的部署架構(gòu)是用來保證redismaster宕機(jī)的時候,sl和s2切換,并且會從s1和s2中選取一個來進(jìn)行故障轉(zhuǎn)移。這個時候是需要滿足majority,也就是大多數(shù)哨兵是運(yùn)行的,2個哨兵的majority是2,如果2個哨兵都運(yùn)行著就允許執(zhí)行故障轉(zhuǎn)移。如果M1所在的機(jī)器宕機(jī)了,那么s1哨兵也就掛了,只剩s2一個,沒有majorityl來允許執(zhí)行故障轉(zhuǎn)移,雖然集群還有一臺機(jī)此時majority也是2,就算M1所在的機(jī)器宕機(jī)了,哨兵還是剩下兩個s2和s3,它們滿足majority就可以允許故障轉(zhuǎn)移執(zhí)行。哨兵核心底層原理sdown是主觀宕機(jī),就是一個哨兵覺得master宕機(jī)了,達(dá)成條件是如果一個哨兵pingmaster超過了is-master-down-after-milliseconds指定的毫秒數(shù)后就認(rèn)為odown是客觀宕機(jī),如果一個哨兵在指定時間內(nèi)收到了majority(大多數(shù))數(shù)量的哨兵也認(rèn)為那個master宕機(jī)了,就是客觀宕機(jī)。哨兵之間的互相發(fā)現(xiàn):哨兵是通過redis的pub/sub實(shí)現(xiàn)的。5.Redis數(shù)據(jù)的恢復(fù)(Redis的持久化)RDB(RedisDataBase)是將某一個時刻的內(nèi)存快照(Snapshot),以二進(jìn)制的方式寫入磁盤的過程。RDB有兩種方式save和bgsave:save:執(zhí)行就會觸發(fā)Redis的持久化,但同時也是使Redis處于阻塞狀態(tài),直到RDB持久化完成,才會響應(yīng)其他客戶端發(fā)來的命令;bgsave:bgsave會fork)一個子進(jìn)程來執(zhí)行持久化,整個過程中只有在fork)子進(jìn)程時有短暫的阻塞,當(dāng)子進(jìn)程被創(chuàng)建之后,Redis的主進(jìn)程就可以響應(yīng)其他客戶端的請求了。RDB配置除了使用save和bgsave命令觸發(fā)之外,RDB支持自動觸發(fā)策略可配置Redis在指定的時間內(nèi),數(shù)據(jù)發(fā)生了多少次變化時,會自動執(zhí)行bgsave命令。在redis配置文件中配置:在時間m秒內(nèi),如果Redis數(shù)據(jù)至少發(fā)生了n次變化,那么就自動執(zhí)行BGSAVE命令。RDB優(yōu)缺點(diǎn)相對于AOF,直接基于RDB來恢復(fù)reids數(shù)據(jù)更快。提供服務(wù),暫停數(shù)秒(主進(jìn)程需要拷貝自己的內(nèi)存表所有數(shù)據(jù)變更(主進(jìn)程還在服務(wù)),并存儲在server.aof_rewrite_buf_blocks中;everysec:主線程每次寫操作只寫內(nèi)存就返回,然后由后臺線程每隔1秒執(zhí)宕機(jī)時會丟失1秒的數(shù)據(jù);100,上一版本的aof文件大小為100M,那么當(dāng)我們的aof文件達(dá)到200M的時auto-aof-rewite-min-size:最小能容忍aof文件大小,超過這個大小必須進(jìn)行no-appendfsync-on-re暫時存在內(nèi)存中,等rewrite完成后fsync(強(qiáng)制刷新磁盤頁緩存),最多丟失1s的數(shù)據(jù);AOF即使文件很大,觸發(fā)后臺rewrite的操作的時候一般也不會影響客戶端主線程主線程磁盤AOF文件當(dāng)磁盤的I0負(fù)載很高,那這個后臺線程在執(zhí)行AOFf戶端的請求,可能會導(dǎo)致客戶端請求redis超生,就可以立即拷貝AOF,將最后一條flushall命令刪除,再回放AOF恢復(fù)數(shù)損壞或不可用的時候還可以使用RDB來快速署,橫向擴(kuò)展Redis集群的能力。RedisCluster支持N個masternode,每個rediscluster模式下,每個redis要開放兩個端口:6379和10000+以后的端口(如16379)。16379是用來節(jié)點(diǎn)之間通信的,使用的是clusterbus集群總線。rediscluster采用一致性hash+虛擬節(jié)點(diǎn)來負(fù)載均衡。rediscluster有固定的16384個slot(2^14),對每個key做CRC16值計算,然后對16384mod??梢垣@取么每個master就會持有5000多個slot。hashslot讓node的添加和刪除變得很簡rediscluster主備切換與高可用宕機(jī)。如果多個節(jié)點(diǎn)認(rèn)為一個節(jié)點(diǎn)宕機(jī),那就是fail,客觀宕機(jī)。跟哨兵的原理前會進(jìn)行一次過濾,檢查每個slave與master的斷開時間,如果超過了cluster-node-timeout*cluster-slave-v效果:每臺機(jī)器最高峰每秒大概5W,5臺機(jī)器最多就是master下掛載了3個slave,如果master由于網(wǎng)絡(luò)抖動被哨兵認(rèn)為宕機(jī)了,又恢復(fù)了,剛好又有client連的還是老的master,就會產(chǎn)生腦裂,數(shù)redis對此的解決方案是:min-slaves-to-write1至少有一個slave連接用一個io周期得到的就緒io事件越多,處理的就越多。這也不是絕對的,如果調(diào)優(yōu)、監(jiān)控知識和10個具體應(yīng)用難點(diǎn)。noeviction:返回錯誤當(dāng)內(nèi)存限制達(dá)到并且客戶端嘗試執(zhí)行會讓更多內(nèi)存被使用的命令(大部分的寫入指令,但DEL和幾個例外)volatile-random:回收隨機(jī)的鍵使得新添加的數(shù)據(jù)有空間存放,但僅限于在5、Redis集群方案應(yīng)該怎么做?都有哪些方案?的壓力,使用一致性hash后,對redis節(jié)點(diǎn)數(shù)量改變時候的計算值的改變,數(shù)據(jù)是hash槽的概念,以及自身支持節(jié)點(diǎn)設(shè)置從節(jié)點(diǎn)。具體看官方文檔行hash計算,然后去對應(yīng)的redis實(shí)例操作數(shù)據(jù)。那么整個集群就會以為缺少5501-11000這個范圍的槽而不可用。8、說說Redis哈希槽的概念?16384個哈希槽,每個key通過CRC16校驗(yàn)后對16384取模來決定放置哪個槽,10、Redis集群會有寫操作丟失嗎?為什么?盡可能使用散列表(hashes),散列表(是說散列表里面存儲的數(shù)少)使用個新的鍵),不用多久內(nèi)存限制就會被這個內(nèi)存使用量超越。Redis2.6開始redis-cli支持一種新的被稱之為pipemode的新模式用于執(zhí)行大情況),必須使用可以在運(yùn)行時進(jìn)行數(shù)據(jù)再平衡的一套系統(tǒng),而當(dāng)前只有Redis21、分布式Redis是前期做還是后期規(guī)模上來了再做好?為什么?既然Redis是如此的輕量(單實(shí)例只使用1M內(nèi)存),為防止以后的擴(kuò)容,最一開始就多設(shè)置幾個Redis實(shí)例,例如32或者64個實(shí)例,對大多數(shù)用戶來就是僅僅將Redis實(shí)例從一臺服務(wù)遷移到另外一臺服務(wù)器而已(而不用考慮重新如果你使用的是32位的Redis實(shí)例,可以好好利用Hash,list,sortedset,set等使用,在某些時候,無論如何一個服務(wù)器是不夠的,所以,如果你想使用多個CPU,你可以考慮一下分片(shard)。理論上Redis可以處理多達(dá)232的keys,并且在實(shí)際中進(jìn)行了測試,每個實(shí)例至少存放了2億5千萬的keys。我們正在測試一些較大的值。任何list、set、和sortedset都可以放232個元素。網(wǎng)內(nèi)(5)主從復(fù)制不要用圖狀結(jié)構(gòu),用單向鏈表結(jié)構(gòu)更為穩(wěn)定,即:Master<-Slave1<-SlaveAOF持久化方式記錄每次對服務(wù)器寫的操作,當(dāng)服務(wù)器重啟的時候會重新到文件末尾。Redis還能對AOF文件進(jìn)行后臺重寫,使得AOF文件的體積不至優(yōu)先載入AOF文件來恢復(fù)原始的數(shù)據(jù),因?yàn)樵谕ǔG闆r下AOF最重要的事情是了解RDB和AOF持久化方式的不同,讓我們以RDB持久用兩種持久化功能。如果你非常關(guān)心你的數(shù)據(jù),但仍然可以承受數(shù)分鐘以內(nèi)的數(shù)據(jù)丟失,那么你可以只使用RDB持久化。有很多用戶都只使用AOF持久化,但并不推薦這種方式:因?yàn)槎〞r生成RDB快照(snapshot)非常便于進(jìn)行數(shù)據(jù)庫備份,并且RDB恢復(fù)數(shù)據(jù)集的速度也要比AOF恢復(fù)的速度要快,除此之外,使用RDB還可以避免之前提到的AOF程序30、修改配置不重啟Redis會實(shí)時生效嗎?針對運(yùn)行實(shí)例,有許多配置選項(xiàng)可以通過CONFIGSET命令進(jìn)行修改,而無需執(zhí)行任何形式的重啟。從Redis2.2開始,可以從AOF切換到RDB的快照持久性或其他方式而不需要重啟Redis。檢索‘CONFIGGET’命令獲取更多信息。但偶爾重新啟動是必須的,如為升級Redis程序到新的版本,或者當(dāng)你需要修改某些目前CONFIG命令還不支持的配置參數(shù)的時候。10個Redis架構(gòu)和運(yùn)維必懂的知識1、Redis常用高可用架構(gòu)有哪些?RedisSentinel集群+內(nèi)網(wǎng)DNS+自定義腳本RedisSentinel集群+VIP+自定義腳本封裝客戶端直連RedisSentinel端口JedisSentinelPool,適合JavaPHP基于phpredis自行封裝RedisSentinel集群+Keepalived/Haproxy2、Redis高可用架構(gòu)優(yōu)劣對比?一RedisSentinel集群+內(nèi)網(wǎng)DNS+自定義腳本秒級切換腳本自定義,架構(gòu)可控維護(hù)成本略高依賴DNS,存在解析延時Sentinel模式存在短時間的服務(wù)不可用一RedisSentinel集群+VIP+自定義腳本秒級切換腳本自定義,架構(gòu)可控對應(yīng)用透明維護(hù)成本略高Sentinel模式存在短時間的服務(wù)不可用一封裝客戶端直連RedisSentinel端口服務(wù)探測故障及時DBA維護(hù)成本低依賴客戶端支持SentinelSentinel服務(wù)器需要開放訪問權(quán)限對應(yīng)用有侵入性秒級切換維護(hù)成本高存在腦裂Sentinel模式存在短時間的服務(wù)不可用秒級切換對應(yīng)用透明部署簡單,維護(hù)成本低需要腳本實(shí)現(xiàn)切換功能存在腦裂(RedisCluster、Twemproxy、Codis優(yōu)劣對比見下個問題3、常見的Redis集群方案有哪些優(yōu)缺點(diǎn)?多個同構(gòu)Twemproxy(配置相同)同時工作,接受客戶端的請求,根據(jù)hash算法,轉(zhuǎn)發(fā)給對應(yīng)的Redis。Twitter內(nèi)部已放棄使用該方案,新使用的架構(gòu)未開源端Redis客戶端端分發(fā)Codis-Config的命令Codis-Config集成管理工具,有web界面無狀態(tài)代理,兼容Redis協(xié)議基于2.8版本,二次開發(fā)修改了Redis代碼,導(dǎo)致和官方無法同步,新特性P2P模式,無中心化。把key分成16384個slot,每個實(shí)例負(fù)責(zé)一部分slot。組件all-in-box,部署簡單,節(jié)約機(jī)器資源多鍵操作支持有限(驅(qū)動可以曲線救國)Redis首先它是一種內(nèi)存數(shù)據(jù)庫,最大的優(yōu)勢在于3、新接手一個復(fù)雜的Redis集群(Sent1、Redis實(shí)例中,存在大量的FIN_WAI這個狀態(tài)存在于主動發(fā)起斷開請求的一端,如果服務(wù)器存在大量的這個狀PS:線上Web客戶端用的什么語言?方法二:執(zhí)行redis-cli--latency化RDB的持久化需要vm.overcommit_memory=1,否則會持久化失敗故障時及時上機(jī),使用redis-climonitor打印出操作日志,然后分析(事后分和研發(fā)溝通,確認(rèn)是否有大Key在堵塞(大Key也可以在日常的巡檢中獲1、提高Redis內(nèi)存數(shù)據(jù)庫的性能,有哪些措施?使用scan代替keys,將遍歷RedisDB中所有key的操作放到客戶端來做避免使用O(N)復(fù)雜度的命令定期使用redis-cli--big-keys檢測大KeyRedis調(diào)優(yōu)、監(jiān)控知識和10個具體應(yīng)用難點(diǎn)單進(jìn)程單線程高性能服務(wù)器,恢復(fù)比較慢單機(jī)qps(秒并發(fā))可以達(dá)到10W,適銷大(低于物理內(nèi)存的3/5),不同命令延遲差別大,官方網(wǎng)站:(1)timeout參數(shù),非常需要關(guān)注,官方對t模式10000,一般情況下是夠了,但是在高并發(fā)海量訪問的時候,還是會出現(xiàn)客握手時進(jìn)入acceptqueue隊(duì)列的最大值,也就是send_Q,(4)重點(diǎn)提一下安全的參數(shù),requirepassfoobared個人認(rèn)為,如果你們覺得據(jù)。如果你開啟這個參數(shù),記得預(yù)留一些空間給系統(tǒng)很可能系統(tǒng)會被殺掉。針對這一點(diǎn),你可以通過info命令對used_memory和做些什么,是清除一些沒用的冷數(shù)據(jù),還是把Redis遷移到更強(qiáng)大的機(jī)器上去。持久化。如果因?yàn)槟愕臋C(jī)器或Redis本身的問題導(dǎo)致Redis崩潰了,那么你唯一的救命稻草可能就是dump出來的rdb文件了,所以,對Redisdump文件進(jìn)行監(jiān)控也是很重要的??梢酝ㄟ^對rdb_dump數(shù)據(jù)操作的時間,還可以通過對rdb_changes_since_last得如果這時候出現(xiàn)故障,會丟失(即已改變)多少數(shù)據(jù)。四、如何更好更合理的使用Redis——10個具體應(yīng)用難點(diǎn)解讀Redis然后再同步到Oracle,還是先寫Oracle然后的問題,那就是同樣有一份數(shù)據(jù),當(dāng)數(shù)據(jù)變化的時候,是先寫Redis還是先寫Oracle?是先寫Redis,再寫Oracle,因?yàn)榇a層面保證數(shù)據(jù)的一致性,在高并發(fā)寫Oracle,如果先寫Redis,參考前一段話,采取Redis的強(qiáng)一致性;如果先寫2.目前的監(jiān)控系統(tǒng)是Python到Oracle取配置信息,經(jīng)過運(yùn)算Oracle,然后根據(jù)閥值來觸發(fā)告警,在這樣的模式之下空間呢?5:多維度的告警規(guī)則:如無數(shù)據(jù)告警、存全局ID。熱點(diǎn)數(shù)據(jù)緩存采用的是一主一從三哨兵(分別獨(dú)立,共五個節(jié)點(diǎn));會話保持采用的是一主三從四個哨兵(共四個節(jié)點(diǎn),每個進(jìn)程);這個是乙方給的方案,請教大神,這個方案可靠嗎?能否使用cluster方案來替代呢?有必要嗎?答:你有兩套Redis,A作為熱數(shù)據(jù)緩存缺點(diǎn):A有5個節(jié)點(diǎn),B有4個節(jié)點(diǎn),9個節(jié)點(diǎn)中只有2個節(jié)點(diǎn)是主節(jié)點(diǎn),按照9節(jié)點(diǎn)的規(guī)模,實(shí)際組網(wǎng)只能有8臺,4主4從,資源使用率得到很大的提升,而且代理層分別由8個節(jié)點(diǎn)負(fù)擔(dān),因此,也能保證了可用性。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論