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

时间:2020-04-16 06:15:09

标签: ansible rabbitmq

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

任务/main.yml

---
- name: Install prerequisites
  apt:
    name: "{{ item }}"
    update_cache: yes
    state: present
  with_items:
   # - apt-transport-https
   # - ca-certificates
   # - python3-pip
   - curl
   - software-properties-common

#- name: packages - install erlang
#  apt:
#    pkg: erlang
#    update_cache: yes
#    cache_valid_time: 3600
#    state: latest

- name: "add the official rabbitmq repository's key"
  apt_key:
    url: "https://www.rabbitmq.com/rabbitmq-release-signing-key.asc"
    state: present
  when: not rabbitmq_os_package

- name: Add RabbitMQ APT repository
  apt_repository:
    repo: 'deb https://dl.bintray.com/rabbitmq-erlang/debian bionic erlang-22.x'
    state: present

- name: Install RabbitMQ
  apt:
    deb: "https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.3/rabbitmq-server_3.8.3-1_all.deb"

- name: enable rabbitmq plugins
  rabbitmq_plugin:
    names: rabbitmq_management,rabbitmq_tracing,rabbitmq_federation,rabbitmq_shovel,rabbitmq_shovel_management
    state: enabled
  notify:
  - rabbitmq restart

- name: Capturing Erlang Cookie On Master
  command: "cat {{ rabbitmq_erlang_cookie_file }}"
  become: true
  register: "rabbitmq_erlang_cookie"
  when: inventory_hostname == "rabbit-node1"

- name: Check if rabbitmq_conf_vm_memory_high_watermark is under the recommended range
  fail:
    msg: "The recommended vm_memory_high_watermark range is 0.4 to 0.66."
  when: rabbitmq_conf_vm_memory_high_watermark < 0.4 or rabbitmq_conf_vm_memory_high_watermark > 0.66

- name: copy the rabbitmq configuration file
  template:
    src=rabbitmq.config.j2
    dest={{ rabbitmq_config_file_path }}
    owner={{ rabbitmq_config_file_owner }}
    group={{ rabbitmq_config_file_group }}
    mode={{ rabbitmq_config_file_mode }}
    backup=yes

#- name: generate rabbitmq environment-variables file
#  template:
#    src=rabbitmq-env.conf.j2
#    dest={{ rabbitmq_env_variables_file_path }}
#    owner={{ rabbitmq_config_file_owner }}
#    group={{ rabbitmq_config_file_group }}
#    mode={{ rabbitmq_config_file_mode }}
#    backup=yes
#  when: rabbitmq_conf_env is defined

- name: alter number of system's open file if rabbitmq_system_number_open_files is set
  block:
    - name: check if value is under 500k
      fail:
        msg: "The number of open files in the system should not exceed 500K."
      when: rabbitmq_system_number_open_files > 500000

    - name: make sure service.d exists
      file:
        path: "{{ rabbitmq_service_d_path }}"
        state: directory

    - name: change limit of system's number of open file
      template:
        src: limits.conf.j2
        dest: "{{ rabbitmq_service_d_path }}/limits.conf"
        backup: true
  when: rabbitmq_system_number_open_files is defined

- name: Capturing Erlang Cookie On Master
  command: "cat {{ rabbitmq_erlang_cookie_file }}"
  become: true
  register: "rabbitmq_erlang_cookie"
  when: inventory_hostname == "rabbit-node1"

- name: Setting Erlang Cookie Of Master on Non-Master
  set_fact:
    rabbitmq_erlang_cookie: "{{ hostvars['rabbit-node1']['rabbitmq_erlang_cookie']['stdout'] }}"
  when: inventory_hostname != "rabbit-node1"

- name: Copy erlang cookie
  template:
    src: erlang.cookie.j2
    dest: "{{ rabbitmq_erlang_cookie_file }}"
    owner: rabbitmq
    group: rabbitmq
    mode: 0400
    # backing up in case the need to recover
    backup: yes
  become: true
  when: inventory_hostname != "rabbit-node1"
  notify:
  - rabbitmq restart

- name: ensure the users are removed
  rabbitmq_user:
    user={{ item }}
    state=absent
  with_items: "{{ rabbitmq_users_remove }}"

- name: ensure users exist
  rabbitmq_user:
    user: "{{ item }}"
    password: 
    vhost: /
    configure_priv: .*
    read_priv: .*
    write_priv: .*
    tags: "{{ rabbitmq_administrator_tag }}"
    state: present
  with_items: "{{ rabbitmq_users }}"

- name: ensure rabbitmq server is running
  service:
    name: rabbitmq-server
    daemon_reload: true #changed systemd conf file
    state: started 

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

handlers / main.yml

---

- name: rabbitmq restart
  service:
    name: rabbitmq-server
    state: restarted

错误

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"}                                                                     

fatal: [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"}

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

● rabbitmq-server.service - RabbitMQ broker
Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/rabbitmq-server.service.d
└─limits.conf
Active: activating (start) since Thu 2020-04-16 09:27:18 UTC; 889ms ago
Process: 929 ExecStop=/usr/lib/rabbitmq/bin/rabbitmqctl shutdown (code=exited
status=78)
Main PID: 7865 (rabbitmq-server)
Tasks: 23 (limit: 4703)
CGroup: /system.slice/rabbitmq-server.service
├─7865 /bin/sh /usr/lib/rabbitmq/bin/rabbitmq-server
├─7981 /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
├─7991 /usr/lib/erlang/erts-10.7.1/bin/epmd -daemon
└─7995 erl_child_setup 65535 

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

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

1 个答案:

答案 0 :(得分:0)

可以尝试以下过程:

  • ps -ef | grep兔子

如果上面的命令显示否。进程<5,然后继续下一步。

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

  • sudo invoke-rc.d rabbitmq-server start

  • ps -ef | grep兔子

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

注意:1)代码是在Localhost而非服务器上测试的。
2)使用以下命令启用RabbitMQ UI:rabbitmq-plugins启用rabbitmq_management