1. 程式人生 > >spring cloud eureka 筆記

spring cloud eureka 筆記

1、在預設設定下,Eureka服務註冊中心也會將自己作為客戶端來嘗試註冊它自己,所以我們需要禁用它的客戶端註冊行為。 
禁止方式如下:

eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
  • 1
  • 2

如果不禁止的話,會得到如下錯誤:

com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect
2017-04-16 22:16:12.943  WARN 6864 --- [           main] c.n
.d.s.t.d.RetryableEurekaHttpClient : Request execution failure 2017-04-16 22:16:12.951 ERROR 6864 --- [ main] com.netflix.discovery.DiscoveryClient : DiscoveryClient_UNKNOWN/DESKTOP-MQ8D0C9:8761 - was unable to refresh its cache! status = Cannot execute request on any known server
  • 1
  • 2
  • 3

應該是因為當註冊中心將自己作為客戶端註冊的時候,發現在server上的埠被自己佔據了,然後就掛了。

如果要開啟自動註冊的話,可以啟動兩個server,互相註冊 
A:eureka.client.serviceUrl.defaultZone=http://localhost:1112/eureka/ 
B:eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

2、啟動服務註冊中心的時候,如果沒在application.properties中顯示指定埠的話,我的機子上預設是8761埠,然後雖然啟動沒問題,但是訪問local host:8761/的時候就訪問不了,但是如果指定埠server.port = 8761,就一切正常了。不知道為什麼,如果有人知道的話請指點一下。

3、啟動兩個client,過了一會,停了其中一個,訪問註冊中心時,介面上顯示了紅色粗體警告資訊:

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
  • 1

查閱了很多資料,終於瞭解了中間的問題。現將理解整理如下:

Eureka server和client之間每隔30秒會進行一次心跳通訊,告訴server,client還活著。由此引出兩個名詞: 
Renews threshold:server期望在每分鐘中收到的心跳次數 
Renews (last min):上一分鐘內收到的心跳次數。

前文說到禁止註冊server自己為client,不管server是否禁止,閾值(threshold)是1。client個數為n,閾值為1+2*n(此為一個server且禁止自注冊的情況) 
如果是多個server,且開啟了自注冊,那麼就和client一樣,是對於其他的server來說就是client,是要*2的

我開了兩個server,自注冊,相關資料如下 
這裡寫圖片描述 
閾值:1+2*1 
renews: 
1)自注冊 2 + 2*1 
2)非自注冊:2*1

Eurake有一個配置引數eureka.server.renewalPercentThreshold,定義了renews 和renews threshold的比值,預設值為0.85。當server在15分鐘內,比值低於percent,即少了15%的微服務心跳,server會進入自我保護狀態,Self-Preservation。在此狀態下,server不會刪除註冊資訊,這就有可能導致在呼叫微服務時,實際上服務並不存在。 
這種保護狀態實際上是考慮了client和server之間的心跳是因為網路問題,而非服務本身問題,不能簡單的刪除註冊資訊

stackoverflow上,有人給出的建議是: 
1、在生產上可以開自注冊,部署兩個server 
2、在本機器上測試的時候,可以把比值調低,比如0.49 

3、或者簡單粗暴把自我保護模式關閉

eureka.server.enableSelfPreservation=false                        

1.自我保護的目的是什麼?檔案指出,在“客戶可以獲得不再存在的例項”的情況下進行自我保護那麼建議何時開啟/關閉它?

此外,當自我保護功能開啟時,您可能會在Eureka伺服器控制檯警告中收到一條傑出的訊息:

緊急!EUREKA可能會不正當地聲稱,如果沒有。延期時間少於閾值,而且這些物品沒有過期只是為了安全。

現在,繼續使用Spring Eureka控制檯。

Lease expiration enabled    true/false
Renews threshold    5
Renews (last min)   4

我遇到了一個奇怪的閾值計數行為:當我單獨啟動Eureka伺服器時,閾值為1。

2.我有一臺Eureka伺服器,並配置registerWithEureka: false為阻止它在另一臺伺服器上註冊。那麼,它為什麼會出現在門檻值?

3.對於每個客戶,我開始將閾值計數增加+2。我想這是因為他們每分鐘傳送2條更新訊息,對嗎?

4.尤里卡伺服器從不傳送更新,因此最後一次更新總是低於閾值。這是正常的嗎?

renew threshold 5
rewnews last min: (client1) +2 + (client2) +2 -> 4

