CentOS 7de Tavşan Kümesini Kümeleme

RabbitMQ, AMQP, STOMP ve diğer iletişim teknolojilerini destekleyen açık kaynaklı bir mesaj aracısıdır. Farklı mikro hizmetler arasında zaman uyumsuz bir mesaj kanalı olarak hareket ettiği kurumsal uygulamalarda ve modern mikro hizmet mimarilerinde yaygın olarak kullanılmaktadır. Bu kılavuzda, yüksek kullanılabilirlikli bir ileti aracısı oluşturmak için RabbitMQ'yu birden çok CentOS 7 sunucusunda nasıl kümeleyebileceğiniz açıklanacaktır. Bu öğreticide, bir sunucu ana sunucu olarak görev yapacak ve diğer sunucular ana sunucunun kullanılamaması durumunda ayna sunucu olarak işlev görecektir.

Ön şartlar

Güvenlik duvarını yapılandırın

CentOS güvenlik duvarı ( firewalld) varsayılan olarak gelen trafiğe izin vermez. RabbitMQ'yu ağ içindeki ve dışındaki diğer sistemler için kullanılabilir hale getirmek ve yönetim konsoluna erişmemize izin vermek için, önce bazı bağlantı noktalarını açmamız gerekir.

RabbitMQ'nun web arayüzü yönetim konsolu, bağlantı noktasında varsayılan olarak dinler 15672. Yönetim konsolunu bilgisayarımızdan erişebilmemiz için herkese açık hale getirmek istiyoruz. Bu nedenle , ortak bölgede (bir Vultr örneğinde varsayılan ve etkin bölge olan) firewalldbağlantı noktasını kalıcı olarak açmayı 15672söyleyeceğiz.

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

RabbitMQ düğümlerinin birbirleriyle iletişim kurabilmesi gerekir. Gerekli portları açmak istiyoruz, ancak sadece dahili ağ üzerinden. İnternet'teki hiç kimsenin sunucularımızı yönetmesini veya doğrudan sunucularımızla iletişim kurmasını istemiyoruz. Aşağıdaki komutlar, sunucularımızın 192.168.0.100/24alt ağda olduğunu varsayar .

İlk hizmet, epmdbağlantı noktasında varsayılan olarak dinleyen eş bulma hizmetidir 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'

Internode ve CLI iletişimi için RabbitMQ'nun port üzerinden iletişim kurabilmesi gerekir 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'

CLI araçları, port aralığı üzerinden iletişim kurar 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'

Uygulamalarınızın AMQP protokolüne ihtiyacı varsa, bağlantı noktalarını 5671ve 5672. Başka bir protokol üzerinden iletişim kurabilmeniz gerekirse, RabbitMQ'nun ağ gereksinimleri hakkında gerekli bilgileri resmi RabbitMQ belgelerinde bulabilirsiniz .

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'

Şimdi firewalldyapılandırıldı, yapılandırmayı yeniden yüklemesi talimatını vermeliyiz.

sudo firewall-cmd --reload

Bu bölümdeki adımları tüm sunucularda tekrarlayın.

Yüklemek rabbitmqadmin

Yönetim eklentisi rabbitmqadmin, yönetim eklentisi etkinleştirildikten sonra sisteme kolayca kurulabilen bir Python aracı ile birlikte gelir .

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

DNS'yi yapılandırın

Kümeleme sırasında sunucuları tanımlamak için sunucunun ana bilgisayar adlarını kullanmanız gerekir. Varsayılan olarak, sunuculara atanmış DNS kaydı yoktur ve bağlantı başarısız olur. Bunu hızlı bir şekilde aşmak için, /etc/hostsfavori düzenleyicinizi kullanarak ana ve ayna ana bilgisayar adını dosyaya ekleyin.

Örneğin, master'ınızın hosts dosyası aşağıdaki gibi görünebilir. Sunucuların birbirlerini ana bilgisayar adlarına göre tanımlamalarına izin veren son iki kayda dikkat edin. IP adreslerini kendiniz değiştirdiğinizden emin olun.

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

Düğümleri kümeleyin

Düğümlerin birbirine katılmasına izin vermek için bir önkoşul, tüm düğümlerin Erlang çerezinin aynı olmasıdır. Varsayılan olarak, her düğüme benzersiz bir Erlang çerezi atanır, bu nedenle tüm düğümlerde yeniden yapılandırmanız gerekir.

Aşağıdaki komut Erlang çerezini " WE<3COOKIES" olarak ayarlayacaktır , ancak bunu istediğiniz gibi değiştirmekten çekinmeyin. Bunu tüm sunucularda yapın.

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

