Eureka注冊中心高可用及常用配置項


一、前言

  前面已經簡單的介紹了 Eureka 注冊中心的使用以及查看。下面將繼續進行 Eureka 的說明以及應用。

二、Eureka 的高可用搭建

  在實際生產項目中,為了保證服務的可用性,連續性,一般來說,都會去搭建應用的集群來保證服務高可用。Eureka 是天生集群的,搭建配置相當簡單:不論你有多少的機器部署,只要相互之間指定對方的注冊中心地址就可以了。無需更多的配置項,方便,快捷。

  有幾台機器部署 Eureka,就相互注冊下關系,多個 Eureka Server 之間通過復制的方式完成注冊服務的同步。本文中使用兩個節點來進行模擬使用,如果三台或者更多機器的話,同理可配置。

  1、創建配置文件

    Eureka 注冊中心的項目搭建,之前文中已經搭建並可以使用。新增配置文件:application-ha02.properties、application-ha03.properties

    application-ha02.properties 配置如下

server.port=8082
spring.application.name=nativeEureka
eureka.environment=ha02

eureka.instance.hostname=server2
#是否將自己作為客戶端注冊到注冊中心:false-不注冊。默認為true。集群搭建中,設置true
eureka.client.register-with-eureka=true
#是否需要從注冊中心檢索獲取服務的注冊信息。默認值為true
#單機版的可設置成false,集群版的由於需要同步其他節點的服務注冊數據,故設成true。
eureka.client.fetch-registry=true
#是否開啟自我保護模式,默認值true
#eureka server默認在運行期間會去統計心跳失敗比例在 15 分鍾之內是否低於 85%,如果低於 85%,Eureka Server 會將這些實例保護起來,讓這些實例不會過期,
#但是在保護期內如果服務剛好這個服務提供者非正常下線了,此時服務消費者就會拿到一個無效的服務實例,此時會調用失敗
eureka.server.enable-self-preservation=false
#掃描失效服務的間隔時間,單位毫秒,默認值 60 * 1000
eureka.server.eviction-interval-timer-in-ms=10000
#服務地址
eureka.client.service-url.defaultZone= http://server3:8083/eureka/

    application-ha03.properties 配置如下

server.port=8083
spring.application.name=nativeEureka
eureka.environment=ha03

eureka.instance.hostname=server3
#是否將自己作為客戶端注冊到注冊中心:false-不注冊。默認為true。集群搭建中,設置true
eureka.client.register-with-eureka=true
#是否需要從注冊中心檢索獲取服務的注冊信息。默認值為true
#單機版的可設置成false,集群版的由於需要同步其他節點的服務注冊數據,故設成true。
eureka.client.fetch-registry=true
#是否開啟自我保護模式,默認值true
#eureka server默認在運行期間會去統計心跳失敗比例在 15 分鍾之內是否低於 85%,如果低於 85%,Eureka Server 會將這些實例保護起來,讓這些實例不會過期,
#但是在保護期內如果服務剛好這個服務提供者非正常下線了,此時服務消費者就會拿到一個無效的服務實例,此時會調用失敗
eureka.server.enable-self-preservation=false
#掃描失效服務的間隔時間,單位毫秒,默認值 60 * 1000
eureka.server.eviction-interval-timer-in-ms=10000
#服務地址
eureka.client.service-url.defaultZone= http://server2:8082/eureka/

  其中,server2、server3 為修改本地 hosts 文件。

  2、分別啟動服務

     啟動類 NativeEurekaApplication 中,修改加載配置文件,分別應用 ha02 、ha03 配置文件,組建高可用:

package com.cfang;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
import org.springframework.context.annotation.Profile;

@SpringBootApplication
@EnableEurekaServer
public class NativeEurekaApplication {

