2016-02-15 33 views
0

我們使用一個4個成員的mongo副本集,以及一個仲裁器。有3個物理站點,所有蒙戈服務器可以互相交談:Mongo副本集 - 客戶需要了解所有這些嗎?

網站1(西海岸)site1的-MG01 site1的-MG02

網站2(東海岸)站點2-mg03站點2-MG04

網站3(雲,仲裁者只)site3-mgarbiter

我們有一個Java客戶端。我寧願客戶端永遠不會連接到服務器蒙戈在其他網站,即使他們的一臺服務器變成主(滯後會終止該應用。)或者把不同的方式

網站1 Java應用程序所連接到site1的-MG01和site1的-MG02

網站2 JavaApp連接到站點2-mg03和站點2-MG04

是可以接受的客戶端只知道一個副本集的一部分?因此,如果Web客戶端可以實際只能達到現場1,我建立了我的副本設置如下:

「site1的-MG01:270xx,site1的-MG02:270xx」

請問

我的客戶受到負面影響?我認爲它的工作方式,只要這些服務器之一是主要的,它會連接好嗎?如果一個Site 2 Mongo成爲主要的,我就不能連接?

回答

1

在Mongo中,所有的寫入都是針對主要的。 如果您的客戶是「只讀」,那麼您可以在查詢中使用「最近的」閱讀偏好。 另一種選擇是連接到非主節點並設置rs.slaveOk以允許客戶端讀取。 https://docs.mongodb.org/v3.0/reference/method/rs.slaveOk/

希望它有幫助。

1

Mongo副本集 - 客戶端是否需要了解所有這些?

否 - TBD

是可以接受的客戶端只知道一個副本集的一部分?

由於事實上,針對客戶端應用 - 通過Java驅動程序 - 它足以「知道」只有集合的單個成員。其餘的集合成員可以通過單一成員配置訪問。

我的客戶會受到負面影響嗎?

是,在僅設置一套單一數據中心會員部的這種情況下,你不保護自己的情況下,數據中心已關閉,您的客戶端最初無法連接到組。您應該更好地配置一個服務器地址數組,其中包含首先是西海岸的一員,然後是東海岸的一員。東海岸客戶端應用程序應該轉換的訂單。

爲了安全起見,您應該配置三個成員服務器地址,以保證如果該集合正常工作,則可以連接至三個倖存節點中的至少一個。在這種情況下,將仲裁器添加到中性數據中心中。如果兩名成員離開,它們很可能都來自同一個DC。

我認爲它的工作原理,是隻要這些服務器中的一個主要方式,它將連接罰款?

至於說,你不一定需要連接到主要,只有一個知道其中主要是其成員。

如果站點2 Mongo成爲主站,我只是無法連接?

是的,你可以。

我寧願客戶端永遠不會連接到服務器蒙戈在其他網站,即使他們的其中一個服務器主要

客戶當然會一直寫小學,在哪個DC無所謂。如果您希望應用程序始終從其指定的數據中心讀取數據,則最好的方法是通過read preference tag sets

+0

感謝您的反饋意見。偏好標籤聽起來很有希望,但他們可以說不要與網站2交談?我嘗試了我的設置,並按照您的建議發現了site2-mg03和site2-mg04,然後在無法與它們交談時拋出com.mongodb.MongoSocketOpenException。讀取你的鏈接,它聽起來不像標籤會停止連接? – javatestcase

+0

@javatestcase如果沒有顯示代碼和rs配置,很難說出了什麼問題。如果您使用適當的標籤配置西海岸會員並正確設置了「ReadPreference」,它應該可以工作。我不知道你發現*的意思。應用程序總是可以訪問遠程站點,但是使用合適的TagSet進行讀取操作時,它應該從「本地」站點成員讀取數據。 –

相關問題