[ English | 日本語 | Deutsch | Indonesia ]

Pemecahan masalah RabbitMQ

Bagian ini memberikan tips untuk menyelesaikan masalah-masalah umum RabbitMQ.

Layanan RabbitMQ hang

Sangat umum bagi layanan RabbitMQ untuk hang ketika dinyalakan kembali atau dihentikan. Oleh karena itu, sangat disarankan agar Anda me-restart RabbitMQ secara manual pada setiap node pengontrol.

Catatan

Nama layanan RabbitMQ dapat bervariasi tergantung pada sistem operasi atau vendor Anda yang memasok layanan RabbitMQ Anda.

  1. Restart layanan RabbitMQ pada node pengontrol pertama. Perintah service rabbitmq-server restart mungkin tidak berfungsi dalam situasi tertentu, jadi yang terbaik adalah menggunakan:

    # service rabbitmq-server stop
    # service rabbitmq-server start
    
  2. Jika layanan menolak untuk berhenti, maka jalankan perintah :command:`pkill`untuk menghentikan layanan, kemudian mulai ulang layanan:

    # pkill -KILL -u rabbitmq
    # service rabbitmq-server start
    
  3. Verifikasi proses RabbitMQ berjalan:

    # ps -ef | grep rabbitmq
    # rabbitmqctl list_queues
    # rabbitmqctl list_queues 2>&1 | grep -i error
    
  4. Jika ada kesalahan, jalankan perintah cluster_status untuk memastikan tidak ada partisi:

    # rabbitmqctl cluster_status
    

    Untuk informasi lebih lanjut, lihat RabbitMQ documentation.

  5. Kembali ke langkah pertama dan coba restart layanan RabbitMQ lagi. Jika Anda masih memiliki kesalahan, hapus konten di direktori /var/lib/rabbitmq/mnesia/ antara berhenti dan memulai layanan RabbitMQ.

  6. Jika tidak ada kesalahan, restart layanan RabbitMQ pada node controller berikutnya.

Sejak rilis Liberty, layanan OpenStack akan secara otomatis pulih dari pemadaman (outage) RabbitMQ. Anda hanya harus mempertimbangkan memulai kembali layanan OpenStack setelah memeriksa apakah fungsi heartbeat RabbitMQ diaktifkan, dan jika layanan OpenStack tidak menerima pesan dari antrian RabbitMQ.

Peringatan RabbitMQ

Jika Anda menerima peringatan untuk RabbitMQ, ambil langkah-langkah berikut untuk memecahkan masalah dan menyelesaikan masalah:

  1. Tentukan dari server mana alarm RabbitMQ berasal.

  2. Mencoba mem-boot instance nova di lingkungan yang terpengaruh.

  3. Jika Anda tidak dapat meluncurkan sebuah instance, lanjutkan untuk memecahkan masalah.

  4. Masuk ke masing-masing node pengontrol untuk lingkungan yang terpengaruh, dan periksa file log /var/log/rabbitmq untuk masalah yang dilaporkan.

  5. Cari masalah koneksi yang diidentifikasi dalam file log.

  6. Untuk setiap node pengontrol di lingkungan Anda, lihat direktori /etc/init.d untuk memeriksanya berisi nova*, cinder*, neutron*, atau glance*. Juga periksa antrian pesan RabbitMQ yang tumbuh tanpa dikonsumsi yang akan menunjukkan layanan OpenStack mana yang terpengaruh. Mulai ulang layanan OpenStack yang terpengaruh.

  7. Untuk setiap node komputasi lingkungan Anda, lihat direktori /etc/init.d dan periksa apakah mengandung nova*, cinder*, neutron*, or glance*, Juga periksa antrian pesan RabbitMQ yang tumbuh tanpa dikonsumsi yang akan menunjukkan layanan OpenStack mana yang terpengaruh. Mulai ulang layanan OpenStack yang terpengaruh.

  8. Buka OpenStack Dashboard dan luncurkan instance. Jika instance diluncurkan, masalah teratasi.

  9. Jika Anda tidak dapat meluncurkan instance, periksa file log /var/log/rabbitmq untuk masalah koneksi yang dilaporkan.

  10. Restart layanan RabbitMQ di semua node pengontrol:

    # service rabbitmq-server stop
    # service rabbitmq-server start
    

    Catatan

    Langkah ini berlaku jika Anda telah memulai kembali hanya komponen OpenStack, dan tidak dapat terhubung ke layanan RabbitMQ.

  11. Ulangi langkah 7-8.

Konsumsi memori manajemen database yang berlebihan

Sejak rilis Liberty, OpenStack with RabbitMQ 3.4.x atau 3.6.x memiliki masalah dengan database manajemen yang menggunakan memori yang dialokasikan untuk RabbitMQ. Ini disebabkan oleh pengumpulan dan pemrosesan statistik. Ketika satu node dengan RabbitMQ mencapai ambang memori, semua pertukaran dan pemrosesan antrian dihentikan hingga alarm memori pulih.

Untuk mengatasi masalah ini:

  1. Periksa konsumsi memori:

    # rabbitmqctl status
    
  2. Edit file konfigurasi /etc/rabbitmq/rabbitmq.config, dan ubah parameter collect_statistics_interval antara 30000-60000 milidetik. Atau Anda dapat mematikan pengumpulan statistik dengan mengatur parameter collect_statistics menjadi "none".

Batas deskriptor file saat menskala lingkungan cloud

Lingkungan cloud yang diskalakan ke ukuran tertentu akan membutuhkan batas deskriptor file untuk disesuaikan.

Jalankan rabbitmqctl status untuk melihat batas deskriptor file saat ini:

"{file_descriptors,
     [{total_limit,3996},
      {total_used,135},
      {sockets_limit,3594},
      {sockets_used,133}]},"

Sesuaikan batas yang sesuai dalam file konfigurasi /etc/security/limits.conf.