    public static void main(String[] args) {
//        SpringApplication.run(NativeEurekaApplication.class, args);
        SpringApplication application = new SpringApplication(NativeEurekaApplication.class);
//        application.setAdditionalProfiles("ha02");
        application.setAdditionalProfiles("ha03");
        application.run(args);
    }
}

  上面代碼中,兩次分別啟動 ha02 和 ha03,啟動兩個 Eureka 注冊中心。

  在單節點啟動的時候,會持續報錯  Cannot execute request on any known server、Caused by: java.net.ConnectException: Connection refused: connect。此類異常消息,是因為向集群中其他 Eureka 注冊服務時候,因為未開啟而報錯。正常可忽略,待后續逐步啟動了所有 Eureka 服務后,此異常會解決消失。

  3、控制台查看

  啟動好后,在 Eureka 控制台中可查看,分別訪問:http://server2:8082/http://server3:8083/

 

 

 

   從上面可以看出,DS Replicas、registered-replicas、available-replicas分別有了其他 Eureka 的地址,即:相互Replicate、相互注冊,則說明Eureka集群成功。

  4、客戶端使用

  客戶端使用過程中,只需要修改配置文件中的注冊中心地址就行了:

eureka.client.service-url.defaultZone= http://server2:8082/eureka/,http://server3:8083/eureka/

  有幾個 Eureka 提供服務,就在后面加上就行了。重啟服務,則在所有的 Eureka 上都能查看到服務注冊信息。

三、Eureka 的安全認證

  Eureka 可以增加使用 用戶名 和 密碼 的方式進行安全訪問驗證。有點類似 ActiveMQ 的用戶名密碼認證。

  1、開啟認證

   Eureka 注冊中心項目 nativeEureka 中,增加 pom 依賴:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

  新增config

package com.cfang.configuration;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);
        http.csrf().disable(); //關閉csrf過濾
        http.authorizeRequests().anyRequest().authenticated().and().httpBasic();
    }
    
}

  修改配置文件 application.properties

server.port=8081
spring.application.name=nativeEureka

eureka.instance.hostname= server1
#是否將自己作為客戶端注冊到注冊中心:false-不注冊。默認為true。
eureka.client.register-with-eureka=false
#是否需要從注冊中心檢索獲取服務的注冊信息。默認值為true
#單機版的可設置成false,集群版的由於需要同步其他節點的服務注冊數據,故設成true。
eureka.client.fetch-registry=false
#是否開啟自我保護模式,默認值true
#eureka server默認在運行期間會去統計心跳失敗比例在 15 分鍾之內是否低於 85%,如果低於 85%,Eureka Server 會將這些實例保護起來,讓這些實例不會過期,
#但是在保護期內如果服務剛好這個服務提供者非正常下線了,此時服務消費者就會拿到一個無效的服務實例,此時會調用失敗
eureka.server.enable-self-preservation=false
#掃描失效服務的間隔時間,單位毫秒,默認值 60 * 1000
eureka.server.eviction-interval-timer-in-ms=10000
#安全認證信息
security.basic.enabled=true
spring.security.user.name=root
spring.security.user.password=123456
#服務地址
eureka.client.service-url.defaultZone= http://${spring.security.user.name}:${spring.security.user.password}@server1:8081/eureka/

  主要修改增加安全認證信息。

  完成以上幾個步驟后,啟動 Eureka 注冊中心,訪問 http://server1:8081/。會彈出輸入用戶名、密碼:

   輸入配置文件中配置的用戶名、密碼后,登入 Eureka 控制台。

  2、Eureka client 端修改

    client 端,只需要修改配置文件,在注冊的時候的地址信息就好了,帶上認證信息:

server.port=8701
spring.application.name=nativefshService

#是否將自己作為客戶端注冊到注冊中心:false-不注冊
eureka.client.register-with-eureka=true
#安全認證信息
spring.security.user.name=root
spring.security.user.password=123456
#服務地址
#eureka.client.service-url.defaultZone= http://server2:8082/eureka/,http://server3:8083/eureka/
eureka.client.service-url.defaultZone= http://${spring.security.user.name}:${spring.security.user.password}@server1:8081/eureka/

  如果用戶名、密碼配置不正確的話,服務注冊失敗,會報錯:com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server 。

