AWS EC2部署Bitbucket双节点集群因hazelcast组配置认证失败求助
问题根本原因
报错核心为Bitbucket集群依赖的Hazelcast分布式组件节点间身份认证失败,结合给出的配置,常见触发原因如下:
- 配置文件加载优先级冲突:Bitbucket启动时会优先读取节点私有home目录下的
bitbucket.properties,如果私有目录留存旧配置,会覆盖共享目录中的配置,导致不同节点的hazelcast.group.name、hazelcast.group.password参数不一致 - 共享目录权限不足:容器内默认以uid 1000的用户运行Bitbucket进程,若共享目录挂载后权限不匹配,进程无法读取共享配置,会加载默认的Hazelcast参数,导致认证失败
- EC2网络规则限制:两台EC2实例的安全组未开放5701端口的双向访问,端口不通也会触发同类认证拦截报错
- 共享目录挂载路径不匹配:Ansible配置中填写的
bitbucket_shared_home路径与Bitbucket官方要求的集群共享目录路径不符,导致共享配置未被加载
排查解决步骤
- 清理冲突配置
分别登录两台EC2实例,进入私有home挂载目录{{ bitbucket_private_host_location }},删除目录下的bitbucket.properties文件,仅保留共享目录中的配置文件,重启两个Bitbucket容器。 - 修正共享目录权限
在共享存储(一般为AWS EFS)上执行chown -R 1000:1000 {{ bitbucket_shared_host_location }},确保容器内Bitbucket进程有配置读取权限。 - 验证网络连通性
分别在两台EC2实例上执行telnet <对端EC2内网IP> 5701,确认5701端口双向可通,同时调整EC2安全组入站规则,开放对端节点IP的5701端口访问权限。 - 校验配置加载结果
进入任意运行中的Bitbucket容器,执行ps aux | grep java查看进程启动参数,确认hazelcast.group.name、hazelcast.group.password参数和共享配置一致,也可通过Bitbucket启动日志确认共享配置是否被正常加载。 - 兜底强制配置方案
如果共享目录配置始终无法正常加载,可以直接将Hazelcast认证参数添加到Ansible的JAVA_OPTS环境变量中,强制所有节点使用统一配置:
"JAVA_OPTS": "-Dcluster.node.name={{ inventory_hostname }} -Duser.timezone=Etc/GMT+0 -Dhazelcast.local.publicAddress={{ ansible_default_ipv4.address }}:5701 -Dhazelcast.group.name=bitbucket-cluster -Dhazelcast.group.password=password"
内容的提问来源于stack exchange,提问作者Andrew Yu
相关产品推荐
相关产品推荐

