RabbitMQ服務主機名更改導致消息隊列無法連接
在多節點環境中,RabbitMQ服務使用一個獨立節點部署。在此環境下,如果修改了RabbitMQ節點的主機名,則需要更新RabbitMQ用戶才能保證服務能夠被正確訪問。
RabbitMQ節點原主機名為:
root@Aloe-Express-20:/etc# cat /etc/hostname
Aloe-Express-20
root@Aloe-Express-20:/etc# cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 Aloe-Express-20
172.16.112.81 CCnode
修改RabbitMQ節點主機名為:
root@Aloe-Express-22:/etc# cat /etc/hostname
Aloe-Express-22
root@Aloe-Express-22:/etc# cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 Aloe-Express-22
172.16.112.81 CCnode
重啟RabbitMQ節點后,發現nova服務無法連接rabbitMQ消息隊列,日志抱錯如下:
2016-03-29 10:34:39.477 1012 ERROR oslo_messaging._drivers.impl_rabbit [req-9beb2426-1c81-45d8-b340-1fbc7487e221 - - - - -] AMQP server ccnode:5672 closed the connection. Check login credentials: Socket closed
2016-03-29 10:34:44.492 1012 ERROR oslo_messaging._drivers.impl_rabbit [req-9beb2426-1c81-45d8-b340-1fbc7487e221 - - - - -] AMQP server ccnode:5672 closed the connection. Check login credentials: Socket closed
2016-03-29 10:34:49.508 1012 ERROR oslo_messaging._drivers.impl_rabbit [req-9beb2426-1c81-45d8-b340-1fbc7487e221 - - - - -] AMQP server ccnode:5672 closed the connection. Check login credentials: Socket closed
2016-03-29 10:34:54.523 1012 ERROR oslo_messaging._drivers.impl_rabbit [req-9beb2426-1c81-45d8-b340-1fbc7487e221 - - - - -] AMQP server ccnode:5672 closed the connection. Check login credentials: Socket closed
2016-03-29 10:34:59.539 1012 ERROR oslo_messaging._drivers.impl_rabbit [req-9beb2426-1c81-45d8-b340-1fbc7487e221 - - - - -] AMQP server ccnode:5672 closed the connection. Check login credentials: Socket closed
此錯誤是由於用戶密碼驗證不通過造成。
於是回到RabbitMQ節點,查看RabbitMQ服務運行狀態:
root@Aloe-Express-22:/etc/sahara# ps -ef | grep rabbit
rabbitmq 1939 1 0 10:20 ? 00:00:00 /usr/lib/erlang/erts-5.10.4/bin/epmd -daemon
rabbitmq 2065 1 0 10:20 ? 00:00:00 /bin/sh /usr/sbin/rabbitmq-server
rabbitmq 2079 2065 2 10:20 ? 00:00:11 /usr/lib/erlang/erts-5.10.4/bin/beam.smp -W w -K true -A30 -P 1048576 -- -root /usr/lib/erlang -progname erl -- -home /var/lib/rabbitmq -- -pa /usr/lib/rabbitmq/lib/rabbitmq_server-3.4.3/sbin/../ebin -noshell -noinput -s rabbit boot -sname rabbit@Aloe-Express-22 -boot start_sasl -config /etc/rabbitmq/rabbitmq -kernel inet_default_connect_options [{nodelay,true}] -sasl errlog_type error -sasl sasl_error_logger false -rabbit error_logger {file,"/var/log/rabbitmq/rabbit@Aloe-Express-22.log"} -rabbit sasl_error_logger {file,"/var/log/rabbitmq/rabbit@Aloe-Express-22-sasl.log"} -rabbit enabled_plugins_file "/etc/rabbitmq/enabled_plugins" -rabbit plugins_dir "/usr/lib/rabbitmq/lib/rabbitmq_server-3.4.3/sbin/../plugins" -rabbit plugins_expand_dir "/var/lib/rabbitmq/mnesia/rabbit@Aloe-Express-22-plugins-expand" -os_mon start_cpu_sup false -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/var/lib/rabbitmq/mnesia/rabbit@Aloe-Express-22" -kernel inet_dist_listen_min 25672 -kernel inet_dist_listen_max 25672
rabbitmq 2258 2079 0 10:20 ? 00:00:00 inet_gethost 4
rabbitmq 2259 2258 0 10:20 ? 00:00:00 inet_gethost 4
root 17356 4079 0 10:29 pts/3 00:00:00 grep --color=auto rabbit
服務正常運行,查看服務狀態:
root@Aloe-Express-22:/etc/sahara# rabbitmqctl status
Status of node 'rabbit@Aloe-Express-22' ...
[{pid,2079},
{running_applications,
[{rabbitmq_management,"RabbitMQ Management Console","3.4.3"},
{rabbitmq_web_dispatch,"RabbitMQ Web Dispatcher","3.4.3"},
{webmachine,"webmachine","1.10.3-rmq3.4.3-gite9359c7"},
{mochiweb,"MochiMedia Web Server","2.7.0-rmq3.4.3-git680dba8"},
{rabbitmq_management_agent,"RabbitMQ Management Agent","3.4.3"},
{inets,"INETS CXC 138 49","5.9.7"},
{amqp_client,"RabbitMQ AMQP Client","3.4.3"},
{rabbit,"RabbitMQ","3.4.3"},
{os_mon,"CPO CXC 138 46","2.2.14"},
{mnesia,"MNESIA CXC 138 12","4.11"},
{xmerl,"XML parser","1.3.5"},
{sasl,"SASL CXC 138 11","2.3.4"},
{stdlib,"ERTS CXC 138 10","1.19.4"},
{kernel,"ERTS CXC 138 10","2.16.4"}]},
{os,{unix,linux}},
{erlang_version,
"Erlang R16B03 (erts-5.10.4) [source] [64-bit] [smp:4:4] [async-threads:30] [kernel-poll:true]\n"},
{memory,
[{total,40659504},
{connection_readers,339200},
{connection_writers,0},
{connection_channels,0},
{connection_other,79720},
{queue_procs,2704},
{queue_slave_procs,0},
{plugins,354560},
{other_proc,13826296},
{mnesia,60648},
{mgmt_db,80400},
{msg_index,46784},
{other_ets,1057432},
{binary,29600},
{code,19580581},
{atom,703377},
{other_system,4498202}]},
{alarms,[]},
{listeners,[{clustering,25672,"::"},{amqp,5672,"::"}]},
{vm_memory_high_watermark,0.4},
{vm_memory_limit,3349220556},
{disk_free_limit,50000000},
{disk_free,154967289856},
{file_descriptors,
[{total_limit,924},{total_used,11},{sockets_limit,829},{sockets_used,9}]},
{processes,[{limit,1048576},{used,201}]},
{run_queue,0},
{uptime,567}]
服務均正常運行,查看服務運行的/var目錄:
root@Aloe-Express-22:/etc/sahara# cd /var/lib/rabbitmq/
root@Aloe-Express-22:/var/lib/rabbitmq# ls
mnesia
root@Aloe-Express-22:/var/lib/rabbitmq# cd mnesia/
root@Aloe-Express-22:/var/lib/rabbitmq/mnesia# ls
rabbit@Aloe-Express-20 rabbit@Aloe-Express-20-plugins-expand rabbit@Aloe-Express-22 rabbit@Aloe-Express-22-plugins-expand
由於修改了主機名,導致RabbitMQ消息隊列出現更改,此更改會導致用戶的變化,查看當前環境的用戶:
root@Aloe-Express-22:/var/lib/rabbitmq/mnesia# rabbitmqctl list_users
Listing users ...
guest [administrator]
guest用戶為RabbitMQ默認創建的一個用戶,但guest用戶的密碼為隨機密碼。需重新設置密碼:
root@Aloe-Express-22:/var/lib/rabbitmq/mnesia# rabbitmqctl change_password guest password
Changing password for user "guest" ...
guest用戶密碼修改以后,發現nova服務日志恢復正常:
2016-03-29 10:35:01.557 1012 INFO oslo_messaging._drivers.impl_rabbit [req-9beb2426-1c81-45d8-b340-1fbc7487e221 - - - - -] Reconnected to AMQP server on ccnode:5672
2016-03-29 10:35:01.558 1012 INFO oslo_messaging._drivers.impl_rabbit [req-9beb2426-1c81-45d8-b340-1fbc7487e221 - - - - -] Connected to AMQP server on ccnode:5672
結論
當修改RabbitMQ主機的主機名時,需重新進行用戶名密碼創建才能保證外部服務正常使用RabbitMQ服務。