Spring Cloud Eureka 搭建 & 集群方式

關於Eureka的詳細介紹已經在上篇文章通俗的講瞭。

Eureka 本身是使用java 來開發的,Spring Cloud 使用 Spring Boot 技術對 Eureka進行瞭封裝,所以在Spring Cloud中使用Eureka非常方便,隻需要引入spring-cloud-starter-netflix-eureka-server依賴即可,然後啟動即可。

1.Eureka 搭建

創建一個普通的Spring Boot項目,創建時添加Eureka依賴:

項目創建成功後,在項目啟動類上添加註解,標記該項目是一個Eureka Server:

@SpringBootApplication
@EnableEurekaServer //開啟Eureka
public class EurekaApplication {
      public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    } 
}

在application.properties 中配置:

# 給當前服務取名
spring.application.name=eureka
#端口號
server.port=1111
#默認情況下,eureka server 也是一個普通的微服務,所以當它還是一個註冊中心的時候,會有兩層身份:
# 1.註冊中心
# 2.普通服務,即當前服務會自己註冊到自己上面來
# false 意為當前項目不要註冊到註冊中心上
eureka.client.register-with-eureka=false
# 表示是否從 eureka server 上註冊信息
eureka.client.fetch-registry=false

然後啟動項目,項目啟動成功後在瀏覽器訪問:http://localhost:1111 就可以看到Eureka的管理頁面瞭。

如下:

 2. Eureka 集群

 使用瞭註冊中心後,所有的服務都要通過服務註冊中心來進行信息交換。服務註冊中心的穩定性就非常重要瞭,一旦服務註冊中心掉線,會影響到整個系統的穩定性。所以在實際開發中,Eureka一般都是以集群的形式出現的。

Eureka集群,實際上就是啟動多個Eureka實例, 多個Eureka實例之間互相註冊,互相同步數據,共同組成一個Eureka集群。

搭建Eureka集群,首先要修改電腦的hosts文件(c:\windows\System32\drivers\etc\hosts),Linux上面搭建請點擊這篇文章查看。

 我這裡為瞭方便操作,直接在第一步搭建 eureka 的 demo基礎上,在resources目錄下,再添加兩個配置文件,分別如下:

application-a.properties配置如下:

# 給當前服務取名
spring.application.name=eureka
#端口號
server.port=1111
eureka.instance.hostname=eurekaA
#默認情況下,eureka server 也是一個普通的微服務,所以當它還是一個註冊中心的時候,會有兩層身份:
# 1.註冊中心
# 2.普通服務,即當前服務會自己註冊到自己上面來
# false 意為當前項目不要註冊到註冊中心上
eureka.client.register-with-eureka=true
# 表示是否從 eureka server 上註冊信息
eureka.client.fetch-registry=true
# A服務註冊到B服務上( 配置多個的話後面用逗號隔開)
eureka.client.service-url.defaultZone=http://eurekaB:1112/eureka

application-b.properties配置如下:

# 給當前服務取名
spring.application.name=eureka
#端口號
server.port=1112
eureka.instance.hostname=eurekaB
#默認情況下,eureka server 也是一個普通的微服務,所以當它還是一個註冊中心的時候,會有兩層身份:
# 1.註冊中心
# 2.普通服務,即當前服務會自己註冊到自己上面來
# false 意為當前項目不要註冊到註冊中心上
eureka.client.register-with-eureka=true
# 表示是否從 eureka server 上註冊信息
eureka.client.fetch-registry=true
 
eureka.client.service-url.defaultZone=http://eurekaA:1111/eureka

配置完成後對當前項目打包, 

打完包在IDEA命令行啟動兩個實例。兩個啟動命令分別如下:

java -jar eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=a
java -jar eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=b

註意:啟動第一個a之後你會發現控制臺報錯,是因為它一直發送心跳,而同時b還沒有上線,等b也啟動後錯誤即可消失。如果還報錯,那就是代碼的問題瞭。

 啟動成功後,就可以看到兩個服務之間互相註冊,共同組成一個集群。

如下圖:

2.1 Eureka 集群原理

官方的Eureka集群架構圖:

在這個集群架構中,Eureka Server 之間過 Replicate 進行數據同步,不同的 EurekaServer 之間不區分主從節點,所有節點都是平等的。

節點之間,通過置頂 serviceUrl 來相註冊,形成一個集群,進而提高節點的可用性。

在 Eureka Server 集群中,如果有某一個節點宕機,Eureka Client 會自動切到新的 Eureka Server 上。每一個Eureka Server,都會互相同步數據。

Eureka Server 的連接方式,可以是單線的,就是A——>b——>C,此時,A的數據也會和C之間相同步。

但是一般不建議這種寫法,在我們配置 serviceUrl 時,可以指定多個註冊地址,即A可以即註冊到B上,也可以同時註冊到C上。

Eureka分區:

1.region:地理上的不同區域

2.zone:具體的機房

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: