Mengelompokkan RabbitMQ pada CentOS 7

RabbitMQ adalah broker pesan sumber terbuka yang mendukung AMQP, STOMP, dan teknologi komunikasi lainnya. Ini banyak digunakan dalam aplikasi perusahaan dan arsitektur layanan mikro modern di mana ia bertindak sebagai saluran pesan tidak sinkron antara berbagai layanan mikro. Panduan ini akan menjelaskan bagaimana Anda bisa mengelompokkan RabbitMQ pada beberapa server CentOS 7 untuk membentuk broker pesan ketersediaan tinggi. Dalam tutorial ini, satu server akan bertindak sebagai server master dan server lainnya akan bertindak sebagai server cermin jika server master tidak tersedia.

Prasyarat

Konfigurasikan firewall

CentOS firewall, ( firewalld), tidak mengizinkan lalu lintas masuk secara default. Untuk membuat RabbitMQ tersedia untuk sistem lain di dalam dan di luar jaringan, dan untuk memungkinkan kami mengakses konsol manajemen, pertama-tama kita harus membuka beberapa port.

Konsol manajemen antarmuka web RabbitMQ mendengarkan secara default di port 15672. Kami ingin membuat konsol manajemen tersedia untuk umum sehingga kami dapat mengaksesnya dari komputer kami. Karena itu kami akan menginstruksikan firewallduntuk secara permanen membuka port 15672di zona publik (yang merupakan zona default dan aktif pada instance Vultr).

sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent

Simpul RabbitMQ harus dapat berkomunikasi satu sama lain. Kami ingin membuka port yang diperlukan, tetapi hanya melalui jaringan internal. Kami tidak ingin siapa pun di internet dapat mengelola atau langsung menghubungi server kami. Perintah berikut menganggap bahwa server kami ada di 192.168.0.100/24subnet.

Layanan pertama adalah layanan epmdpenemuan rekan yang mendengarkan secara default di port 4369.

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="4369" accept'

Untuk komunikasi internode dan CLI, RabbitMQ harus dapat berkomunikasi melalui port 25672.

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="25672" accept'

Alat CLI berkomunikasi melalui rentang port 35672-35682.

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="35672-35682" accept'

Jika aplikasi Anda memerlukan protokol AMQP, Anda juga perlu membuka porta 5671dan 5672. Jika Anda harus dapat berkomunikasi melalui protokol lain, Anda dapat menemukan informasi yang diperlukan tentang persyaratan jaringan RabbitMQ pada dokumentasi resmi RabbitMQ .

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="5672" accept'

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="5671" accept'

Sekarang firewalldsudah dikonfigurasi, kita perlu menginstruksikannya untuk memuat ulang konfigurasi.

sudo firewall-cmd --reload

Ulangi langkah-langkah dari bagian ini di semua server.

Install rabbitmqadmin

Plugin manajemen dilengkapi dengan alat Python yang disebut rabbitmqadminyang dapat dengan mudah diinstal pada sistem setelah plugin manajemen diaktifkan.

sudo wget http://localhost:15672/cli/rabbitmqadmin
sudo mv rabbitmqadmin /usr/local/bin/
sudo chmod +x /usr/local/bin/rabbitmqadmin

Konfigurasikan DNS

Anda harus menggunakan nama host server untuk mengidentifikasi server saat pengelompokan. Secara default, server tidak memiliki catatan DNS yang ditetapkan dan koneksi akan gagal. Untuk segera mengatasinya, tambahkan nama host master dan mirror ke /etc/hostsfile menggunakan editor favorit Anda.

Misalnya, file host master Anda mungkin terlihat seperti berikut. Perhatikan dua catatan terakhir, yang memungkinkan server untuk mengidentifikasi satu sama lain dengan nama host mereka. Pastikan untuk mengubah alamat IP ke alamat Anda.

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

127.0.0.1 guest
::1       guest

127.0.0.1 YOUR_MASTER_SERVER_HOST_NAME
::1       YOUR_MASTER_SERVER_HOST_NAME


192.168.0.101 YOUR_MASTER_SERVER_HOST_NAME
192.168.0.102 YOUR_MIRROR_SERVER_HOST_NAME

Mengelompokkan node

Prasyarat impor untuk memungkinkan node bergabung satu sama lain adalah bahwa cookie Erlang dari semua node identik. Secara default, setiap node akan diberi cookie Erlang yang unik, jadi Anda harus mengkonfigurasi ulang pada semua node.

Perintah berikut akan mengatur cookie Erlang menjadi " WE<3COOKIES", tetapi jangan ragu untuk mengubahnya sesuai keinginan Anda. Lakukan ini di semua server.

sudo sh -c "echo 'WE<3COOKIES' > /var/lib/rabbitmq/.erlang.cookie"

Mulai ulang RabbitMQ di semua server untuk memastikan bahwa cookie Erlang dimuat ulang dengan benar.

sudo systemctl restart rabbitmq-server.service

