本文主要阐述应用与集群相关的一些操作管理命令,包括关闭、重置、开启服务,还有建立集群的一些信息。有关集群搭建更多的信息可以参考RabbitMQ的安装及集群搭建方法。
rabbitmqctl stop [pid_file]
用于停止运行RabbitMQ的Erlang虚拟机和RabbitMQ服务应用。如果指定了pid_file,还需要等待指定进程的结束。其中pid_file是通过调用rabbitmq-server启动RabbitMQ服务时创建的,默认情况下存放于Mnesia目录中,可以通过RABBITMQ_PID_FILE这个环境变量来改变存放路径。注意,如果是rabbitmq-server –detach启动的RabbitMQ服务则不会生成pid_file这个文件。
示例如下:
[root@node1 ~]# rabbitmqctl stop
/opt/rabbitmq/var/lib/rabbitmq/mnesia/rabbit\@node1.pid
Stopping and halting node rabbit@node1
[root@node1 ~]# rabbitmqctl stop
Stopping and halting node rabbit@node1
rabbitmqctl shutdown
用于停止运行RabbitMQ的Erlang虚拟机和RabbitMQ服务应用。执行这个命令会阻塞直到Erlang虚拟机进程的退出。如果RabbitMQ没有成功关闭,则会返回一个非零值。这个命令和rabbitmqctl stop的不同的是,它不需要指定pid_file而可以阻塞等待指定进程的关闭。
示例如下:
[root@node1 ~]# rabbitmqctl shutdown
Shutting down RabbitMQ node rabbit@node1 running at PID 1706
Waiting for PID 1706 to terminate
RabbitMQ node rabbit@node1 running at PID 1706 successfully shut down
rabbitmqctl stop_app
停止RabbitMQ服务应用,但是Erlang虚拟机还是处于运行状态。此命令优先执行其他管理操作(这些管理操作需要先停止RabbitMQ应用),比如rabbitmqctl reset。
示例如下:
[root@node1 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@node1
rabbitmqctl start_app
启动RabbitMQ应用。此命令典型的用途是在执行了其他管理操作之后,重新启动之前停止的RabbitMQ应用,譬如rabbitmqctl reset。
示例如下:
[root@node1 ~]# rabbitmqctl start_app
Starting node rabbit@node1
rabbitmqctl wait [pid_file]
等待RabbitMQ应用的启动。它会等到pid_file的创建,然后等待pid_file中的所代表的进程启动。当指定的进程没有启动RabbitMQ应用而关闭时将会返回失败。
示例如下:
[root@node1 ~]# rabbitmqctl wait /opt/rabbitmq/var/lib/rabbitmq/mnesia/rabbit\@node1.pid
Waiting for rabbit@node1
pid is 3468
[root@node1 ~]# rabbitmqctl wait /opt/rabbitmq/var/lib/rabbitmq/mnesia/rabbit\@node1.pid
Waiting for rabbit@node1
pid is 3468
Error: process_not_running
rabbitmqctl reset
将RabbitMQ节点重置还原到最初状态,包括从原所在的集群中删除此节点,从管理数据库中删除所有的配置数据,如已配置的用户、vhost等,以及删除所有的持久化消息。执行rabbitmqctl reset命令前必须停止RabbitMQ应用(比如先执行rabbitmqctl stop_app)。
示例如下:
[root@node1 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@node1
[root@node1 ~]# rabbitmqctl reset
Resetting node rabbit@node1
rabbitmqctl force_reset
强制将RabbitMQ节点重置还原到最初状态。不同于rabbitmqctl reset,rabbitmqctl force_reset命令不论当前管理数据库的状态和集群配置是什么,会无条件地重置节点。它只能在数据库或集群配置已损坏的情况下才可使用。与rabbitmqctl reset命令一下,执行rabbitmqctl force_reset命令前必须先停止RabbitMQ应用。
示例如下:
[root@node1 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@node1
[root@node1 ~]# rabbitmqctl force_reset
Forcefully resetting node rabbit@node1
rabbitmqctl rotate_logs {suffix}
指示RabbitMQ节点轮换日志文件。RabbitMQ节点会将原来的日志文件中的内容追加到“原始名称+后缀”的日志文件中,然后再将新的日志内容记录到新创建的日志中(与原日志文件同名)。当目标文件不存在时,将会重新创建。如果不指定suffix,那么则日志文件只是重新打开而不会进行轮换。
示例如下所示,原日志文件为rabbit@node1.log和rabbit@node1-sasl.log,轮换日志之后,原日志文件中的内容就被追加到rabbit@node1.log.1和 rabbit@node1-sasl.log.1日志中,之后重新建立rabbit@node1.log和rabbit@node1-sasl.log文件用来接收新的日志。
[root@node1 rabbitmq]# pwd
/opt/rabbitmq/var/log/rabbitmq
[root@node1 rabbitmq]# ll
-rw-r--r-- 1 root root 1024127 Aug 18 11:56 rabbit@node1.log
-rw-r--r-- 1 root root 720553 Aug 17 19:16 rabbit@node1-sasl.log
[root@node1 rabbitmq]# rabbitmqctl rotate_logs .1
Rotating logs to files with suffix ".1"
[root@node1 rabbitmq]# ll
-rw-r--r-- 1 root root 0 Aug 18 12:05 rabbit@node1.log
-rw-r--r-- 1 root root 1024202 Aug 18 12:05 rabbit@node1.log.1
-rw-r--r-- 1 root root 0 Aug 18 12:05 rabbit@node1-sasl.log
-rw-r--r-- 1 root root 720553 Aug 18 12:05 rabbit@node1-sasl.log.1
rabbitmqctl hipe_compile {directory}
将部分RabbitMQ代码用HiPE(HiPE是指High Performance Erlang ,是Erlang版的JIT)编译,并且将编译后的.beam文件(beam文件是Erlang编译器生成的文件格式,可以直接加载到Erlang虚拟机中运行的文件格式)保存到指定的文件目录中。如果这个目录不存在则会自行创建。如果这个目录中原本有任何.beam文件,则会在执行编译前被删除。如果要使用预编译的这些文件,需要设置RABBITMQ_SERVER_CODE_PATH这个环境变量来指定hipe_compile调用的路径。
示例如下:
[root@node1 rabbitmq]# rabbitmqctl hipe_compile /opt/rabbitmq/tmp/rabbit-hipe/ebin
HiPE compiling: |---------------------------------------------------------|
|#########################################################|
Compiled 57 modules in 55s
[root@node1 rabbitmq]# ls /opt/rabbitmq/tmp/rabbit-hipe/ebin
array.beam proplists.beam rabbit_misc.beam
credit_flow.beam qlc.beam rabbit_msg_file.beam
delegate.beam queue.beam rabbit_msg_store.beam
dict.beam rabbit_amqqueue.beam rabbit_msg_store_ets_index.beam
file_handle_cache.beam rabbit_amqqueue_process.beam rabbit_net.beam
gb_sets.beam rabbit_basic.beam rabbit_queue_index.beam
gb_trees.beam rabbit_binary_generator.beam rabbit_reader.beam
gen.beam rabbit_binary_parser.beam rabbit_router.beam
gen_fsm.beam rabbit_channel.beam rabbit_trace.beam
gen_server2.beam rabbit_command_assembler.beam rabbit_variable_queue.beam
lists.beam rabbit_event.beam rabbit_writer.beam
lqueue.beam rabbit_exchange.beam rpc.beam
mnesia.beam rabbit_exchange_decorator.beam sets.beam
mnesia_lib.beam rabbit_exchange_type_direct.beam sofs.beam
mnesia_tm.beam rabbit_exchange_type_fanout.beam ssl.beam
orddict.beam rabbit_exchange_type_topic.beam ssl_connection.beam
ordsets.beam rabbit_framing_amqp_0_9_1.beam ssl_record.beam
pmon.beam rabbit_guid.beam tls_connection.beam
priority_queue.beam rabbit_limiter.beam tls_record.beam
欢迎支持笔者新书:《RabbitMQ实战指南》以及关注微信公众号:Kafka技术专栏。