XRAY:如何排除RabbitMQ相关的问题,阻止XRAY启动
概述:
RabbitMQ是一个消息队列服务,用于Xray执行异步操作。
在这篇文章中,我们将描述RabbitMQ中一些常见的错误,这些错误会阻止Xray启动。
它要求RabbitMQ在x射线启动时启动并运行。
在某些情况下,RabbitMQ启动失败可能导致Xray服务无法启动。在本文中,我们将检查可能的原因和克服它的步骤的场景
RabbitMQ故障场景:
问题1:
连接到兔子消息队列检查mq设置错误。错误:异常(403)原因:“用户名或密码不允许”
Xray预装在RabbitMQ中,通过设置erlang cookie值作为来宾用户的RabbitMQ密码。在某些情况下,默认密码可以在$JFROG_HOME/xray/app/bin/rabbitmq/目录下的rabbitmq.conf文件中硬编码为" default_pass = guest "。
因此,在这个场景中,我们需要更新系统。对应rabbitmq.conf文件中的用户名/密码,如下所示,重新启动Xray。rabbitMq:
erlangCookie:
价值:JFXR_RABBITMQ_COOKIE
url: amqp: / / localhost: 5672 /
用户名:客人
密码:客人
为了确保Xray用户的用户名密码正确,请尝试执行curl命令连接到RabbitMQ的vhostsCurl——用户guest:guest http://rabbitmq:15672/api/vhosts如果使用curl命令验证失败,请进入$JFROG_HOME/xray/app/第三方/rabbitmq/sbin目录,执行以下命令修改xray连接rabbitmq的guest用户密码。./rabbitmqctl change_password guest
注意:在上面的命令中,我们将以guest为用户名更改密码。
另外,请确保在rabbitmq.conf、system.yaml中使用相同的密码
密码更新后,重新启动x射线。
问题2:
无法分配生产者通道,来自rabbitMQ的错误:异常(504)原因:“通道/连接未打开”
这个错误表明通道x射线被关闭了,显式的或者由于通道异常,我们需要检查RabbitMQ日志来找出更多。
如果在rabbitmq日志文件中遇到以下错误[info] <0.272.0>等待Mnesia表为30000毫秒,9次重试
在等待Mnesia表时出现错误:{timeout_waiting_for_tables,[' rabbit@xray-eu-rabbitmq-ha-2.xray-eu-rabbitmq-ha-discovery.xray.svc.cluster.local ', ' rabbit@xray-eu-rabbitmq-ha-1.xray-eu-rabbitmq-ha-discovery.xray.svc.cluster.local ', ' rabbit@xray-eu-rabbitmq-ha-0.xray-eu-rabbitmq-ha-discovery.xray.svc.cluster.local '],[rabbit_durable_queue]}
这也可能由于mnesia表的损坏而发生,因此,为了克服这个问题,尝试在停止xray并启动xray后删除$JFROG_HOME/xray/var/data/rabbitmq/mnesia目录下的内容。
注意:删除mnesia目录时,RabbitMQ的消息队列、交换机也会被删除。因此,如果执行了任何新的索引,可能需要重新索引那些工件。
如果RabbitMq运行在kubernetes集群上,移除RabbitMq pvc,重新部署可以帮助消除错误。
问题3:
无法访问此vhost
当磁盘遇到空间不足,或者RabbitMQ没有正确停止,或者连接到“/”vhosts的权限有问题时,可能会发生这种错误,为了克服这个问题,建议遵循可用的说明知识库文章
问题4:
RabbitMQ keep alive: failed in open a new connection: dial tcp 127.0.0.1:5672: connect: connection refused
当RabbitMq启动失败,但x射线启动初始化时,可能出现拒绝连接错误。可能的原因是erlang cookie不匹配,阻止RabbitMq通过“xray”用户启动
请进入“/opt/jfrog/xray/app/third-party/rabbitmq/sbin”目录,执行“./rabbitmqctl cluster_status”
如果出现如下错误,则说明Xray创建的erlang cookie与rabbitmq自己创建的erlang cookie不匹配
正如上面突出显示的那样,erlang cookie将在有效用户的主目录下可用。确认所有.erlang. conf文件的内容。Cookie文件,导航到“/opt/jfrog/xray”和“/root”路径,然后验证.erlang. conf文件。“/opt/jfrog/xray/app/第三方/rabbitmq/.erlang. Cookie”的Cookie文件。
所有.erlang. xml文件的内容。cookie应该匹配,它的内容应该是“JFXR_RABBITMQ_COOKIE”。如果发现不匹配,停止Xray,并确保停止所有rabbitmq进程。要检索PID,使用以下命令并使用kill -9 Ps aux | grep erl
Ps aux | grep epmd
Ps aux | grep兔
Ps aux | grep Erlang
进一步,更新所有位置的值,例如[" /root ", " /opt/jfrog/xray ", " /opt/jfrog/xray/app/third-party/rabbitmq/.erlang "。并更新系统。使用“JFXR_RABBITMQ_COOKIE”作为rabbitmq.erlangCookie.value。
更新完成后,进入“/opt/jfrog/xray/var/data/rabbitmq/mnesia”目录,备份并删除目录内容。
从Xray 3.8x开始,Xray上的停止和重启动作将不再应用于RabbitMQ进程。在Xray的启动动作中,如果RabbitMQ没有运行,它将被启动。
如果您希望脚本在RabbitMQ上执行停止和重启操作,请设置shared.rabbitMq.autoStop作为真正的在system.yaml中。注意,这个标志在docker-compose安装中不会被使用。rabbitMq:
##关闭rabbitmq和xray的其他服务
##默认rabbitmq将一直运行
自动停车:真
最后,重新启动x射线。