Jalankan perintah berikut pada semua server kecuali pada server master. Ini akan membiarkan node bergabung dengan server master dan membentuk sebuah cluster.

sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster "rabbit@<YOUR_MASTER_SERVER_HOST_NAME>"
sudo rabbitmqctl start_app

Verifikasi bahwa node telah bergabung dengan cluster dengan menjalankan perintah berikut.

sudo rabbitmqctl cluster_status

Semua node Anda akan muncul di bagian nodesdan running_nodesdi output. Mulai sekarang, Anda tidak perlu lagi mengulangi langkah-langkah di setiap server, konfigurasi akan secara otomatis dicerminkan ke node lain.

Buat kebijakan ketersediaan tinggi

Sekarang kita memiliki sekelompok node RabbitMQ, kita dapat menggunakan ini untuk membuat antrian ketersediaan tinggi dan pertukaran dengan menyiapkan kebijakan baru. Kebijakan ini dapat ditambahkan melalui RabbitMQ Management Console atau menggunakan antarmuka baris perintah.

sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "all" ha ".*" '{ "ha-mode": "exactly", "ha-params": 2, "ha-sync-mode": "automatic"}'

Daftar berikut ini akan menjelaskan apa arti setiap bagian dari perintah.

  • -p "/": Gunakan kebijakan ini di "/"vhost (default setelah instalasi)
  • --priority 1: Urutan untuk menerapkan kebijakan
  • --apply-to "all": Bisa jadi "queues", "exchanges"atau"all"
  • ha: Nama yang kami berikan untuk kebijakan kami
  • ".*": Ekspresi reguler yang digunakan untuk memutuskan antrian atau pertukaran kebijakan mana yang diterapkan. ".*"akan cocok dengan apa pun
  • '{ "ha-mode": "exactly", "ha-params": 2, "ha-sync-mode": "automatic"}': Representasi kebijakan JSON. Dokumen ini menjelaskan bahwa kami ingin - tepatnya 2 node tempat data disinkronkan secara otomatis

Singkatnya, kebijakan ini akan memastikan bahwa kami akan selalu memiliki 2 salinan data pada antrian atau pertukaran selama kami memiliki minimal 2 node aktif dan berjalan. Jika Anda memiliki lebih banyak node, Anda dapat meningkatkan nilai ha-params. Kuorum, ( N/2 + 1), dari node disarankan. Memiliki lebih banyak salinan data Anda akan menghasilkan disk yang lebih tinggi, i / o, dan penggunaan bersih yang dapat mengakibatkan kinerja yang menurun.

Jika Anda ingin mirror data ke semua node di cluster, Anda bisa menggunakan dokumen JSON berikut.

'{ "ha-mode": "all", "ha-sync-mode": "automatic"}'

Jika Anda ingin mirror data hanya ke node tertentu, (misalnya: node-1dan node-2), Anda bisa menggunakan yang berikut ini.

'{ "ha-mode": "nodes", "ha-params" :["rabbit@node-1", "rabbit@node-2"], "ha-sync-mode": "automatic"}'

Anda dapat mengubah ekspresi reguler untuk menetapkan kebijakan berbeda ke antrian yang berbeda. Katakanlah kita memiliki tiga simpul berikut:

  • kelinci @ tuan
  • rabbit @ client-ha
  • kelinci @ produk-ha

Kita kemudian dapat membuat dua kebijakan yang akan menghasilkan antrian yang memiliki nama yang dimulai dengan "klien" untuk dicerminkan ke rabbit@client-hasimpul dan semua antrian yang memiliki nama yang dimulai dengan "produk" untuk dicerminkan ke rabbit@product-hanode.

sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "queues" ha-client "client.*" '{ "ha-mode": "nodes", "ha-params": ["rabbit@master", "rabbit@client-ha"], "ha-sync-mode": "automatic"}
sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "queues" ha-product "product.*" '{ "ha-mode": "nodes", "ha-params": ["rabbit@master", "rabbit@product-ha"], "ha-sync-mode": "automatic"}

Sebuah komentar kecil di sini: antrian eksklusif tidak pernah dicerminkan atau tahan lama di RabbitMQ, bahkan jika kebijakan ini cocok dengan antrian tersebut. Antrian eksklusif secara otomatis dihancurkan begitu klien memutus dan, dengan demikian, tidak ada gunanya untuk mereplikasi ke server lain. Jika server gagal, klien akan memutuskan dari itu dan antrian akan dihancurkan secara otomatis. Contoh cermin akan dihancurkan juga.

Menguji pengaturan

Untuk menguji pengaturan berkerumun kami dapat membuat antrian baru menggunakan antarmuka baris perintah melalui konsol manajemen.

sudo rabbitmqadmin declare queue --vhost "/" name=my-ha-queue durable=true

Ini akan membuat antrian yang tahan lama pada /vhost default dengan namanya my-ha-queue.