四、Eureka 的常用配置項

  1、通用配置

    spring.application.name=xxxxxxxxxxxxx :應用名稱配置,將會出現在 Eureka 注冊中心 Application 列

    server.port=8701 :應用端口,默認值為 8761

    eureka.instance.hostname= server1 :服務注冊中心應用實例主機名

    eureka.instance.ip-address=127.0.0.1 :應用實例ip

    eureka.instance.prefer-ip-address=false :客戶端向注冊中心注冊時,相較於 hostname 是否有限使用 ip。在服務中心注冊后,鼠標放到服務的 Status 列的鏈接上,無需點擊,左下角能看出配置的變化。

    
    eureka.instance.environment=dev :該實例的環境配置

    eureka.client.register-with-eureka=false :是否將自己注冊到 Eureka 注冊中心。單機情況下的 Eureka Server 不需要注冊,集群的 Eureka Server 以及 Eureka Client 需要注冊。默認值 true

    eureka.client.fetch-registry=false :是否需要從注冊中心檢索獲取服務的注冊信息。單機情況下的 Eureka Server 不需要獲取。集群的 Eureka Server 以及 Eureka Client 需要獲取。默認值 true

    eureka.client.service-url.defaultZone= http://${spring.security.user.name}:${spring.security.user.password}@server1:8081/eureka/ :Eureka 服務的地址信息,中間的占位符為安全認證開啟時使用,如果 Eureka Server 為集群狀態,則逗號分隔,依次書寫即可。

  2、Eureka Server 配置

    eureka.server.enable-self-preservation = false :是否開啟自我保護模式,eureka server默認在運行期間會去統計心跳失敗比例在 15 分鍾之內是否低於 85%,如果低於 85%,Eureka Server 會將這些實例保護起來,讓這些實例不會過期,但是在保護期內如果服務剛好這個服務提供者非正常下線了,此時服務消費者就會拿到一個無效的服務實例,此時會調用失敗。默認 true

    eureka.server.eviction-interval-timer-in-ms=10000 :掃描失效服務的時間間隔。單位 毫秒。 默認值 60 * 1000

    security.basic.enabled=true :開啟 Eureka 安全認證

    spring.security.user.name=root :安全認證用戶名

    spring.security.user.password=123456 :安全認證密碼

  3、Eureka Client 配置

    eureka.client.registry-fetch-interval-seconds=30 :客戶端獲取服務注冊信息時間間隔,單位 秒。默認 30

    eureka.instance.appname=eureka-client :服務名,默認取 spring.application.name 配置值,如果沒有則為 unknown

    eureka.instance.lease-expiration-duration-in-seconds=90 :服務的失效時間,失效的服務將被注冊中心刪除。時間間隔為最后一次注冊中心接收到的心跳時間。單位 秒,默認 90

    eureka.instance.lease-renewal-interval-in-seconds=30 :應用實例給注冊中心發送心跳的間隔時間,用於表明該服務實例可用。單位 秒。默認30      

    eureka.client.eureka-server-connect-timeout-seconds=5 :client 連接 Eureka 注冊中心的超時時間,單位 秒,默認 5        

    eureka.client.eureka-server-read-timeout-seconds=8 :client 對 Eureka 服務器讀取信息的超時時間,單位 秒,默認 8

    eureka.client.eureka-connection-idle-timeout-seconds=30 :client 連接 Eureka 服務端后空閑等待時間,單位 秒,默認 30      

    eureka.client.eureka-server-total-connections=200 :client 到 所有Eureka 服務端的連接總數,默認 200    

    eureka.client.eureka-server-total-connections-per-host=50 :client 到 Eureka 單服務端的連接總數,默認 50    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM