Rabbitmq 节点无法重新启动:rabbitmq-server.service 的作业失败,因为控制进程退出并出现错误代码

Dha*_*tel 3 rabbitmq ansible

我正在配置ansible脚本来为具有3个节点的rabbitmq创建HA设置,在执行整个脚本后,它运行处理程序来重新启动rabbitmq服务器,但无法重新启动节点。最初,当我运行脚本而不在其他节点中复制 erlang cookie 时,它​​运行良好,但是当我在其他节点中复制 erlang cookie 时,它​​没有重新启动。

\n\n

任务/main.yml

\n\n
---\n- name: Install prerequisites\n  apt:\n    name: "{{ item }}"\n    update_cache: yes\n    state: present\n  with_items:\n   # - apt-transport-https\n   # - ca-certificates\n   # - python3-pip\n   - curl\n   - software-properties-common\n\n#- name: packages - install erlang\n#  apt:\n#    pkg: erlang\n#    update_cache: yes\n#    cache_valid_time: 3600\n#    state: latest\n\n- name: "add the official rabbitmq repository\'s key"\n  apt_key:\n    url: "https://www.rabbitmq.com/rabbitmq-release-signing-key.asc"\n    state: present\n  when: not rabbitmq_os_package\n\n- name: Add RabbitMQ APT repository\n  apt_repository:\n    repo: \'deb https://dl.bintray.com/rabbitmq-erlang/debian bionic erlang-22.x\'\n    state: present\n\n- name: Install RabbitMQ\n  apt:\n    deb: "https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.3/rabbitmq-server_3.8.3-1_all.deb"\n\n- name: enable rabbitmq plugins\n  rabbitmq_plugin:\n    names: rabbitmq_management,rabbitmq_tracing,rabbitmq_federation,rabbitmq_shovel,rabbitmq_shovel_management\n    state: enabled\n  notify:\n  - rabbitmq restart\n\n- name: Capturing Erlang Cookie On Master\n  command: "cat {{ rabbitmq_erlang_cookie_file }}"\n  become: true\n  register: "rabbitmq_erlang_cookie"\n  when: inventory_hostname == "rabbit-node1"\n\n- name: Check if rabbitmq_conf_vm_memory_high_watermark is under the recommended range\n  fail:\n    msg: "The recommended vm_memory_high_watermark range is 0.4 to 0.66."\n  when: rabbitmq_conf_vm_memory_high_watermark < 0.4 or rabbitmq_conf_vm_memory_high_watermark > 0.66\n\n- name: copy the rabbitmq configuration file\n  template:\n    src=rabbitmq.config.j2\n    dest={{ rabbitmq_config_file_path }}\n    owner={{ rabbitmq_config_file_owner }}\n    group={{ rabbitmq_config_file_group }}\n    mode={{ rabbitmq_config_file_mode }}\n    backup=yes\n\n#- name: generate rabbitmq environment-variables file\n#  template:\n#    src=rabbitmq-env.conf.j2\n#    dest={{ rabbitmq_env_variables_file_path }}\n#    owner={{ rabbitmq_config_file_owner }}\n#    group={{ rabbitmq_config_file_group }}\n#    mode={{ rabbitmq_config_file_mode }}\n#    backup=yes\n#  when: rabbitmq_conf_env is defined\n\n- name: alter number of system\'s open file if rabbitmq_system_number_open_files is set\n  block:\n    - name: check if value is under 500k\n      fail:\n        msg: "The number of open files in the system should not exceed 500K."\n      when: rabbitmq_system_number_open_files > 500000\n\n    - name: make sure service.d exists\n      file:\n        path: "{{ rabbitmq_service_d_path }}"\n        state: directory\n\n    - name: change limit of system\'s number of open file\n      template:\n        src: limits.conf.j2\n        dest: "{{ rabbitmq_service_d_path }}/limits.conf"\n        backup: true\n  when: rabbitmq_system_number_open_files is defined\n\n- name: Capturing Erlang Cookie On Master\n  command: "cat {{ rabbitmq_erlang_cookie_file }}"\n  become: true\n  register: "rabbitmq_erlang_cookie"\n  when: inventory_hostname == "rabbit-node1"\n\n- name: Setting Erlang Cookie Of Master on Non-Master\n  set_fact:\n    rabbitmq_erlang_cookie: "{{ hostvars[\'rabbit-node1\'][\'rabbitmq_erlang_cookie\'][\'stdout\'] }}"\n  when: inventory_hostname != "rabbit-node1"\n\n- name: Copy erlang cookie\n  template:\n    src: erlang.cookie.j2\n    dest: "{{ rabbitmq_erlang_cookie_file }}"\n    owner: rabbitmq\n    group: rabbitmq\n    mode: 0400\n    # backing up in case the need to recover\n    backup: yes\n  become: true\n  when: inventory_hostname != "rabbit-node1"\n  notify:\n  - rabbitmq restart\n\n- name: ensure the users are removed\n  rabbitmq_user:\n    user={{ item }}\n    state=absent\n  with_items: "{{ rabbitmq_users_remove }}"\n\n- name: ensure users exist\n  rabbitmq_user:\n    user: "{{ item }}"\n    password: \n    vhost: /\n    configure_priv: .*\n    read_priv: .*\n    write_priv: .*\n    tags: "{{ rabbitmq_administrator_tag }}"\n    state: present\n  with_items: "{{ rabbitmq_users }}"\n\n- name: ensure rabbitmq server is running\n  service:\n    name: rabbitmq-server\n    daemon_reload: true #changed systemd conf file\n    state: started \n
Run Code Online (Sandbox Code Playgroud)\n\n