Jalankan perintah berikut dan verifikasi di output bahwa antrian memiliki kebijakan 'ha' kami ditugaskan dan memiliki pid pada master dan pada mirror node.

sudo rabbitmqctl list_queues name policy state pid slave_pids

Kami sekarang dapat mempublikasikan pesan ke antrian dari master node dan menghentikan RabbitMQ pada master node.

sudo rabbitmqadmin -u user_name -p password  publish routing_key=my-ha-queue payload="hello world"
sudo systemctl rabbitmqctl shutdown

Sekarang dapatkan kembali dengan menghubungkan ke mirror node.

 sudo rabbitmqadmin -H MIRROR_NODE_IP_OR_DNS -u user_name -p password get queue=my-ha-queue

Akhirnya, kita dapat me-restart node master kita.

sudo systemctl start rabbitmq-server.service

Hapus pengguna tamu

Seperti disebutkan sebelumnya, RabbitMQ secara otomatis membuat pengguna tamu dengan kata sandi tamu default. Ini akan menjadi praktik yang buruk untuk meninggalkan pengguna default ini pada sistem terbuka untuk umum.

sudo rabbitmqctl delete_user guest


Leave a Comment

Cara Memasang Panel Kontrol Hosting Mudah di Ubuntu 16.04

Cara Memasang Panel Kontrol Hosting Mudah di Ubuntu 16.04

Pelajari langkah-langkah untuk memasang Panel Kontrol Hosting Mudah (EHCP) di Ubuntu 16.04 dengan panduan ini.

Wawasan tentang 26 Teknik Analisis Data Besar: Bagian 1

Wawasan tentang 26 Teknik Analisis Data Besar: Bagian 1

Wawasan tentang 26 Teknik Analisis Data Besar: Bagian 1

6 Hal yang Sangat Menggila dari Nintendo Switch

6 Hal yang Sangat Menggila dari Nintendo Switch

Banyak dari Anda tahu Switch keluar pada Maret 2017 dan fitur-fitur barunya. Bagi yang belum tahu, kami sudah menyiapkan daftar fitur yang membuat 'Switch' menjadi 'gadget yang wajib dimiliki'.

Janji Teknologi Yang Masih Belum Ditepati

Janji Teknologi Yang Masih Belum Ditepati

Apakah Anda menunggu raksasa teknologi untuk memenuhi janji mereka? periksa apa yang belum terkirim.

Fungsionalitas Lapisan Arsitektur Referensi Big Data

Fungsionalitas Lapisan Arsitektur Referensi Big Data

Baca blog untuk mengetahui berbagai lapisan dalam Arsitektur Big Data dan fungsinya dengan cara yang paling sederhana.

Bagaimana AI Dapat Membawa Otomatisasi Proses ke Tingkat Selanjutnya?

Bagaimana AI Dapat Membawa Otomatisasi Proses ke Tingkat Selanjutnya?

Baca ini untuk mengetahui bagaimana Kecerdasan Buatan menjadi populer di antara perusahaan skala kecil dan bagaimana hal itu meningkatkan kemungkinan untuk membuat mereka tumbuh dan memberi keunggulan pada pesaing mereka.

CAPTCHA: Berapa Lama Itu Bisa Tetap Menjadi Teknik yang Layak Untuk Perbedaan Human-AI?

CAPTCHA: Berapa Lama Itu Bisa Tetap Menjadi Teknik yang Layak Untuk Perbedaan Human-AI?

CAPTCHA telah berkembang cukup sulit bagi pengguna untuk dipecahkan dalam beberapa tahun terakhir. Apakah itu akan tetap efektif dalam deteksi spam dan bot di masa mendatang?

Singularitas Teknologi: Masa Depan Peradaban Manusia yang Jauh?

Singularitas Teknologi: Masa Depan Peradaban Manusia yang Jauh?

Saat Sains Berkembang dengan kecepatan tinggi, mengambil alih banyak upaya kita, risiko menundukkan diri kita pada Singularitas yang tidak dapat dijelaskan juga meningkat. Baca, apa arti singularitas bagi kita.

Telemedicine Dan Perawatan Kesehatan Jarak Jauh: Masa Depan Ada Di Sini

Telemedicine Dan Perawatan Kesehatan Jarak Jauh: Masa Depan Ada Di Sini

Apa itu telemedicine, perawatan kesehatan jarak jauh dan dampaknya terhadap generasi mendatang? Apakah itu tempat yang bagus atau tidak dalam situasi pandemi? Baca blog untuk menemukan tampilan!

Pernahkah Anda Bertanya-tanya Bagaimana Hacker Menghasilkan Uang?

Pernahkah Anda Bertanya-tanya Bagaimana Hacker Menghasilkan Uang?

Anda mungkin pernah mendengar bahwa peretas menghasilkan banyak uang, tetapi pernahkah Anda bertanya-tanya bagaimana cara mereka mendapatkan uang sebanyak itu? mari berdiskusi.