You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在Marathon中部署Bitbucket遇扩缩容异常(重启分裂)求助

解决Marathon部署Bitbucket扩缩容时反复重启与服务分裂问题

嘿,我来帮你搞定Marathon部署Bitbucket时扩缩容出的问题——反复重启还看起来像分裂成多个服务,大概率是配置里的几个坑没踩对,咱们一步步来排查:

先看看你给出的marathon_bitbucket.json配置里几个关键的疑点:

  • 强制绑定到单个宿主机的约束
  • 未使用容器隔离,直接在宿主机运行进程
  • 启动脚本可能未保持前台运行

可能的问题根源

  • 单节点资源过载
    你用constraints把所有实例都钉在了lltws0gbeot.sdi.corp.bankofamerica.com这一个节点上。当你扩缩容增加实例数时,这个节点的CPU(每个实例只分配0.1核)、内存(512M/实例)根本扛不住,Marathon会不断尝试启动新实例,失败后立刻重试,看起来就像服务在“反复重启”,失败的启动尝试也容易被误判成分裂的服务。

  • 启动脚本后台运行,导致Marathon误判进程退出
    Bitbucket默认的start-bitbucket.sh通常会把进程放到后台运行,但Marathon要求任务的主进程必须前台持续运行——如果脚本执行完就退出,Marathon会认为进程挂了,立刻重启这个任务,形成无限重启的循环。

  • 无容器隔离引发的资源冲突
    因为你设置container: null,多个Bitbucket实例在同一宿主机上会共享端口、文件系统等资源。比如Bitbucket默认用7990端口,多个实例同时启动会直接端口冲突;或者共享的数据目录、临时文件被锁,都会导致启动失败,进而让Marathon不断重试,看起来像服务分裂。

具体解决步骤

  • 调整节点约束,分散部署压力
    要么直接去掉单节点绑定的约束,让Marathon把实例调度到多个可用节点:

    "constraints": []
    

    如果必须在特定节点组部署,用CLUSTER规则匹配多个节点(前提是你的集群有节点分组):

    "constraints": [["hostname", "CLUSTER", "bitbucket-dedicated-nodes"]]
    
  • 修改启动命令,强制Bitbucket前台运行
    给启动脚本加上前台运行的参数,确保Marathon能持续监控主进程:

    sh /tmp/app/atlassian-bitbucket-4.8.3/start-bitbucket.sh -fg
    

    (注:不同Bitbucket版本的前台参数可能略有差异,你可以查看脚本的帮助信息确认)

  • 改用Docker容器隔离(最推荐)
    container配置改成Docker类型,用官方Bitbucket镜像,这样每个实例都有独立的网络、文件系统,彻底避免资源冲突,官方镜像也已经适配了Marathon的前台运行要求:

    "container": {
      "type": "DOCKER",
      "docker": {
        "image": "atlassian/bitbucket:4.8.3",
        "network": "BRIDGE",
        "portMappings": [
          {
            "containerPort": 7990,
            "hostPort": 0,
            "protocol": "tcp"
          }
        ]
      }
    }
    
  • 调整资源分配(如果坚持单节点部署)
    Bitbucket 4.8.3官方推荐的内存至少是1G,你当前给的512M明显不够。如果一定要在单节点部署,先给每个实例调高资源配额,同时确保节点有足够的可用资源:

    "cpus": 0.5,
    "mem": 1024
    

内容的提问来源于stack exchange,提问作者Charan Adabala

火山引擎 最新活动