SpringCloud註冊中心高可用搭建

茅坤寶駿氹發表於2018-05-01

轉載自 SpringCloud註冊中心高可用搭建


Spring Cloud的註冊中心可以由Eureka、Consul、Zookeeper、ETCD等來實現,這裡推薦使用Spring Cloud Eureka來實現註冊中心,它基於Netfilix的Eureka做了二次封裝,完成分散式服務中服務治理的功能,微服務系統中的服務註冊與發現都通過這個註冊中心來進行管理。

引入Eureka Server依賴

之前的文章基礎上加入Spring Cloud的依賴,現在再加入註冊中心Eureka Server的依賴。

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
    </dependency>
</dependencies>

新增啟動類,開啟Eureka Server功能

在包根目錄下加入啟動類:

@EnableEurekaServer
@SpringBootApplication
public class RegisterApplication {

    public static void main(String[] args) {
        new SpringApplicationBuilder(RegisterApplication.class).bannerMode(Banner.Mode.LOG)
                .run(args);
    }
}

@EnableEurekaServer註解即開啟註冊中心伺服器的功能。

新增Eureka配置

在application.yml中加入如下配置:

spring: 
  application: 
    name: register-center
  profiles: 
    active: register-center1

eureka:
  instance: 
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ipAddress}:${server.port}
    lease-expiration-duration-in-seconds: ${lease-expiration-duration-in-seconds}
    lease-renewal-interval-in-seconds: ${lease-renewal-interval-in-seconds}
  server: 
    enable-self-preservation: ${enable-self-preservation}  
    eviction-interval-timer-in-ms: ${eviction-interval-timer-in-ms}
  client:
    register-with-eureka: true
    fetch-registry: true
    serviceUrl: 
      defaultZone: ${register-center.urls}

---  
spring: 
  profiles: register-center1

server: 
  port: ${register-center1.server.port}

---
spring: 
  profiles: register-center2

server: 
  port: ${register-center2.server.port}

  1. 這裡做了兩臺註冊中心的高可用配置register-center1,register-center2,也可以做多臺,既然是高可用,每個註冊中心都向別的註冊中心註冊自己。
  2. Maven filter配置
  3. ${}裡面的配置由maven resource filter來打包進行控制,不同的環境使用不同的配置檔案。

如filter-dev.properties的配置參考如下:

#url
register-center1.server.ip=192.168.1.22
register-center2.server.ip=192.168.1.23
register-center.urls=http://${register-center1.server.ip}:${register-center1.server.port}/eureka/,http://${register-center2.server.ip}:${register-center2.server.port}/eureka/

#port
register-center1.server.port=7001
register-center2.server.port=7002

#config
enable-self-preservation=false
eviction-interval-timer-in-ms=5000
lease-expiration-duration-in-seconds=20
lease-renewal-interval-in-seconds=6

Spring Cloud配置詳解

Spring Boot的配置參考Spring Boot系列文章,這裡只對Spring Cloud用到的配置解釋。

spring.application.name:配置應用名稱,在註冊中心中顯示的服務註冊名稱。

spring.cloud.client.ipAddress:獲取客戶端的IP地址。

eureka.instance.prefer-ip-address:配置為true為喜歡IP,即連線註冊中心使用IP地址形式,也可以使用HOSTNAME,但生產環境不推薦。

eureka.instance.instance-id:配置在註冊中心註冊的唯一例項ID。

eureka.instance.lease-expiration-duration-in-seconds:指示eureka伺服器在接收到最後一個心跳之後等待的時間(秒),然後才能從此檢視中刪除此例項,並禁止此例項的流量。將此值設定得太長可能意味著流量可以路由到例項,即使例項不存在。設定此值太小可能意味著,由於臨時網路故障,例項可能會被取消流量。此值將設定為至少高於lease-renewal-interval-in-seconds中指定的值。

eureka.instance.lease-renewal-interval-in-seconds:指示eureka客戶端需要向eureka伺服器傳送心跳以指示它仍然存在的頻率(以秒為單位)。如果在lease-expiration-duration-in-seconds中指定的時間段內未收到心跳線,則eureka伺服器將從其檢視中刪除該例項,因此不允許此例項的流量。請注意,如果該例項實現HealthCheckCallback,然後決定使其本身不可用,則該例項仍然可能無法訪問流量。

eureka.server.enable-self-preservation:配置註冊中心是否開啟服務的自我保護功能。

eureka.server.eviction-interval-timer-in-ms:配置註冊中心清理無效節點的時間間隔,預設60000毫秒,即60秒。

eureka.client.register-with-eureka:配置為true指示此例項將其資訊註冊到eureka伺服器以供其他人發現。在某些情況下,您不希望發現例項,而您只想發現其他例項配置為false。

eureka.client.fetch-registry:指示該客戶端是否應從eureka伺服器獲取eureka登錄檔資訊。。

eureka.client.serviceUrl.defaultZone:Eureka伺服器地址。

啟動註冊中心

這樣一個兩個註冊心的Eureka Server就搭好了,啟動的時候使用不同的Profile來指定不同的埠。

spring-boot:run -Drun.profiles=register-center1  -P dev
spring-boot:run -Drun.profiles=register-center2  -P dev

相關文章