更新閾值:Eureka伺服器預計每分鐘從Eureka例項收到的更新。

例如,如果registerWithEureka設定為falseeureka.instance.leaseRenewalIntervalInSeconds則設定為30並執行2個Eureka例項。兩個Eureka例項將每分鐘向Eureka伺服器傳送4次更新,Eureka伺服器最小閾值為1(用程式碼編寫),因此閾值為5(此數字將乘以eureka.server.renewalPercentThreshold稍後討論的因素)。

SELF儲存模式:如果更新(最後一分鐘)小於更新閾值,自我儲存模式將被啟用。

因此在上面的例子中,SELF儲存模式被啟用,因為閾值是5,但是尤里卡伺服器只能接收4次更新/分鐘。

  1. 問題1:

自我保護模式的設計是為了避免網路連線失敗。Eureka例項A和B之間的連線性很好,但由於連線問題,B未能在短時間內將其租借給Eureka伺服器,此時Eureka伺服器不能簡單地將例項B踢出去。如果確實如此,例項儘管B可用,但A不會從Eureka伺服器獲得可用的註冊服務。所以這是SELF PRESERVATION MODE的目的,最好開啟它。

  1. 問題2:

最小閾值1寫入程式碼中。registerWithEureka設定為false,因此不會有Eureka例項暫存器,閾值將為1。

在生產環境中,通常我們會部署兩臺Eureka伺服器registerWithEureka並將其設定為true。因此,閾值將是2,並且Eureka伺服器將每分鐘更新兩次,所以RENEWALS ARE LESSER THAN THRESHOLD不會成為問題。

  1. 問題3:

你是對的。eureka.instance.leaseRenewalIntervalInSeconds定義每分鐘傳送到伺服器的更新次數,但會增加上述因素eureka.server.renewalPercentThreshold,預設值為0.85。

  1. 問題4:

是的,這很正常,因為閾值初始值設定為1.所以如果registerWithEureka設定為false,則更新總是低於閾值。

我有兩個建議:

  1. 部署兩臺Eureka伺服器並啟用registerWithEureka
  2. 如果您只想在demo / dev環境中進行部署,則可以將其設定eureka.server.renewalPercentThreshold為0.49,因此當您單獨啟動Eureka伺服器時,閾值將為0。

相關推薦

spring cloud eureka 筆記

1、在預設設定下,Eureka服務註冊中心也會將自己作為客戶端來嘗試註冊它自己,所以我們需要禁用它的客戶端註冊行為。 禁止方式如下:eureka.client.register-with-eureka=false eureka.client.fetch-registry=fa

Spring Cloud學習筆記Eureka Server註冊中心

Eureka Server提供服務註冊服務,各個節點啟動後,會在Eureka Server中進行註冊,這樣EurekaServer中的服務登錄檔中將會儲存所有可用服務節點的資訊,服務節點的資訊可以在介面中直觀的看到。我們簡單實現一下Eureka Server。 1.新建一個Maven專案

Spring Cloud學習筆記Eureka框架的原理

Eureka 服務發現與註冊:我們在呼叫微服務的時候,如果我們的微服務部署了多份,我們應該如何去呼叫?這裡就涉及到了服務發現與註冊。服務發現就是程式如何通過一個標誌來獲取服務列表,並且這個服務列表是能夠隨著服務的狀態而動態變更的。 Spring Cloud提供了多種註冊中心的支援:如Eur

spring cloud學習筆記(2)-- Eureka

傳統單體架構介紹及優缺點 一個專案包(war包,歸檔包)包含了應用的所有功能, 在沒有出現微服務概念之前,基本上都是這種架構形式存在, 我們一般把程式打包成一個檔案後,扔到tomcat或者jetty, jboss等應用伺服器中即可 特點: 部署很簡單,符合我們的思維;專案

Spring Cloud Eureka學習筆記

用於服務的註冊於發現 由兩個元件組成 Eureka Server 註冊中心 Eureka Client 服務註冊 Eureka Server(服務註冊中心) 先建立一個springboot專案,新增依賴的時候選擇如下 pom檔案如下 <?xml ve

Spring Cloud微服務實戰》讀書筆記之服務治理:Spring Cloud Eureka

摘要 服務治理是微服務架構最為核心和基礎的模組,用於實現各個微服務例項的自動化註冊與發現。Spring Cloud Eureka 是對Netflix Eureka的二次封裝,負責服務的治理。 關鍵詞:服務治理 一、服務治理介紹 服務治理是微服務架構最為核心和基礎

Spring Cloud學習筆記14——整合 Eureka Client

開發環境 JDK8+ Gradle4+ Spring Boot 2.0.0.M3 Spring Cloud Starter Netflix Eureka Client Finchley.M2 建立專案 新建專案資料夾: 將hello-world專案中的原始

spring-cloud學習筆記Eureka註冊中心(四)修改成IP顯示

修改配置類 eureka: instance: #使用IP訪問註冊中心 prefer-ip-address: true #在註冊中心status的時候顯示的格式,這裡是 ip:埠 instance-id: ${spring.cloud.c

Spring Cloud學習筆記1——服務治理(Eureka

1、搭建服務註冊中心 1)新建一個Spring Boot專案,取名為EurekaServer,程式碼見碼雲:https://gitee.com/wudiyong/EurekaServer.git,然後在pom.xml檔案中加入依賴: <parent> &

03.Spring Cloud學習筆記之服務註冊與服務發現元件Eureka

前言 從本篇部落格開始將正式進入Spring Cloud的實戰部分,因為博主用了很長時間的Dubbo,並且Spring Cloud和Dubbo都是微服務框架,它們有很多相似之處,所以可能在部落格中提及進行類比,如果沒有接觸過Dubbo的朋友直接略過該部分內容即

Spring cloud Eureka 服務治理(高可用服務中心)

image 本地host available png active url 狀態 name spring 在微服務的架構中,我們考慮發生故障的情況,所以在生產環境中我們需要對服務中各個組件進行高可用部署。 Eureka Server 的高可用實際上就是將自己作為服務想其

Spring cloud eureka server 錯誤問題記錄

clu spring ces replica 檢查 fail cluster rep card 1.報此錯誤:2017-06-07 09:02:44.308 ERROR 340 --- [et_localhost-19] c.n.e.cluster.ReplicationT

1 Spring Cloud Eureka服務治理

聲明 打印日誌 pac cti .get 變化 其他 nod zookeepe 註:此隨筆為讀書筆記。《Spring Cloud微服務實戰》 什麽是微服務?   微服務是將一個原本獨立的系統拆分成若幹個小型服務(一般按照功能模塊拆分),這些小型服務都在各自獨立的進程中運行,

關於Spring Cloud Eureka

spring spring boot spring cloud java 代碼結構 首先,我們來嘗試使用Spring Cloud Eureka來實現服務治理。 Spring Cloud Eureka是Spring Cloud Netflix項目下的服務治理模塊。而Spring Cloud

Spring Cloud Eureka 2 (Eureka Server搭建服務註冊中心)

class XML bsp gist client intellij 嘗試 ati register 工具:IntelliJ IDEA 2017.1.2 x64、maven3.3.9 打開IDE file===>new===>project next

Spring Cloud Eureka 1(eureka簡介)

運行 清單 服務調用 單元 通過 進程 其中 服務中心 進行 Spring Cloud Eureka 是 Spring Cloud Netflix微服務套件中的一部分,基於netflix eureka做了二次封裝,主要負責完成微服務架構中的服務治理功能。 服務治理: 服務治

Spring Cloud Eureka 3 (Eureka client註冊服務提供者)

搭建 查看 url 註冊 server 分享圖片 ima oca led 在完成服務註冊中心的搭建後我們來嘗試下將一個既有的spring boot應用加入eureka的服務治理體系中 新建一個spring boot項目加入eureka client依賴 這裏加入

Spring Cloud Eureka 4 (高可用服務註冊中心)

自己 def port hello -c 圖片 sys img 效果 在微服務這樣的分布式環境中,我們需要充分考慮發生故障的情況,所以在生產環境中必須考慮對各個組件進行高可用部署,對於服務註冊中心也是一樣。 Eureka Server 的高可用實際上就是講自己作為服

Spring Cloud Eureka 5 (服務發現與消費-簡單的robbin使用)

boot ng- clas hello enabled 中心 相同 service 服務註冊 通過上述介紹,我們已經有了服務註冊中心和服務提供者 下面我們來嘗試構建一個服務的消費者 它要完成兩個功能,發現服務和消費服務,其中發現服務由eureka客戶端完成,消費服務由rib

【轉】spring cloud eureka 參數配置

lint 客戶 就會 大於 health 微服務 表示 安全 穩定 eureka.client.registry-fetch-interval-seconds 表示eureka client間隔多久去拉取服務註冊信息,默認為30秒,對於api-gateway,如果要迅速獲