




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Redis基礎(chǔ)知識(shí)及集群搭建張西強(qiáng)2015年2月目錄Redis基礎(chǔ)知識(shí)Redis集群搭建12Redis簡(jiǎn)介——Redis,典型的NoSQL數(shù)據(jù)庫(kù)服務(wù)器,采用KEY-VALUE存儲(chǔ)結(jié)構(gòu),可以作為服務(wù)程序獨(dú)立運(yùn)行于自己的服務(wù)器主機(jī),同時(shí)作為內(nèi)存數(shù)據(jù)庫(kù),不用IO讀取硬盤(pán)數(shù)據(jù),能夠快速響應(yīng)請(qǐng)求。Redis是什么?Redis有什么特點(diǎn)?——支持持久化、支持多種數(shù)據(jù)結(jié)構(gòu)、支持主從復(fù)制、免費(fèi)與關(guān)系型數(shù)據(jù)庫(kù)比較——redis由于其存儲(chǔ)結(jié)構(gòu)相對(duì)簡(jiǎn)單,因此并不能對(duì)復(fù)雜的邏輯關(guān)系提供很好的支持,然而在適用于Redis的場(chǎng)景中,我們卻可以由此而獲得效率上的顯著提升。Redis的數(shù)據(jù)結(jié)構(gòu)作為NOSQL數(shù)據(jù)庫(kù)之一的redis,除了支持基本key-value方式,還支持結(jié)構(gòu)化存儲(chǔ),以適應(yīng)各類(lèi)應(yīng)用場(chǎng)景:String: 字符串類(lèi)型List:
鏈表類(lèi)型Hashes: 哈希類(lèi)型Set: 集合類(lèi)型Sorted-Sets 有序集合類(lèi)型字符串類(lèi)型:StringString是最常用的一種數(shù)據(jù)類(lèi)型,普通的key/value存儲(chǔ)都可以歸為此類(lèi)。當(dāng)然,也可以存儲(chǔ)圖片,視頻等序列化對(duì)象,Value最多可以容納的數(shù)據(jù)長(zhǎng)度是512M。1.賦值:
SETKEYVALUE
MSETKEY1VALUE1[KEY][VALUE2]
SETBITKEYOFFSET1/02.取值:
GETKEY
MGETKEY1[KEY] GETBITKEYOFFSET3.字符串操作:
STRLENKEY
SETRANGEKEYOFFSETVALUES
GETRANGEKEYSTARTEND
4.數(shù)字操作:
INCRKEY DECRKEY INCRBYKEYdecrement/DECRBYKEYdecrement5.其他:
SETEXKEYSECONDSKEYVALUEStringLENBUF[]FREE鏈表類(lèi)型:ListList類(lèi)型是按照插入順序排序的字符串鏈表。和數(shù)據(jù)結(jié)構(gòu)中的普通鏈表一樣,我們可以在其頭部(left)和尾部(right)添加新的元素。在插入時(shí),如果該鍵并不存在,Redis將為該鍵創(chuàng)建一個(gè)新的鏈表。1.賦值:
LPUSH/RPUSHKEYV1V2…VN
LPUSHX/RPUSHXKEYVALUE2.取值:
LPOP/RPOPKEY
LRANGEKEYSTARTEND GETBITKEYOFFSET3.INDEX操作:
LSETkeyindexvalue
LINDEXKEYindex
4.取長(zhǎng)度:
LLENKEY5.截?。?/p>
LTRIMkeystartstop場(chǎng)景:LIST可以作為消息隊(duì)列,LPUSH鏈表頭作為生產(chǎn)者插入消息,RPOP作為消費(fèi)者取得消息。哈希類(lèi)型:Hashes我們可以將Redis中的Hashes類(lèi)型看成具有StringKey和StringValue的map容器。所以該類(lèi)型非常適合于存儲(chǔ)值對(duì)象的信息。1.賦值:
HSETKEYFILEDVALUE
HMSETKEYFILEDVALUE[FILED1][VALUE]2.取值:
HGETKEY HMGETKEY[KEY]
HKEYSKEY HVALSKEY
HGETALLKEY3.刪除:
HDELFILED[FILED]
4.取長(zhǎng)度:
HLEN5.存在判定:
HEXISTSkeyfiled場(chǎng)景:AIOP中用戶(hù)標(biāo)簽信息使用HASHMAP存儲(chǔ),存儲(chǔ)結(jié)構(gòu)為user:phonetag1val1tag2val2,AIOP傳遞客戶(hù)手機(jī)號(hào),即可通過(guò)HGETuser:phonetag1tag2取出標(biāo)簽值。集合類(lèi)型:Sets在Redis中,我們可以將Set類(lèi)型看作為沒(méi)有排序的字符集合,就像什錦果凍,只是聚集在一起,沒(méi)有順序,這和List類(lèi)型不一樣,另外要注意Set集合中不允許出現(xiàn)重復(fù)的元素,而且Set支持多個(gè)Sets之間的差、并、交集操作。1.新增:
SADDKEYM1M2…2.查詢(xún):
SMEMEBERSKEY SPOPKEY SRANDMEMBERKEY3.刪除:
SREMKEYM1M2…MN4.取長(zhǎng):
SCARDKEY5.存在判定:
SISMEMBERKEYMEMBER6.聚合運(yùn)算:
SDIFFKEY1KEY2… SINTERKEY1KEY2… SUINONKEY1KEY2…場(chǎng)景:COC中將符合標(biāo)簽的用戶(hù)進(jìn)行聚類(lèi),存放到Set中,比如set1存放學(xué)生標(biāo)簽用戶(hù)、set2存放低消費(fèi)用戶(hù)、set3存放非合約用戶(hù),那么取出可能購(gòu)買(mǎi)小米的低消非合約學(xué)生用戶(hù)群: 1.SINTERSTOREasetset1set2
2.SDIFFasetset3有序集合中也不允許有重復(fù)數(shù)據(jù),它比Set多了一個(gè)score,Redis正是通過(guò)score來(lái)為集合中的成員進(jìn)行從小到大的排序。需要注意的是,盡管Sorted-Sets中的成員必須是唯一的,但是分?jǐn)?shù)(score)卻是可以重復(fù)的。1.查詢(xún):
ZADDKEYSCORENMBR1…SCORENMBRN2.刪除:
ZREMKEYMBR1MBR2…MBRN3.取前幾位/后幾位:
ZRANGEkeystartstop[WITHSCORES]
ZREVRANGEkeystartstop[WITHSCORES]
4.統(tǒng)計(jì)數(shù)量:
ZCOUNTkeyminmax5.取分?jǐn)?shù):
ZSCOREkeymember場(chǎng)景:可以用于一個(gè)大型在線(xiàn)游戲的積分排行榜。每當(dāng)玩家的分?jǐn)?shù)發(fā)生變化時(shí),可以執(zhí)行ZADD命令更新玩家的分?jǐn)?shù),此后再通過(guò)ZRANGE命令獲取積分TOPTEN的用戶(hù)信息。當(dāng)然我們也可以利用ZRANK命令通過(guò)username來(lái)獲取玩家的排行信息。最后我們將組合使用ZRANGE和ZRANK命令快速的獲取和某個(gè)玩家積分相近的其他用戶(hù)的信息。有序集合類(lèi)型:Sorted-Sets以上各類(lèi)數(shù)據(jù)類(lèi)型的操作全部是針對(duì)于KEY關(guān)聯(lián)的value操作,redis也提供了單獨(dú)對(duì)key值的操作匹配: KEYSpattern例如keys*列出所有key值刪除: DELkey[key...]例如dellist1刪除鏈表1是否存在: EXISTSkey鍵值遷移: MOVEkeydb
--移向數(shù)據(jù)庫(kù)select01可選擇數(shù)據(jù)庫(kù)查看數(shù)據(jù)類(lèi)型: TYPEkey
設(shè)置超時(shí): EXPIREkeyseconds
/EXPIREATkeytimestamp
取消超時(shí): PERSISTkey其他操作Redis在設(shè)計(jì)之初就被定義為長(zhǎng)時(shí)間不間斷運(yùn)行的服務(wù)進(jìn)程,因此大多數(shù)系統(tǒng)配置參數(shù)都可以在不重新啟動(dòng)進(jìn)程的情況下立即生效,我用到的有:Slaveofhostport修改主從關(guān)系 Info當(dāng)前系統(tǒng)信息
shutdown關(guān)閉redisflushall清空所有keysflushdb清空當(dāng)前數(shù)據(jù)庫(kù)keyRedis主從復(fù)制的優(yōu)勢(shì):1.支持一主多從2.支持級(jí)聯(lián)復(fù)制:master-slave-slave,分載master同步壓力3.支持非阻塞式數(shù)據(jù)同步:數(shù)據(jù)同步與對(duì)外服務(wù)能力分離,互不影響4.支持slave只讀模式Redis主從復(fù)制主從復(fù)制流程1).RDB持久化:
該機(jī)制是指在指定的時(shí)間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)集快照寫(xiě)入磁盤(pán)。
優(yōu)點(diǎn):1.只有一份rdb文件,可隨時(shí)備份
2.比AOF文件小,加載效率高
3.只提供fork子進(jìn)程,不阻塞主進(jìn)程,IO操作比較少2).AOF持久化:
該機(jī)制將以日志的形式記錄服務(wù)器所處理的每一個(gè)寫(xiě)操作,在Redis服務(wù)器啟動(dòng)之初會(huì)讀取該文件來(lái)重新構(gòu)建數(shù)據(jù)庫(kù),以保證啟動(dòng)后數(shù)據(jù)庫(kù)中的數(shù)據(jù)是完整的。
優(yōu)點(diǎn):1.每改動(dòng)同步數(shù)據(jù)安全性好
2.APPEND方式追加日志,不會(huì)對(duì)舊日志文件產(chǎn)生影響3).無(wú)持久化:
我們可以通過(guò)配置的方式禁用Redis服務(wù)器的持久化功能,這樣我們就可以將Redis視為一個(gè)功能加強(qiáng)版的memcached了。4).同時(shí)應(yīng)用AOF和RDB。Redis持久化1).RDB持久化:
Dump快照的機(jī)制:
1).Redis先f(wàn)ork子進(jìn)程。
2).子進(jìn)程將快照數(shù)據(jù)寫(xiě)入到臨時(shí)RDB文件中。
3).當(dāng)子進(jìn)程完成數(shù)據(jù)寫(xiě)入操作后,再用臨時(shí)文件替換老的文件。
redis.conf配置修改:
save9001
#在900秒后,如果至少有1個(gè)key發(fā)生變化,則dump內(nèi)存快照。
save30010
#在300秒后,如果至少有10個(gè)key發(fā)生變化,則dump內(nèi)存快照。
save6010000
#在60秒之后,如果至少有10000個(gè)key發(fā)生變化,則dump內(nèi)存快照。
(注釋1:可以配置多個(gè)條件組成持久化策略)(注釋2:fork進(jìn)程開(kāi)銷(xiāo)大,數(shù)據(jù)量太大時(shí),消耗cpu和內(nèi)存資源,影響父進(jìn)程不能及時(shí)響應(yīng)請(qǐng))
2).AOF持久化:
redis.conf配置修改
appendonlyyes
appendfsyncalways
#每次有數(shù)據(jù)修改發(fā)生時(shí)都會(huì)寫(xiě)入AOF文件。
appendfsynceverysec
#每秒鐘同步一次,該策略為AOF的缺省策略。
appendfsyncno
#從不同步。高效但是數(shù)據(jù)不會(huì)被持久化。
(注釋?zhuān)阂话氵x擇always每修改同步,保證數(shù)據(jù)安全)Redis持久化2Redis作為內(nèi)存數(shù)據(jù)庫(kù),所有數(shù)據(jù)都從內(nèi)存中拿,省去讀寫(xiě)磁盤(pán)的消耗(持久化是由fork子進(jìn)程處理,主服務(wù)對(duì)外能力不受影響),響應(yīng)速度極快。但我們不可能將所有的數(shù)據(jù)都讀到內(nèi)存中,所以?xún)?nèi)存資源顯得非常可貴,我們就要優(yōu)化存儲(chǔ)結(jié)構(gòu),使得好鋼用在刀刃上.Redis內(nèi)存優(yōu)化思考1.盡量使用hash
COC中每個(gè)客戶(hù)會(huì)對(duì)應(yīng)上千個(gè)標(biāo)簽,每個(gè)客戶(hù)就是一個(gè)對(duì)象,我們?nèi)绾未鎯?chǔ)它?phone序列化對(duì)象:tag1tag2tag3…tagnkeyvaluePhone:tag1keyvaluephonekeyvaluev1Phone:tag2v2Phone:tagnvntag1v1tag2v2tagnvn序列化對(duì)象:要求在redis存儲(chǔ)前對(duì)象進(jìn)行序列化操作,每次取出后還要執(zhí)行反序列化操作,開(kāi)銷(xiāo)太大;如果只想取對(duì)象的某一個(gè)值,都需要將整個(gè)對(duì)象取出,還要解決并發(fā)、數(shù)據(jù)一致性、加鎖等復(fù)雜問(wèn)題。K-V模式:phone字段冗余HASHMAP:
phone字段只出現(xiàn)一次,避免數(shù)據(jù)冗余Redis內(nèi)存優(yōu)化思考續(xù)1存儲(chǔ)結(jié)構(gòu)比較比較K-V結(jié)構(gòu)與HASHMAP結(jié)構(gòu)對(duì)內(nèi)存的影響:前提假設(shè)COC有1千萬(wàn)用戶(hù)對(duì)象,每個(gè)用戶(hù)對(duì)象有1000個(gè)標(biāo)簽,Redis存儲(chǔ)的phone_no格式為185XXXXXXXX。1.根據(jù)ASCII編碼,每位數(shù)字占用單字節(jié)字符,每個(gè)phone_no占用11Byte.
2.K-V結(jié)構(gòu)中,存放一個(gè)完成對(duì)象,每個(gè)phone_no需要重復(fù)1000次,所以存放1千萬(wàn)個(gè)對(duì)象phone_no為1000*1千萬(wàn),所占空間為:1000次*10000000個(gè)*11B/1024/1024=102.45G內(nèi)存優(yōu)化效果Redis內(nèi)存優(yōu)化思考續(xù)22.根據(jù)業(yè)務(wù)場(chǎng)景,考慮使用BITMAP
前面我們?cè)谥vString的時(shí)候提到過(guò)兩個(gè)命令:setbitkeyoffset0/1和getbitkeyoffset,這兩個(gè)命令是在位上進(jìn)行0/1賦值和取值。假設(shè)還是1000W用戶(hù),每個(gè)用戶(hù)有1000個(gè)0/1標(biāo)簽,我們可以使用bitmap來(lái)存放這些數(shù)據(jù):10010110000010phone1tag1tag1000Setbitphone111Setbitphone199911000bit/8/1024/1024=0.000119MB所有標(biāo)簽總占用的內(nèi)存為:0.000119MB*1000W=1.19GB,如果使用key-value結(jié)構(gòu)(包括hashes),內(nèi)存占用至少是它的8倍。Redis內(nèi)存優(yōu)化思考續(xù)3只適合01型標(biāo)簽需要位移位與標(biāo)簽的字典表,屬于額外開(kāi)銷(xiāo),但相對(duì)而言字典表offset數(shù)字可共享redis數(shù)字池,比直接存字符串要省空間。犧牲時(shí)間換空間:1.維護(hù)字典表2.入庫(kù)需要對(duì)應(yīng)轉(zhuǎn)化3.出庫(kù)計(jì)算也需要轉(zhuǎn)換BITMAP使用總結(jié)本次redis基礎(chǔ)知識(shí)中,我們介紹了基本的數(shù)據(jù)結(jié)構(gòu)及常用命令、數(shù)據(jù)類(lèi)型的場(chǎng)景舉例、redis主從復(fù)制機(jī)制、持久化機(jī)制、以及內(nèi)存優(yōu)化。無(wú)論是數(shù)據(jù)結(jié)構(gòu)選擇還是內(nèi)存優(yōu)化,都要結(jié)合具體的業(yè)務(wù)場(chǎng)景和業(yè)務(wù)要求,沒(méi)有通用的最佳推薦模式,只有最符合需求的模式,所以我們需要我們不斷嘗試、不斷優(yōu)化。Redis基礎(chǔ)總結(jié)目錄Redis基礎(chǔ)知識(shí)Redis集群搭建12集群及集群目的目的:高可用、負(fù)載均衡、易擴(kuò)展、數(shù)據(jù)安全、性能提升技術(shù):集群地址(虛擬IP)、網(wǎng)絡(luò)通信(監(jiān)控消息)功能:負(fù)載均衡、讀寫(xiě)分離、故障轉(zhuǎn)移集群集群指的是將幾臺(tái)服務(wù)器集中在一起,實(shí)現(xiàn)同一業(yè)務(wù)Redis集群部署方案1方案1:haproxy+keepalived+redis集群Redis集群架構(gòu)redis服務(wù)器haproxy服務(wù)器Redis集群部署方案1REDIS:通過(guò)REDIS的配置文件,可以實(shí)現(xiàn)主從復(fù)制、讀寫(xiě)分離的工作。HAPROXY:通過(guò)haproxy的配置文件,實(shí)現(xiàn)負(fù)載均衡,haproxy負(fù)載均衡算法有多種,一般采用輪詢(xún)方式,當(dāng)某臺(tái)redis-salve故障時(shí),haproxy會(huì)將其摘除。Keepalived:是一個(gè)基于VRRP協(xié)議來(lái)實(shí)現(xiàn)服務(wù)器高可用方案,可以利用其來(lái)避免haproxy單點(diǎn)故障,保證高可用。方案1redishaproxykeepalivedRedis部署目標(biāo)Redis部署1機(jī)器1:
redis主節(jié)點(diǎn)(3:6379)
從節(jié)點(diǎn)(3:63791)
從節(jié)點(diǎn)(3:63792)機(jī)器1:haproxy+keepalived
機(jī)器2:
從節(jié)點(diǎn)0:63793
從節(jié)點(diǎn)
0:63794機(jī)器2:
haproxy+keepalived機(jī)器1:以root用戶(hù)創(chuàng)建以下目錄部署環(huán)境進(jìn)入/usr/local/src目錄Redis下載:wget
http://download.redis.io/releases/redis-2.8.9.tar.gz
Redis部署2解壓redis安裝包:編譯redis:Redis部署3復(fù)制配置文件,執(zhí)行如下:修改redis.conf:bind設(shè)為3#redis服務(wù)跟該IP綁定
dir設(shè)為/usr/local/redis/datapidfile/var/run/redis.piddbfilename設(shè)為dump.rdbdaemonize設(shè)為yesport6379修改redis-slave1:bind3#綁定IPpidfile/var/run/redis-slave1.piddbfilenamedump-slave1.rdbdir/usr/local/redis/dataport63791slaveof36379#是36379的從存儲(chǔ)daemonizeyes#后臺(tái)開(kāi)啟守護(hù)進(jìn)程slave-read-onlyyes#slave只讀(注:不要覆蓋原文件,找到相應(yīng)的字段修改即可,其他保持原樣)Redis部署4修改redis-slave2:bind3pidfile/var/run/redis-slave2.piddbfilenamedump-slave2.rdbdir/usr/local/redis/dataport63792slaveof36379daemonizeyes啟動(dòng)slave的redis服務(wù):機(jī)器2:機(jī)器2上的部署如同機(jī)器1,只要配置從服務(wù)器文件即可啟動(dòng)機(jī)器1上的redis-master可通過(guò)ps–ef|grepredis查看服務(wù)是否啟動(dòng)Redis部署5驗(yàn)證:首先確認(rèn)已啟動(dòng):機(jī)器1上:redis-serverredis.confredis-serverredis-slave1redis-serverredis-slave2機(jī)器2上:redis-serverredis-slave3redis-serverredis-slave4
到現(xiàn)在已完成redis集群配置,且只有3
6379可寫(xiě)數(shù)據(jù),其余slave機(jī)器只能讀數(shù)據(jù)redis-cli
-h
3
-p6379Info可以看到這樣子就是成功了:注1:配置文件中默認(rèn)主從復(fù)制是開(kāi)啟的,通過(guò)上圖可以看到命令機(jī)器為master,下掛4個(gè)從服務(wù)器注2:查看我編寫(xiě)的redis啟動(dòng)關(guān)閉腳本
redis
該腳本放在/etc/init.d/中,通過(guò)serviceredisstart/stop使用Redis部署報(bào)錯(cuò)處理1.如果報(bào)下面的錯(cuò),說(shuō)明master的redis沒(méi)有啟動(dòng),啟動(dòng)它既可2.在2號(hào)機(jī)子上執(zhí)行報(bào)錯(cuò),請(qǐng)檢查防火墻策略
Haproxy部署目標(biāo)Haproxy部署進(jìn)入機(jī)器11.安裝cd/usr/local/srctar-zxvfhaproxy-0cdhaproxy-0makeTARGET=linux26PREFIX=/usr/local/haproxymakeinstallPREFIX=/usr/local/haproxy注意:要查看linux系統(tǒng)的內(nèi)核信息,要與TARGET匹配2.配置cd/usr/local/haproxy#haproxy默認(rèn)是沒(méi)有配置文件的,需要自己手機(jī)創(chuàng)建vi
haproxy.cfg
3.查看是否成功:/usr/local/haproxy/sbin/haproxy-f/usr/local/haproxy/haproxy.cfg#啟動(dòng)ps-ef|grephaproxy#查進(jìn)程訪(fǎng)問(wèn)13:8888/haproxyadmin
機(jī)器1與機(jī)器2上的haproxy配置部署是一樣的,通過(guò)keeplived采用單活方式對(duì)外提供服務(wù)Keepalived部署進(jìn)入機(jī)器1cd/usr/local/src/wget
/software/keepalived-1.2.12.tar.gztar-zxvfkeepalived-1.2.12.tar.gzcdkeepalived-1.2.12./configuremake&&make
install注:若這里報(bào)錯(cuò)提示沒(méi)有裝openssl,則執(zhí)行yum-yinstallopenssl-devel安裝,若還有其他的包沒(méi)裝,則執(zhí)行yum命令進(jìn)行安裝cp/usr/local/etc/rc.d/init.d/keepalived/etc/rc.d/init.d/cp/usr/local/etc/sysconfig/keepalived/etc/sysconfig/mkdir/etc/keepalivedcp/usr/local/etc/keepalived/keepalived.conf/etc/keepalived/ln-s/usr/local/sbin/keepalived/usr/sbin/vi/etc/keepalived/keepalived.conf注1:此處注意{與之前的字符之間必須有空格,否則無(wú)法正常調(diào)用,例如VI_1{
這樣寫(xiě),就在keepalived啟動(dòng)時(shí)無(wú)法建立VIP00vi/etc/keepalived/check_haproxy.sh注1:`是esc下面的符號(hào),不是單引號(hào)。另外if\[]\表達(dá)式注意空格,另外要注意/etc/keepalived/check_haproxy.sh必須賦予可執(zhí)行權(quán)限:chmod777/etc/keepalived/check_haproxy.sh,否則會(huì)啟動(dòng)不起來(lái)Keepalived配置文件vrrp_scriptchk_haproxy{script"/etc/keepalived/check_haproxy.sh"interval2}global_defs{router_idLVS_DEVEL}vrrp_instanceVI_1{stateBACKUP#備機(jī)MASTER主機(jī)interfaceeth0#綁定的網(wǎng)卡virtual_router_id53#與master保持一致,組號(hào),同組能通知priority120#要比master低,選舉的依據(jù)advert_int1authentication{auth_typePASSauth_type1111}track_script{chk_haproxy}virtual_ipaddress{00#VIP}}check_haproxy.sh
腳本如下:#!/bin/bash#A=`ps-Chaproxy--no-header|wc-l`
#keepalived檢查本機(jī)haproxy是否啟動(dòng)if[[`ps-Chaproxy--no-header|wc-l`-eq0]];#haproxy進(jìn)程是否為0thenecho"haproxynotrunning,attempttostartup"/usr/local/haproxy/sbin/haproxy-f/usr/local/haproxy/haproxy.cfg#如果為零則啟動(dòng)haproxysleep5if[[`ps-Chaproxy--no-header|wc-l`-eq0]];#判定是否啟動(dòng)成功then/etc/init.d/keepalivedstopecho"haproxystartfailure,stopkeepalived"elseecho"haproxystartedsuccess"fiFiKeepalived.confcheck_haproxy.shkeepalived驗(yàn)證機(jī)器1、2上分別執(zhí)行:/etc/rc.d/init.d/keepalivedstart通過(guò)ipadd,出現(xiàn)如下表示VIP建立通過(guò)ps-ef|grephaproxy查看是否啟動(dòng)haproxy通過(guò)ps-ef|grepkeepalived查看是否啟動(dòng)keepalivedkeepalived驗(yàn)證通過(guò)
tail-f/var/log/messages,出現(xiàn)以下信息為正確如果出現(xiàn)以下錯(cuò)誤,請(qǐng)檢查/etc/keepalived/check_haproxy.sh是否是可執(zhí)行文件集群方案1驗(yàn)證主從復(fù)制驗(yàn)證:在master中執(zhí)行setkey1“test”,在slave1、
slave2、slave3、
slave4中執(zhí)行g(shù)etkey1,獲得“test”,測(cè)試通過(guò)讀寫(xiě)分離驗(yàn)證:
在各slave中執(zhí)行setkey1“test”,報(bào)以下錯(cuò)誤測(cè)試通過(guò)(error)READONLYYoucan'twriteagainstareadonlyslave.負(fù)載均衡驗(yàn)證:
redis-cli–h00–p63790getkey1得“test””,測(cè)試通過(guò)負(fù)載均衡高可用驗(yàn)證:
kill-9haproxy進(jìn)程號(hào),redis-cli–h00–p63790
getkey1得“test””,測(cè)試通過(guò)擴(kuò)展性驗(yàn)證:
slave3上執(zhí)行slaveof063798脫離master,再執(zhí)行slaveof36379加入到master,說(shuō)明slave可不宕機(jī)擴(kuò)展驗(yàn)證方式Redis集群部署方案2方案2:redis官方Sentinel集群管理工具Sentinel1Sentinel2Sentinel3Sentinel4masterslaveslaveslave哨兵群Redis集群ping發(fā)布訂閱Redis集群部署方案2Sentinel:負(fù)責(zé)對(duì)redis群中的主從服務(wù)器監(jiān)控、提醒和自動(dòng)故障轉(zhuǎn)移。Redis群:對(duì)外提供redis服務(wù)方案2Sentinel群Redis群Sentinel原理綜述:RedisSentinel是一個(gè)分布式系統(tǒng),你可以在一個(gè)架構(gòu)中運(yùn)行多個(gè)Sentinel進(jìn)程(progress),個(gè)數(shù)與redis集群中服務(wù)個(gè)數(shù)沒(méi)有關(guān)聯(lián)關(guān)系。這些進(jìn)程使用流言協(xié)議(gossipprotocols)來(lái)接收關(guān)于主服務(wù)器是否下線(xiàn)的信息,并使用投票協(xié)議(agreementprotocols)來(lái)決定是否執(zhí)行自動(dòng)故障遷移,以及選擇哪個(gè)從服務(wù)器作為新的主服務(wù)器。流言協(xié)議:Sentinel服務(wù)通過(guò)ping命令來(lái)確認(rèn)監(jiān)控服務(wù)是否正常,當(dāng)足夠多數(shù)量的sentinel都確認(rèn)監(jiān)控的同一服務(wù)停止了(主觀(guān)下線(xiàn)),則判定該服務(wù)停止(客觀(guān)下線(xiàn))。跟流言很相似,一個(gè)哨兵說(shuō)看不到目標(biāo)了,他會(huì)向其他哨兵詢(xún)問(wèn)是否看得到目標(biāo),足夠多的哨兵說(shuō)看不到目標(biāo),則說(shuō)明目標(biāo)消失。一般來(lái)說(shuō),足夠多就是一半及以上。投票協(xié)議:投票協(xié)議就像選舉,sentinel群根據(jù)一定的規(guī)則,從redis群中選擇一個(gè)新的主服務(wù)器,并使其他redis服務(wù)器作為新服務(wù)器的slave,并修改自身的配置文件原理Sentinel配置Sentinel集群部署很簡(jiǎn)單,而且它跟redis集群邏輯上是獨(dú)立,可以啟動(dòng)任意多個(gè)(當(dāng)然最少要兩個(gè)才有效果)服務(wù),只需要配置Sentinel.conf文件即可:port26378 #sentinel服務(wù)端口daemonizeyes #開(kāi)啟守護(hù)進(jìn)程logfile“/var/log/redis/sentinel1.log“ #sentinel運(yùn)行日志sentinelmonitormymaster363792 #監(jiān)控主服務(wù)及判定客觀(guān)下線(xiàn)所需要的最少主觀(guān)下線(xiàn)sentinel服務(wù)數(shù)sentineldown-after-millisecondsmymaster60000 #本sentinel服務(wù)多長(zhǎng)時(shí)間收不到消息才能判定主觀(guān)下線(xiàn)sentinelfailover-timeoutmymaster180000 #故障轉(zhuǎn)移判定超時(shí)間sentinelparallel-syncsmymaster1#故障轉(zhuǎn)移后,允許最多幾個(gè)slave可以同時(shí)從新服務(wù)器同步數(shù)據(jù)配置Sentinel問(wèn)題及注意事項(xiàng)配置文件自動(dòng)生成內(nèi)容:服務(wù)在配置文件中指定從服務(wù)器地址及其他sentinel服務(wù)地址,sentinel的發(fā)布訂閱功能支持向所監(jiān)控master服務(wù)發(fā)布和訂閱消息,而消息中會(huì)包含從服務(wù)器地址、端口,其他sentinel的信息,sentinel拿到其他sentinel服務(wù)消息后,會(huì)寫(xiě)入自己的配置文件中。Failover時(shí)間:當(dāng)新master代替老master后,其他的slave會(huì)自動(dòng)使用新master,同時(shí)向新master發(fā)布同步數(shù)據(jù)請(qǐng)求,所有slave同步完成后,這次故障轉(zhuǎn)移才算完成。而本參數(shù)就是規(guī)定最多有幾個(gè)slave可以同時(shí)進(jìn)行數(shù)據(jù)同步,failover總時(shí)長(zhǎng)是:(slaveCount%
parallel-syncs+1)次*單位同步時(shí)長(zhǎng)parallel-syncs:從2中看出參數(shù)越小,故障轉(zhuǎn)移時(shí)間越長(zhǎng)?;A(chǔ)中提到過(guò)同步數(shù)據(jù)的fork子進(jìn)程雖然不會(huì)阻塞服務(wù),但是會(huì)占用內(nèi)存,可能使主服務(wù)不能響應(yīng)指令。所以本參數(shù)越大,同時(shí)不能響應(yīng)指令的slave就越多,就越影響對(duì)外服務(wù),甚至使對(duì)外服務(wù)能力中斷。所以,配置參數(shù)是,我們要盡量減少故障轉(zhuǎn)移時(shí)長(zhǎng),同時(shí)也要預(yù)留足夠的slave對(duì)外提供服務(wù)。問(wèn)題及注意事項(xiàng)Sentinel部署環(huán)境Redis:
主節(jié)點(diǎn)(3:6379)
從節(jié)點(diǎn)(3:63791)
從節(jié)點(diǎn)(3:63792)Sentinel:
S(3:26379)
S1(3:26378)53機(jī)器Redis:
主節(jié)點(diǎn)(0:63793)
從節(jié)點(diǎn)(0:63794)
Sentinel:
S(0:26379)
S(0:26378)30機(jī)器配置文件Sentinel配置文件如右:1.根據(jù)實(shí)際情況修改port2.根據(jù)需要修改日志文件Sentinel部署2啟動(dòng)sentinel方法1:redis-sentinel
sentinel.conf方法2:redis-server sentinel.conf--sentinel啟動(dòng)成功:ps–ef|grepredis機(jī)器5330啟動(dòng)redis機(jī)器5330redis-serverredis.confRedis-serverredis-slave1Redis-serverredis-slave2Redis-serverredis-slave3Redis-serverredis-slave4Sentinel部署3觀(guān)察日志命令1:\[10306]03Feb18:52:35.231#Sentinelrunidis242ce4ede4b8d9100f2f761ec00fc2774bca9ad7[10306]03Feb18:52:35.231#+monitormastermymaster36379quorum2[10306]03Feb18:53:35.261#+sdownmastermymaster36379[10306]03Feb19:02:44.126*+sentinelsentinel0:26378026378@mymaster36379[10306]03Feb19:02:44.143#-sdownmastermymaster36379[10306]03Feb19:02:44.144*+sentinelsentinel3:26378326378@mymaster36379[10306]03Feb19:02:44.188*+sentinelsentinel0:26379026379@mymaster36379綠色:sentinel啟動(dòng)后監(jiān)控master,6秒后未收到響應(yīng),判定客觀(guān)下線(xiàn)(+sdown)紅色:master啟動(dòng)后,sentinel發(fā)布消息至master,也收到其他sentinel發(fā)布的消息,將這些sentinel添加到配置文件,并開(kāi)始監(jiān)控。Sentinel們判定master活著,取消主觀(guān)下線(xiàn)和客觀(guān)下線(xiàn)狀態(tài)。配置文件新增內(nèi)容Sentinel部署4觀(guān)察日志命令2:redis-cli-h3-p63791slaveof36379[10306]03Feb19:23:08.501*+slaveslave3:63791363791@mymaster36379說(shuō)明:一個(gè)新的從服務(wù)器已經(jīng)被Sentinel識(shí)別并關(guān)聯(lián)(
+slave)命令3:在53與30上執(zhí)行slaveof36379[10306]03Feb19:26:29.324*+slaveslave3:63792363792@mymaster36379[10306]03Feb19:28:19.838*+slaveslave0:63793063793@mymaster36379[10306]03Feb19:28:19.838*+slaveslave0:63794063794@mymaster36379說(shuō)明:redis集群已經(jīng)啟動(dòng),并納入sentinel群監(jiān)控Sentinel部署4觀(guān)察日志[10306]03Feb19:36:22.681#+sdownmastermymaster36379[10306]03Feb19:36:22.715#+new-epoch1[10306]03Feb19:36
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)全自動(dòng)雙波峰焊機(jī)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 電氣安全知識(shí)培訓(xùn)
- 會(huì)議預(yù)約及參會(huì)信息統(tǒng)計(jì)表
- 公共圖書(shū)館文獻(xiàn)信息共享服務(wù)協(xié)議
- 教育培訓(xùn)師資庫(kù)表格化
- 游樂(lè)場(chǎng)項(xiàng)目設(shè)施損害預(yù)防和賠償責(zé)任協(xié)議
- 遼寧省撫順市六校協(xié)作體2024-2025學(xué)年高一下學(xué)期期初檢測(cè)地理試卷(含答案)
- 混凝土澆筑施工合同
- 防水層工程 現(xiàn)場(chǎng)質(zhì)量檢驗(yàn)報(bào)告單
- 襯砌鋼筋工程 現(xiàn)場(chǎng)質(zhì)量檢驗(yàn)報(bào)告單
- 小兒推拿法操作評(píng)分標(biāo)準(zhǔn)
- 心腦血管疾病的危險(xiǎn)因素與管理1
- 第一單元練習(xí)卷(單元測(cè)試)2023-2024學(xué)年統(tǒng)編版語(yǔ)文六年級(jí)下冊(cè)
- 2016年4月自考00040法學(xué)概論試題及答案
- 2024中國(guó)碳普惠發(fā)展與實(shí)踐案例研究報(bào)告
- 2024年中國(guó)檢驗(yàn)認(rèn)證集團(tuán)招聘筆試參考題庫(kù)附帶答案詳解
- 人教版九年級(jí)數(shù)學(xué)下冊(cè)《第二十六章反比例函數(shù)》測(cè)試卷單元測(cè)試卷-帶有參考答案
- 公園售票員管理制度
- 本科:交通管理專(zhuān)業(yè)培養(yǎng)方案(管理學(xué)院)
- 《汽車(chē)電子電氣系統(tǒng)構(gòu)造與拆裝》課件 項(xiàng)目三 起動(dòng)系統(tǒng)檢修
- 《安徒生童話(huà)》閱讀指導(dǎo)課件
評(píng)論
0/150
提交評(píng)論