Erlang çerezinin düzgün bir şekilde yeniden yüklendiğinden emin olmak için RabbitMQ'yu tüm sunucularda yeniden başlatın.

sudo systemctl restart rabbitmq-server.service

Ana sunucu dışındaki tüm sunucularda aşağıdaki komutları yürütün. Bu, düğümlerin ana sunucuya katılmasını ve bir küme oluşturmasını sağlar.

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

Aşağıdaki komutu çalıştırarak düğümlerin kümeye katıldığını doğrulayın.

sudo rabbitmqctl cluster_status

Tüm düğümleriniz çıktının nodesve running_nodesbölümünde görünecektir . Artık her sunucudaki adımları tekrarlamanıza gerek yok, yapılandırma otomatik olarak diğer düğümlere yansıtılacak.

Yüksek kullanılabilirlik politikası oluşturma

Artık bir RabbitMQ düğüm kümesine sahip olduğumuza göre, bunu yeni bir politika oluşturarak yüksek kullanılabilirlik kuyrukları ve değişimleri yapmak için kullanabiliriz. Bu ilke RabbitMQ Yönetim Konsolu aracılığıyla veya komut satırı arabirimi kullanılarak eklenebilir.

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

Aşağıdaki liste, komutun her bölümünün ne anlama geldiğini açıklayacaktır.

  • -p "/": Bu politikayı "/"hayalette kullanın (kurulumdan sonra varsayılan)
  • --priority 1: Politikaların uygulanma sırası
  • --apply-to "all": Olabilir "queues", "exchanges"ya da"all"
  • ha: Politikamıza verdiğimiz ad
  • ".*": Bu ilkenin hangi kuyruklara veya borsalara uygulanacağına karar vermek için kullanılan normal ifade. ".*"her şeyle eşleşecek
  • '{ "ha-mode": "exactly", "ha-params": 2, "ha-sync-mode": "automatic"}': Politikanın JSON temsili. Bu belgede istediğimiz açıklanmaktadır - verilerin otomatik olarak senkronize edildiği tam olarak 2 düğüm

Kısacası, bu politika en az 2 düğümümüzün olduğu ve çalıştığı sürece bir kuyruk veya değişimdeki verilerin her zaman 2 kopyasına sahip olmamızı sağlayacaktır. Daha fazla düğümünüz varsa değerini artırabilirsiniz ha-params. N/2 + 1Düğümlerden oluşan bir çekirdek ( ) önerilir. Verilerinizin daha fazla kopyasına sahip olmak daha yüksek disk, i / o ve net kullanım ile sonuçlanabilir ve bu durum performansın düşmesine neden olabilir.

Verileri kümedeki tüm düğümlere yansıtmak isterseniz, aşağıdaki JSON belgesini kullanabilirsiniz.

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

Verileri yalnızca belirli düğümlere yansıtmak isterseniz (örneğin: node-1ve node-2), aşağıdakileri kullanabilirsiniz.

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

Farklı sıralara farklı ilkeler atamak için normal ifadeyi değiştirebilirsiniz. Diyelim ki şu üç düğüme sahibiz:

  • Tavşan @ ana
  • tavşan @ istemci-ha
  • Tavşan @ ürün-ha

Daha sonra "istemci" ile başlayan bir ada sahip olan kuyrukların rabbit@client-hadüğüme yansıtılmasına ve "ürün" ile başlayan bir ada sahip tüm kuyrukların düğüme yansıtılmasına neden olacak iki ilke oluşturabiliriz rabbit@product-ha.

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

Burada küçük bir açıklama: Bu politika bu tür sıralarla eşleşse bile, özel sıralar RabbitMQ'da asla yansıtılmaz veya kalıcı olmaz. Özel kuyruklar, bir istemci bağlantıyı kestikten sonra otomatik olarak yok edilir ve bu nedenle başka bir sunucuya çoğaltmak yararlı olmaz. Sunucu başarısız olursa, istemci bağlantıyı keser ve sıra otomatik olarak yok edilir. Yansıtılmış örnekler de yok edilecekti.

Kurulumu test etme

Kümelenmiş kurulumu test etmek için, yönetim konsolu üzerinden komut satırı arabirimini kullanarak yeni bir kuyruk oluşturabiliriz.

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

Bu, varsayılan /vhost üzerinde kalıcı bir kuyruk oluşturur my-ha-queue.

