最近新搭建的OpenStack叢集總是出問題,各個service的log經常報連接配接RabbitMQ逾時。重新開機RabbitMQ後叢集會恢複正常一段時間,之後繼續報錯。根據這種現象推斷,大機率是跟RabbitMQ能接受的最大連接配接數的問題有關,執行rabbitmqctl status發現sockets_used已經達到上限,證明推斷正确,解決方法就是調大這個值。

作業系統是CentOS 7.5。編輯/usr/lib/systemd/system/rabbitmq-server.service,在[Service]字段添加一行LimitNOFILE=65535:
# systemd unit example
[Unit]
Description=RabbitMQ broker
After=network.target [email protected]
Wants=network.target [email protected]
[Service]
Type=notify
User=rabbitmq
Group=rabbitmq
NotifyAccess=all
TimeoutStartSec=3600
LimitNOFILE=65535
WorkingDirectory=/var/lib/rabbitmq
ExecStart=/usr/lib/rabbitmq/bin/rabbitmq-server
ExecStop=/usr/lib/rabbitmq/bin/rabbitmqctl stop
[Install]
WantedBy=multi-user.target
然後執行systemctl daemon-reload和systemctl restart rabbitmq-server.service就生效了。再次檢視rabbitmqctl status就可以發現新參數生效了:
雖然調整的是打開檔案最大數,但是sockets_limit也相應增大了,查詢文檔得知sockets_limit通常是total_limit的0.8到0.9。之後OpenStack各服務也不再報錯了,問題解決。