最佳實踐概述
場景描述
DDS副(fu)本集(ji)不僅可(ke)(ke)以(yi)(yi)(yi)通過存儲多(duo)份數據(ju)(ju)副(fu)本來保(bao)證數據(ju)(ju)的(de)高(gao)(gao)(gao)可(ke)(ke)靠性,還(huan)可(ke)(ke)以(yi)(yi)(yi)通過自(zi)動主備切換機制來保(bao)證服(fu)務(wu)的(de)高(gao)(gao)(gao)可(ke)(ke)用(yong)。通過客戶端讀取不同的(de)數據(ju)(ju)副(fu)本,可(ke)(ke)以(yi)(yi)(yi)提高(gao)(gao)(gao)數據(ju)(ju)的(de)讀取性能。請使用(yong)高(gao)(gao)(gao)可(ke)(ke)用(yong)方式連接副(fu)本集(ji)實(shi)例,否則,將無法體驗副(fu)本集(ji)的(de)高(gao)(gao)(gao)可(ke)(ke)用(yong)性和(he)高(gao)(gao)(gao)讀取性能。
方案正文
副本集(ji)的主(zhu)(zhu)(zhu)節(jie)點(dian)不(bu)是固定的,當出現(xian)副本集(ji)配置改變、主(zhu)(zhu)(zhu)節(jie)點(dian)宕機、人為主(zhu)(zhu)(zhu)備切換等狀(zhuang)況,會導(dao)致(zhi)主(zhu)(zhu)(zhu)備節(jie)點(dian)切換,此(ci)時(shi)副本集(ji)可能(neng)會選舉(ju)出新主(zhu)(zhu)(zhu)節(jie)點(dian),原來的主(zhu)(zhu)(zhu)節(jie)點(dian)則降為備節(jie)點(dian)。如(ru)下(xia)圖所示:
圖(tu)1 主備(bei)切換(huan)示意(yi)圖(tu)

連接副本集實例(高可用方式)
DDS副(fu)本(ben)集包含主(zhu)、備(bei)、隱藏節(jie)點。其中,隱藏節(jie)點對用(yong)(yong)戶不可(ke)見。您(nin)需要使(shi)用(yong)(yong)一種高(gao)(gao)可(ke)用(yong)(yong)的方式(即同(tong)時連接主(zhu)節(jie)點和備(bei)節(jie)點的IP和端(duan)口)連接副(fu)本(ben)集實(shi)例(li),從而(er)實(shi)現副(fu)本(ben)集的讀(du)寫分離和高(gao)(gao)可(ke)用(yong)(yong)。
以下主要介紹如何(he)使用URL和Java實(shi)現高可用連接實(shi)例的(de)方法(fa)。
方法一:通過URL連接副本集(ji)實(shi)例
您可以在(zai)實例(li)(li)管理頁面,單(dan)擊目標實例(li)(li),進入基本信息(xi)頁面。在(zai)“網絡信息(xi) > 高可用連接(jie)地(di)(di)址(zhi)”獲取副本集的連接(jie)地(di)(di)址(zhi)。
圖2 獲(huo)取副本集(ji)連(lian)接地址

示例:mongodb://rwuser:****@192.168.0.148:8635,192.168.0.96:8635/test?authSource=admin&replicaSet=replica
其中,“192.168.0.148:8635,192.168.0.96:8635”中包含一個(ge)(ge)主節(jie)點和一個(ge)(ge)備(bei)節(jie)點的(de)IP及端口號(hao)。即(ji)使發生主備(bei)切換而(er)更換了主節(jie)點,客戶(hu)端仍然可以(yi)成(cheng)功連接副(fu)本集實例。同時,提(ti)供副(fu)本集多個(ge)(ge)IP及端口號(hao),可以(yi)擴展整(zheng)個(ge)(ge)數(shu)據庫的(de)讀寫性能,如下圖所示:
圖3 數(shu)據讀寫示意圖
方法二:Java驅(qu)動連接副(fu)本集實(shi)例

示例代碼:
MongoClientURI connectionString = new MongoClientURI("mongodb://rwuser:****@192.168.0.148:8635,192.168.0.96:8635/test?authSource=admin&replicaSet=replica"); MongoClient client = new MongoClient(connectionString);
MongoDatabase database = client.getDatabase("test");
MongoCollection
表1 參數說明
| 參數 | 說明 |
|---|---|
| rwuser:**** | 啟動鑒權的用戶名和密碼。 |
| 192.168.0.148:8635,192.168.0.96:8635 | 副本集主、備節點的IP及端口號。 |
| test | 待連接的數據庫名稱。 |
| authSource=admin | 表示鑒權時,用戶名所屬的數據庫。 |
| replicaSet=replica | 副本集實例類型名稱。 |
連接副本集實例(非友好方式)
通過(guo)連接(jie)地(di)址連接(jie)副(fu)本集實(shi)例
mongodb://rwuser:****@192.168.0.148:8635/test?authSource=admin&replicaSet=replica
其中(zhong),“192.168.0.148:8635”為(wei)暫時的主(zhu)(zhu)節(jie)(jie)點(dian)IP及端(duan)口號(hao)。當發生(sheng)主(zhu)(zhu)備(bei)切換(huan)而(er)更換(huan)了主(zhu)(zhu)節(jie)(jie)點(dian),客戶(hu)端(duan)將無法(fa)連接到(dao)副本集(ji)實(shi)例(li)主(zhu)(zhu)節(jie)(jie)點(dian),因為(wei)客戶(hu)端(duan)無法(fa)知道新選舉(ju)出的主(zhu)(zhu)節(jie)(jie)點(dian)的IP及端(duan)口號(hao)信息,導致整個(ge)數(shu)據庫(ku)服務發生(sheng)故障。同時,只提供(gong)主(zhu)(zhu)節(jie)(jie)點(dian)IP及端(duan)口號(hao),讀寫只能在(zai)固(gu)定的主(zhu)(zhu)機上操作,無法(fa)擴展數(shu)據庫(ku)的讀寫性能,如圖下圖所示:
圖4 數據(ju)讀寫示意圖

讀寫分離
讀寫分離的相關(guan)內(nei)容請參考(kao)。