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"
        }
    }
  • 相关阅读:
    Atitit attilax要工作研究的要素 纪要 方案 趋势 方向 概念 理论
    Atitit 常见每日流程日程日常工作.docx v7 r8f
    Atitit it 互联网 软件牛人的博客列表
    Atitit 信息链(Information Chain)的概念理解 attilax总结
    Atitit 知识点的体系化 框架与方法 如何了解 看待xxx
    Atitit 聚合搜索多个微博 attilax总结
    Atitit 企业知识管理PKM与PIM
    Atitit 项目沟通管理 Atitit 沟通之道 attilax著.docx
    Atitit 项目管理软件 在线服务 attilax总结 1. 项目管理协作的历史 1 1.1. Worktile 406k 1 1.2. Teambition  584k in baidu
    Atitit.每周末总结 于每周一计划日程表 流程表 v8 import 上周遗漏日志补充 检查话费 检查流量情况 Crm问候 Crm表total and 问候
  • 原文地址:https://www.cnblogs.com/a393060727/p/12512619.html
Copyright © 2011-2022 走看看