Aşağıdaki komutu çalıştırın ve çıktıda kuyruğun 'ha' politikamızın atandığını ve master ve bir ayna düğümünde pid'ler olduğunu doğrulayın.

sudo rabbitmqctl list_queues name policy state pid slave_pids

Artık ana düğümden kuyruğa bir mesaj yayınlayabilir ve ana düğümde RabbitMQ'yu durdurabiliriz.

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

Şimdi ayna düğümüne bağlanarak geri alın.

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

Son olarak, ana düğümümüzü yeniden başlatabiliriz.

sudo systemctl start rabbitmq-server.service

Konuk kullanıcıyı sil

Daha önce de belirtildiği gibi, RabbitMQ otomatik olarak varsayılan konuk şifresi ile konuk kullanıcı oluşturur. Bu varsayılan kullanıcıyı herkese açık bir sistemde bırakmak kötü bir uygulamadır.

sudo rabbitmqctl delete_user guest


Leave a Comment

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

Nintendo Switch Hakkında Son Derece Çılgın 6 Şey

Nintendo Switch Hakkında Son Derece Çılgın 6 Şey

Birçoğunuz Switch'in Mart 2017'de çıkacağını ve yeni özelliklerini biliyorsunuz. Bilmeyenler için, 'Switch'i 'olmazsa olmaz bir gadget' yapan özelliklerin bir listesini hazırladık.

Hala Teslim Edilmeyen Teknoloji Sözleri

Hala Teslim Edilmeyen Teknoloji Sözleri

Teknoloji devlerinin sözlerini yerine getirmesini mi bekliyorsunuz? teslim edilmeyenleri kontrol edin.

Büyük Veri Referans Mimarisi Katmanlarının İşlevleri

Büyük Veri Referans Mimarisi Katmanlarının İşlevleri

Büyük Veri Mimarisindeki farklı katmanları ve işlevlerini en basit şekilde öğrenmek için blogu okuyun.

Yapay Zeka Süreç Otomasyonunu Nasıl Bir Sonraki Seviyeye Taşıyabilir?

Yapay Zeka Süreç Otomasyonunu Nasıl Bir Sonraki Seviyeye Taşıyabilir?

Yapay Zekanın küçük ölçekli şirketler arasında nasıl popüler hale geldiğini ve onları büyütme ve rakiplerine üstünlük sağlama olasılıklarını nasıl artırdığını öğrenmek için bunu okuyun.

CAPTCHA: İnsan-AI Ayrımı İçin Ne Kadar Geçerli Bir Teknik Kalabilir?

CAPTCHA: İnsan-AI Ayrımı İçin Ne Kadar Geçerli Bir Teknik Kalabilir?

CAPTCHA, son birkaç yılda kullanıcıların çözmesi oldukça zorlaştı. Gelecekte spam ve bot tespitinde etkili kalabilecek mi?

Teknolojik Tekillik: İnsan Uygarlığının Uzak Bir Geleceği mi?

Teknolojik Tekillik: İnsan Uygarlığının Uzak Bir Geleceği mi?

Bilim hızla gelişip birçok çabamızı üstlendikçe, kendimizi açıklanamaz bir Tekilliğe maruz bırakmanın riskleri de artıyor. Okuyun, tekillik bizim için ne anlama gelebilir.

Teletıp ve Uzaktan Sağlık Hizmeti: Gelecek Burada

Teletıp ve Uzaktan Sağlık Hizmeti: Gelecek Burada

Teletıp, uzaktan sağlık hizmetleri ve gelecek nesiller üzerindeki etkisi nedir? Pandemi durumunda iyi bir yer mi değil mi? Bir görünüm bulmak için blogu okuyun!

Hackerların Nasıl Para Kazandığını Hiç Merak Ettiniz mi?

Hackerların Nasıl Para Kazandığını Hiç Merak Ettiniz mi?

Bilgisayar korsanlarının çok para kazandığını duymuş olabilirsiniz, ancak bu kadar parayı nasıl kazandıklarını hiç merak ettiniz mi? Hadi tartışalım.

macOS Catalina 10.15.4 Ek Güncellemesi Çözmekten Daha Fazla Soruna Neden Oluyor

macOS Catalina 10.15.4 Ek Güncellemesi Çözmekten Daha Fazla Soruna Neden Oluyor

Son zamanlarda Apple, sorunları gidermek için macOS Catalina 10.15.4'ü ek bir güncelleme yayınladı, ancak güncelleme, mac makinelerinde tuğla oluşmasına neden olan daha fazla soruna neden oluyor gibi görünüyor. Daha fazla bilgi edinmek için bu makaleyi okuyun