下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第Java實現(xiàn)Redis哨兵的示例代碼*如若發(fā)生異常,則主節(jié)點掛掉,需要做如下兩步:
*1)如果捕獲到了異常證明:
redis節(jié)點掛掉,我們需要將當(dāng)前主節(jié)點address保存到badRedisServers集合中
*2)調(diào)用changeMaster()方法,選舉從節(jié)點作為新的主
*/
privatestaticvoidcheckMaster(){
//主從切換
//檢查狀態(tài)
System.out.println("檢查master狀態(tài):"+masterAddress);
StringmasterHost=masterAddress.split(":")[0];
intmasterPort=Integer.parseInt(masterAddress.split(":")[1]);
try{
Jedisjedis=newJedis(masterHost,masterPort);
jedis.ping();
jedis.close();
}catch(Exceptione){
//master掛掉啦
badRedisServers.add(masterAddress);
//切換master
changeMaster();
}
}
/**
*切換master
*
*1)從slaveRedisServers集合中,獲取一個從節(jié)點地址
*2)通過地址創(chuàng)建jedis對象嘗試ping動作,驗證器是否在線
*3)沒發(fā)生異常,證明在線,我們需要禁用它從死掉master繼續(xù)同步數(shù)據(jù)
*4)修改屬性masterAddress為新選舉出來的slave地址
*5)如果發(fā)生異常,則將當(dāng)前slave存放在badRedisServers集合中,進(jìn)入下一次循環(huán)重試1-4動作
*6)選舉成功后,將當(dāng)前slave從slaveRedisServers集合中移除掉
*
*7)遍歷slaveRedisServers集合,將其他從節(jié)點主從復(fù)制配置更新到剛剛選舉出來的新主節(jié)點身上
*/
privatestaticvoidchangeMaster(){
IteratorStringiterator=slaveRedisServers.iterator();
while(iterator.hasNext()){
StringslaveAddress=iterator.next();
try{
StringslaveHost=slaveAddress.split(":")[0];
intslavePort=Integer.parseInt(slaveAddress.split(":")[1]);
Jedisjedis=newJedis(slaveHost,slavePort);
/*確保當(dāng)前從節(jié)點在線*/
jedis.ping();
/*禁用當(dāng)前從節(jié)點同步復(fù)制*/
jedis.slaveofNoOne();
jedis.close();
masterAddress=slaveAddress;
System.out.println("產(chǎn)生新的master:"+masterAddress);
break;
}catch(Exceptione){
badRedisServers.add(slaveAddress);
}finally{
iterator.remove();
}
}
//所有slave切到新的master
for(Stringslave:slaveRedisServers){
StringslaveHost=slave.split(":")[0];
intslavePort=Integer.parseInt(slave.split(":")[1]);
Jedisjedis=newJedis(slaveHost,slavePort);
jedis.slaveof(masterAddress.split(":")[0],Integer.parseInt(masterAddress.split(":")[1]));
jedis.close();
}
}
/**
*更新當(dāng)前所有從節(jié)點到slaveRedisServers中
*
*1)根據(jù)masterAddress創(chuàng)建主節(jié)點Jedis對象
*2)獲取主節(jié)點replication配置信息("replication");
*3)根據(jù)配置信息,獲取到當(dāng)前主節(jié)點從節(jié)點個數(shù)
*4)循環(huán)遍歷從節(jié)點個數(shù),如果個數(shù)大于0,則清空當(dāng)前slaveRedisServers集合
*5)從配置信息中截取出所有從節(jié)點的ip:端口后,放入到slaveRedisServers集合中
*
*/
privatestaticvoidupdateSlaves(){
//獲取所有slave
try{
StringmasterHost=masterAddress.split(":")[0];
intmasterPort=Integer.parseInt(masterAddress.split(":")[1]);
Jedisjedis=newJedis(masterHost,masterPort);
Stringinfo_replication=("replication");
//解析inforeplication
String[]lines=info_replication.split("\r\n");
intslaveCount=Integer.parseInt(lines[2].split(":")[1]);
if(slaveCount0){
slaveRedisServers.clear();
for(inti=0;islaveCount;i++){
Stringhost=lines[3+i].split(",")[0].split("=")[1];
Stringport=lines[3+i].split(",")[1].split("=")[1];
slaveRedisServers.add(host+":"+port);
}
}
System.out.println("更新slave列表:"+Arrays.toString(slaveRedisServers.toArra
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教師勞務(wù)合同范本
- 大區(qū)直播合同協(xié)議
- 學(xué)校購置合同范本
- 噴繪圍擋合同范本
- 買煙的合同范本
- 青工蓋房合同協(xié)議
- 駕校網(wǎng)絡(luò)合同范本
- 驗收期限合同范本
- 備案合同延期協(xié)議
- 校車管理合同范本
- 求職OMG-大學(xué)生就業(yè)指導(dǎo)與技能開發(fā)智慧樹知到期末考試答案章節(jié)答案2024年中國海洋大學(xué)
- JBT 7387-2014 工業(yè)過程控制系統(tǒng)用電動控制閥
- A課堂懲罰游戲
- 小品劇本《鍘美案》臺詞完整版遼寧民間藝術(shù)團(tuán)宋小寶
- 電子合同取證流程規(guī)范
- 張家界航空工業(yè)職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試參考試題庫(含答案)
- 醫(yī)藥代表如何成功拜訪客戶
- 科研倫理與學(xué)術(shù)規(guī)范-課后作業(yè)答案
- 交通銀行跨境人民幣業(yè)務(wù)介紹
- GB/T 33636-2023氣動用于塑料管的插入式管接頭
- JJF(石化)036-2020漆膜附著力測定儀(劃圈法)校準(zhǔn)規(guī)范
評論
0/150
提交評論