通過docker和docker-compose實現eureka高可用

 最近新項目有使用到springcloud 和docker,關於這兩個技術就不分別介紹了,現在分享一下通過docker,docker-compose實現eureka高可用的方案。

   1. eureka server項目目錄結構:

  

   2. eureka 配置文件配置:

    

複製代碼
server:
  port: 8900

spring:
  application:
    name: eureka-server
  profiles:
    active: dev

management:
  security:
    enabled: false
  health:
    rabbit:
      enabled: false

---
spring:
  profiles: dev

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:${server.port}/eureka/
    register-with-eureka: false
    fetch-registry: false
  instance:
    hostname: localhost
    prefer-ip-address: true

---
spring:
  profiles: test_ha_1

eureka:
  client:
    serviceUrl:
      defaultZone: http://eurekaserver2:${server.port}/eureka/
  instance:
    hostname: eurekaserver1
#    prefer-ip-address: true  該配置爲true表示註冊到eureka上的是IP,如果這樣的化,eureka服務器就不能通過服務器發現Replicas。
#                             故如果想通過Docker實現eureka高可用,該配置最好使用默認值(false)
#                             此處配置爲true且實現高可用也不是沒有辦法,就是每個eureka服務需映射到Docker環境外,且知道ip。
---
spring:
  profiles: test_ha_2

eureka:
  client:
    serviceUrl:
      defaultZone: http://eurekaserver1:${server.port}/eureka/
  instance:
    hostname: eurekaserver2
#    prefer-ip-address: true
複製代碼

    3. docker maven插件配置:

    

複製代碼
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.13</version>
                <configuration>
                    <imageName>${docker.image.prefix}/${project.artifactId}:${project.version}</imageName>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <forceTags>true</forceTags>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                        </resource>
                    </resources>
                </configuration>
                <!--<groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.13</version>
                <configuration>
                    <imageName>itmuch/${project.artifactId}:${project.version}</imageName>
                    <forceTags>true</forceTags>
                    <baseImage>java</baseImage>
                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>-->
            </plugin>
        </plugins>
    </build>
複製代碼

    4. Docker file 文件內容:

   

FROM java:8

ADD eureka-server-1.0.0.jar eurekaserver.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/eurekaserver.jar"]

    5. 生成 eureka server 鏡像:

    通過執行 mvn clean package docker:build 命令,生成eurekaserver鏡像,如下:

     

      6.  通過docker-compose 編排:

      

複製代碼
version: '2'
services:
  eurekaserver1:
    image: raynspace/eureka-server:1.0.0
    ports:
      - "7900:8900"
    environment:
      - spring.profiles.active=test_ha_1

  eurekaserver2:
    image: raynspace/eureka-server:1.0.0
    #hostname: eurekaserver2
    ports:
      - "7800:8900"
    environment:
      - spring.profiles.active=test_ha_2
複製代碼

     7. 跳轉至項目目錄下,執行docker-compose up 命令,自動生成eureka server 兩個容器:

   

     8. 由於已經把eureka 端口映射出來,所以本地通過端口訪問eureka,查看eureka 服務狀態:

  

  通過上圖可知,在registered-replicas和available-replicas兩項均能看見另外一個eureka服務,至此eureka 集羣搭建完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章