在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




