1. 程式人生 > >微服務之springCloud和docker-Eureka(一)

微服務之springCloud和docker-Eureka(一)

決策 config snap service 每次 entry eas pen end

前言

本文記錄怎麽搭建服務註冊中心eureka,然後打包成docker鏡像,用docker swarm部署eureka集群

1、環境
spring boot 1.5.1.RELEASE,是開箱即用,提供一系列大型項目常用的非功能性特征的快速度開發工具 spring boot官網
spring cloud Camden SR5,Spring Cloud 為開發者提供了在分布式系統(如配置管理、服務發現、斷路器、智能路由、微代理、控制總線、一次性 Token、全局鎖、決策競選、分布式會話和集群狀態)操作的開發工具集 spring cloud官網
開發工具 jdk1.8/IntelliJ idea2016/maven3.3

2、創建父空項目 microservice-spring-cloud

3、父項目的pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.2.RELEASE</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.jacky</groupId>
    <artifactId>microservice-spring-cloud</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>microservice-discovery-eureka-ha</module>
    </modules>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <docker.image.prefix>jacky</docker.image.prefix><!--配置鏡像倉庫的屬性-->
        <docker.repostory>192.168.6.132:5000</docker.repostory><!--配置鏡像倉庫的對應的地址與端口-->
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Camden.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <!--添加利用maven插件構建docker鏡像的插件依賴-->
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>com.spotify</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>0.4.13</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

4、創建子項目microservice-discovery-eureka-ha

5、microservice-discovery-eureka-ha工程的pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>microservice-spring-cloud</artifactId>
        <groupId>com.jacky</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>microservice-discovery-eureka-ha</artifactId>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <executions>
                    <!--設置在執行maven 的install時構建鏡像-->
                    <execution>
                        <id>build-image</id>
                        <phase>install</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!--安裝了docker的主機,並且打開了api remote接口設置-->
                    <dockerHost>http://192.168.6.130:5678</dockerHost>
                    <pushImage>true</pushImage><!--設置上傳鏡像到私有倉庫,需要docker設置指定私有倉庫地址-->
                    <!--鏡像名稱-->
                    <imageName>${docker.repostory}/${docker.image.prefix}/${project.artifactId}:${project.version}</imageName>
                    <!--鏡像的基礎版本-->
                    <baseImage>java:openjdk-8-jdk-alpine</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>
</project>

5、microservice-discovery-eureka-ha工程的application.yml文件

spring:
  application:
    name: EUREKA-HA
security:
  basic:
    enabled: true
  user:
    name: jacky
    password: admin
---
server:
  port: 8761
spring:
  profiles: peer1
eureka:
  instance:
    hostname: peer1        #Eureka實例的主機名
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}
  client:
    serviceUrl:
      defaultZone: http://jacky:admin@peer2:8762/eureka/,http://jacky:admin@peer3:8763/eureka/  #Eureka節點相互註冊
      register-with-eureka: true
---
server:
  port: 8762
spring:
  profiles: peer2
eureka:
  instance:
    hostname: peer2      #Eureka實例的主機名
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}
  client:
    serviceUrl:
      defaultZone: http://jacky:admin@peer1:8761/eureka/,http://jacky:admin@peer3:8763/eureka/
      register-with-eureka: true
---
server:
  port: 8763
spring:
  profiles: peer3
eureka:
  instance:
    hostname: peer3    #Eureka實例的主機名
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}
  client:
    serviceUrl:
      defaultZone: http://jacky:admin@peer1:8761/eureka/,http://jacky:admin@peer2:8762/eureka/
      register-with-eureka: true

6、創建EurekaHaApplication.java文件

package com.jacky.cloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaHaApplication {
  public static void main(String[] args) {
    SpringApplication.run(EurekaHaApplication.class, args);
  }
}

7、在父目錄下創建docker-compose.yml文件

version: "3"
services:
  peer1:      # 默認情況下,其他服務可以使用服務名稱連接到該服務。因此,對於eurekaService1的節點,它需要連接http://eurekaService2/3:951X/eureka/,因此需要配置該服務的名稱是eurekaService1。
    image: 192.168.6.132:5000/jacky/microservice-discovery-eureka-ha:1.0-SNAPSHOT
    deploy:
      replicas: 1   #定義 replicated 模式的服務的復本數量
      update_config:
        parallelism: 1    #每次更新復本數量
        delay: 2s       #每次更新間隔
      restart_policy:
        condition: on-failure     #定義服務的重啟條件
    networks:
      - eureka-net
    ports:
      - "8761:8761"
    environment:
      - spring.profiles.active=peer1
  peer2:    # 高可用eureka註冊節點2
    image: 192.168.6.132:5000/jacky/microservice-discovery-eureka-ha:1.0-SNAPSHOT
    deploy:
      replicas: 1   #定義 replicated 模式的服務的復本數量
      update_config:
        parallelism: 1    #每次更新復本數量
        delay: 2s       #每次更新間隔
      restart_policy:
        condition: on-failure     #定義服務的重啟條件
    networks:
      - eureka-net
    ports:
      - "8762:8762"
    environment:
      - spring.profiles.active=peer2
  peer3:    # 高可用eureka註冊節點3
    image: 192.168.6.132:5000/jacky/microservice-discovery-eureka-ha:1.0-SNAPSHOT
    deploy:
      replicas: 1   #定義 replicated 模式的服務的復本數量
      update_config:
        parallelism: 1    #每次更新復本數量
        delay: 2s       #每次更新間隔
      restart_policy:
        condition: on-failure     #定義服務的重啟條件
    networks:
      - eureka-net
    ports:
      - "8763:8763"
    environment:
      - spring.profiles.active=peer3
networks:
  eureka-net:            #網絡名稱
    driver: overlay

8、打包
技術分享圖片

雙擊install

9、在192.168.6.130機器上查看鏡像
技術分享圖片

表示上傳成功

10、把的docker-compose.yml文件上傳到擁有swarm環境下,執行命令如下

[root@node1 docker-compose]# docker stack deploy -c docker-compose.yml eureka
Creating service eureka_peer2
Creating service eureka_peer3
Creating service eureka_peer1
[root@node1 docker-compose]# docker stack ps eureka
ID            NAME            IMAGE                                                                   NODE             DESIRED STATE  CURRENT STATE           ERROR  PORTS
njhk2gkh7b6r  eureka_peer1.1  192.168.6.132:5000/jacky/microservice-discovery-eureka-ha:1.0-SNAPSHOT  node3.jacky.com  Running        Running 55 seconds ago         
y5xwabq42zx4  eureka_peer3.1  192.168.6.132:5000/jacky/microservice-discovery-eureka-ha:1.0-SNAPSHOT  node3.jacky.com  Running        Running 55 seconds ago         
468xoiu6lv6l  eureka_peer2.1  192.168.6.132:5000/jacky/microservice-discovery-eureka-ha:1.0-SNAPSHOT  node2.jacky.com  Running        Running 57 seconds ago

說明eureka集群部署成功

微服務之springCloud和docker-Eureka(一)