这是在脚本末尾运行的处理程序文件。

\n\n

处理程序/main.yml

\n\n
---\n\n- name: rabbitmq restart\n  service:\n    name: rabbitmq-server\n    state: restarted\n
Run Code Online (Sandbox Code Playgroud)\n\n

错误

\n\n
fatal: [rabbit-node2]: FAILED! => {"changed": false, "msg": "Unable to restart service rabbitmq-server: Job for rabbitmq-server.service failed because the control process exited with error code.\\nSee \\"systemctl status rabbitmq-server.service\\" and \\"journalctl -xe\\" for details.\\n"}                                                                     \n\nfatal: [rabbit-node3]: FAILED! => {"changed": false, "msg": "Unable to restart service rabbitmq-server: Job for rabbitmq-server.service failed because the control process exited with error code.\\nSee \\"systemctl status rabbitmq-server.service\\" and \\"journalctl -xe\\" for details.\\n"}\n
Run Code Online (Sandbox Code Playgroud)\n\n

通过检查节点中的 systemctl 状态,它显示以下消息:

\n\n
\xe2\x97\x8f rabbitmq-server.service - RabbitMQ broker\nLoaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: enabled)\nDrop-In: /etc/systemd/system/rabbitmq-server.service.d\n\xe2\x94\x94\xe2\x94\x80limits.conf\nActive: activating (start) since Thu 2020-04-16 09:27:18 UTC; 889ms ago\nProcess: 929 ExecStop=/usr/lib/rabbitmq/bin/rabbitmqctl shutdown (code=exited\nstatus=78)\nMain PID: 7865 (rabbitmq-server)\nTasks: 23 (limit: 4703)\nCGroup: /system.slice/rabbitmq-server.service\n\xe2\x94\x9c\xe2\x94\x807865 /bin/sh /usr/lib/rabbitmq/bin/rabbitmq-server\n\xe2\x94\x9c\xe2\x94\x807981 /usr/lib/erlang/erts-10.7.1/bin/beam.smp -- -root /usr/lib/erlang -progname erl -- -home /var/lib/rabbitmq -- -pa /usr/lib/rabbitmq/lib/rabbitmq_server-3.8.3/ebin -boot start_clean -noshell -no\n\xe2\x94\x9c\xe2\x94\x807991 /usr/lib/erlang/erts-10.7.1/bin/epmd -daemon\n\xe2\x94\x94\xe2\x94\x807995 erl_child_setup 65535 \n
Run Code Online (Sandbox Code Playgroud)\n\n

通过应用journalctl -xe命令我收到以下消息:

\n\n
rabbit-node2 rabbitmq-server[16137]: Crash dump is being written to: /var/log/rabbitmq/erl_crash.dump...done\nrabbit-node2 systemd[1]: rabbitmq-server.service: Main process exited, code=exited, status=1/FAILURE\nrabbit-node2 systemd[1]: rabbitmq-server.service: Failed with result \'exit-code\'.\nrabbit-node2 systemd[1]: Failed to start RabbitMQ broker.\n
Run Code Online (Sandbox Code Playgroud)\n

Vis*_*hal 7

可以尝试这个过程:

  • ps-ef | grep 兔子

如果上面的命令显示没有。进程数 < 5,然后继续后续步骤。

  • 清空目录 /var/lib/rabbitmq/*

  • sudo invoke-rc.drabbitmq-server启动

  • ps-ef | grep 兔子

现在,运行 http://localhost:15672。

注意:1)代码是在本地主机上测试的,而不是在服务器上测试的。
2) 使用命令启用 RabbitMQ UI:rabbitmq-plugins enablerabbitmq_management