先簡單描述一下試驗:
試驗在一台機器上進行,假設有host文件中配置了以下內容
127.0.0.1 left 127.0.0.1 center 127.0.0.1 right
試驗中搭建三個注冊中心實例分別命名為left(1111端口)、center(1110端口)、right(1112端口),構成集群,他們的 spring.application.name均為eureka-server,但是端口不同。
為了方便說明,再定義個名詞:“注冊到”
假如本文提及A注冊到了B,那就是在說服務A的eureka.client.service-url.defaultZone里寫上了注冊中心B的地址。
試驗也證明了一旦某個服務A注冊到了某個注冊中心B,那么A會把自己的相關信息報給B。
試驗得到的結論:
1、任意兩個節點A和B想要構成真正的集群,必須互相注冊對方的主機名(或者ip)地址,即A注冊到了B,且B也同時注冊到了A。
2、使用ip注冊會在eureka管理頁面上顯示 unavailable-replicas,但這並不妨礙使用,屬於誤報
3、如果left注冊到了center,而center 沒有注冊到left,那么注冊到left的服務,會同步到center上,而注冊到center的服務不會同步到left上。
4、想在eureka的管理頁面上不顯示 unavailable-replicas,則注冊中心的地址必須使用主機名而非ip地址,即hosts文件中配置的left、center、right之類。
5、服務的信息的同步不會鏈式傳遞,只能同步一個節點。即:如果left注冊到了center,center注冊到了right,那么如果某個服務A只注冊到了left上,left會同步A服務的信息給center,但是center不會同步給right
6、一個服務無法同時注冊到多個未做集群的注冊中心上的
7、如果【eureka.client.service-url.defaultZone】中的地址直接用的IP,那么一定不要配【eureka.instance.prefer-ip-address=true】,不然你的Eureka集群將無法正常工作。
8、第七條主要時因為在多網卡環境中eureka無法正確的選擇網絡環境(網卡),在使用docker之后才發現。
#在docker中運行的時候,為了控制網絡環境,除了使用host外還需要指定網絡,可以通過忽略網卡或者選擇網段的方式進行
#忽略網卡spring.cloud.inetutils.ignored-interfaces[0]=eth0 # 正則表達式
#選擇網絡spring.cloud.inetutils.preferredNetworks[0]=^192\.168
測試使用的版本:Dalston.SR1
