zoukankan      html  css  js  c++  java
  • docker springcloud 微服务 eureka集群

    之前集群各种配置,可以调用服务,但是服务的url 在这里unavailable-replicas 一直出现,意味着不可用。经过各种尝试,最终,还是通过这个hostname的方式进行集群,但应用服务,还是通过IP进行集群调用。

    各种失败,百度好久,最终找到一篇文章后。问题解决。之前的困惑是docker容器如何设置hosts文件。

    参考文章:https://blog.csdn.net/benben_2015/article/details/88426438

    最终发布的脚本这样写。

    // 定义一个URL,就是集群地址。
    UREKA_SERVICEURL="http://test8761:8761/eureka/,http://test8762:8762/eureka/,http://test8763:8763/eureka/"
    运行服务
    sh "docker run --restart=always -p 8761:8761 "+ "-d -v ${LOG_PATH}:${LOG_PATH} "+
    // 注册中心地址 "-e eureka.client.serviceUrl.defaultZone=${EUREKA_SERVICEURL} "+
    // 容器名称 "-e eureka.instance.hostname=test8761 "+
    // 重点是下面这行,host文件增加3个地址。最终进入到容器中中的/etc/hosts文件也看到了这3个地址。 "--add-host=test8761:192.168.89.130 --add-host=test8762:192.168.89.130 --add-host=test8763:192.168.89.130 "+ "--name ${PROJECT_NAME} "+ " $REPOSITORY"

     进入容器查看

    [root@master ~]# docker ps ==========查看所有运行中的容器
    CONTAINER ID        IMAGE                                                   COMMAND                  CREATED             STATUS              PORTS                    NAMES
    7e8a4101623c        192.168.89.132/mybs-cloud/eureka:0.0.1-SNAPSHOT   "java -Djava.securit…"   19 minutes ago      Up 19 minutes       0.0.0.0:8763->8761/tcp   eureka8763
    707bb1f2dc5c        192.168.89.132/mybs-cloud/eureka:0.0.1-SNAPSHOT   "java -Djava.securit…"   19 minutes ago      Up 19 minutes       0.0.0.0:8762->8761/tcp   eureka8762
    24636b410d2d        192.168.89.132/mybs-cloud/eureka:0.0.1-SNAPSHOT   "java -Djava.securit…"   19 minutes ago      Up 19 minutes       0.0.0.0:8761->8761/tcp  eureka
    [root@master ~]# docker exec -it 24636b410d2d /bin/bash  ===========进入容器
    root@24636b410d2d:/# cat /etc/host  =======查看hosts文件
    host.conf    hostname     hosts        hosts.allow  hosts.deny   
    root@24636b410d2d:/# cat /etc/hosts
    127.0.0.1       localhost
    ::1     localhost ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    192.168.89.130  test8761
    192.168.89.130  test8762
    192.168.89.130  test8763
    172.17.0.3      24636b410d2d
    root@24636b410d2d:/# 

     完整的pipeline发布脚本

    node("${nodeTag}")  {
    // docker 私有仓库注册中心
    def REGISTRY_URL="192.168.89.132"
    def REGISTRY_UID="admin"
    def REGISTRY_PID="test12345"
    // 私有仓库主目录名称
    def MAIN_NAME="test-cloud"
    // 项目目录所在目录
    def PROJECT_NAME="${projectName}"
    // 项目版本号
    def PROJECT_VERSION="0.0.1-SNAPSHOT"
    // 镜像名称
    def REPOSITORY="${REGISTRY_URL}/${MAIN_NAME}/${PROJECT_NAME}:${PROJECT_VERSION}"
    // 日志路径
    def LOG_PATH="/home/date/logs/${PROJECT_NAME}/"
    // host地址
    def CONFIG_HOST="192.168.89.130"
    def EUREKA_HOST_A="192.168.89.130"
    def EUREKA_HOST_B="192.168.89.130"
    def EUREKA_HOST_C="192.168.89.130"
    def EUREKA_PORT_A="8761"
    def EUREKA_PORT_B="8762"
    def EUREKA_PORT_C="8763"
    // 注册中心eureka地址
    def EUREKA_SERVICEURL="http://${EUREKA_HOST_A}:${EUREKA_PORT_A}/eureka/,http://${EUREKA_HOST_B}:${EUREKA_PORT_B}/eureka/,http://${EUREKA_HOST_C}:${EUREKA_PORT_C}/eureka/"
        stage('start') {
            sh "date +'%Y-%m-%d %H:%M:%S'"
        }
        stage("1、clear ${PROJECT_NAME}") {
            echo "clearing ${PROJECT_NAME}..."     
            sh "docker stop ${PROJECT_NAME} |true"     
            sh "docker rm -f ${PROJECT_NAME} |true"     
            sh "docker image rm $REPOSITORY |true"     
        }
       stage("2、deploy ${PROJECT_NAME}") {
         echo "deploying ${PROJECT_NAME}..."     
        sh "docker login -u ${REGISTRY_UID} -p ${REGISTRY_PID} ${REGISTRY_URL}"
         if (PROJECT_NAME == "test-base-eureka") {
            EUREKA_SERVICEURL="http://test${EUREKA_PORT_A}:${EUREKA_PORT_A}/eureka/,http://test${EUREKA_PORT_B}:${EUREKA_PORT_B}/eureka/,http://test${EUREKA_PORT_C}:${EUREKA_PORT_C}/eureka/"
            
            sh "docker run  --restart=always -p ${EUREKA_PORT_A}:8761 "+
            "-d -v ${LOG_PATH}${EUREKA_PORT_A}:${LOG_PATH} "+
            "-e eureka.client.serviceUrl.defaultZone=${EUREKA_SERVICEURL} "+
            "-e eureka.instance.hostname=test${EUREKA_PORT_A} "+
            "--add-host=test${EUREKA_PORT_A}:${EUREKA_HOST_A} --add-host=test${EUREKA_PORT_B}:${EUREKA_HOST_B} --add-host=test${EUREKA_PORT_C}:${EUREKA_HOST_C} "+
            "--name ${PROJECT_NAME} "+
            " $REPOSITORY"
            
            sh "docker rm -f ${PROJECT_NAME}${EUREKA_PORT_B} |true"     
            sh "docker run  --restart=always -p ${EUREKA_PORT_B}:8761 "+
            "-d -v ${LOG_PATH}${EUREKA_PORT_B}:${LOG_PATH} "+
            "-e eureka.client.serviceUrl.defaultZone=${EUREKA_SERVICEURL} "+
            "-e eureka.instance.hostname=test${EUREKA_PORT_B} "+
            "--add-host=test${EUREKA_PORT_A}:${EUREKA_HOST_A} --add-host=test${EUREKA_PORT_B}:${EUREKA_HOST_B} --add-host=test${EUREKA_PORT_C}:${EUREKA_HOST_C} "+
            "--name ${PROJECT_NAME}${EUREKA_PORT_B} "+
            " $REPOSITORY"
            
            sh "docker rm -f ${PROJECT_NAME}${EUREKA_PORT_C} |true"     
            sh "docker run  --restart=always -p ${EUREKA_PORT_C}:8761 "+
            "-d -v ${LOG_PATH}${EUREKA_PORT_C}:${LOG_PATH} "+
            "-e eureka.client.serviceUrl.defaultZone=${EUREKA_SERVICEURL} "+
            "-e eureka.instance.hostname=test${EUREKA_PORT_C} "+
            "--add-host=test${EUREKA_PORT_A}:${EUREKA_HOST_A} --add-host=test${EUREKA_PORT_B}:${EUREKA_HOST_B} --add-host=test${EUREKA_PORT_C}:${EUREKA_HOST_C} "+
            "--name ${PROJECT_NAME}${EUREKA_PORT_C} "+
            " $REPOSITORY"
            
         } else if (PROJECT_NAME == "test-base-config") {
           sh "docker run --restart=always -p 8888:8888 "+
            "-d -v ${LOG_PATH}:${LOG_PATH} "+
            "-e eureka.instance.ip-address=${CONFIG_HOST} "+
            "-e eureka.client.serviceUrl.defaultZone=${EUREKA_SERVICEURL} "+
            "--name ${PROJECT_NAME} "+
            " $REPOSITORY"
         } else {
           error '请选择要发布的分支'
         }
       }
        stage('Results 3') {
            echo "finish ${PROJECT_NAME}"
        }
        stage('end') {
            sh "date +'%Y-%m-%d %H:%M:%S'"
            echo "本次运行时间: ${currentBuild.duration} test"
        }
    }
  • 相关阅读:
    Java中的Socket用法
    ASP.NET MVC5 的请求管道和运行生命周期
    cookie、session和application
    手把手带你开发一款 IIS 模块后门
    HttpModule介绍
    ASP.NET MVC入门到精通——MVC请求管道
    HttpModule的认识
    WCF技术剖析之二:再谈IIS与ASP.NET管道
    ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline
    ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline[上篇]
  • 原文地址:https://www.cnblogs.com/a393060727/p/12512619.html
Copyright © 2011-2022 走看看