Yönetilen MQTT Bulutu

Mosquitto'dan Bulut MQTT Broker'a Kesintisiz Geçiş Nasıl Yapılır?

Mosquitto'dan bulut MQTT broker'a geçiş için pratik bir runbook: istemcileri ve topic'leri envanterleyin, kimlik bilgilerini eşleyin, iki broker'ı aynı trafiği görecek şekilde bridge ile bağlayın, istemcileri dalgalar halinde taşıyın ve eski sistemi güvenle devreden çıkarın.

Yerel Mosquitto broker'ın bulut broker'a bridge ile bağlandığı ve istemcilerin taşındığı Mosquitto'dan bulut MQTT'ye geçiş diyagramı
Bunu kendi MQTT broker’ınızda çalıştırınFree planla özel, yönetilen bir MQTT broker alın ve hazır kod örnekleriyle başlayın.
Ücretsiz deneyin Kod örnekleri Kart gerekmez

Mosquitto'dan bulut MQTT'ye geçerken riskli olan kısım yeni broker değil, cihazların geçiş yaptığı andır. Bu eğitim size kesintisiz bir runbook sunuyor: bugün Mosquitto'nuzda neler çalıştığını envanterleyin, kimlik bilgilerini bulut broker'a eşleyin, iki broker'ı bir Mosquitto bridge ile yan yana çalıştırın, istemcileri dalgalar halinde taşıyın ve hazır bir geri dönüş planıyla eski sistemi devreden çıkarın. Örneklerde hedef olarak ConnectMQ kullanılıyor, ancak yöntem standartlarla uyumlu her broker'da işe yarar.

Ekipler Neden Mosquitto'dan Geçiyor?

Mosquitto mükemmel ve hafif bir broker'dır; pek çok edge ve laboratuvar kurulumu için hâlâ doğru tercihtir. Ekipler merkezi broker'ı buluta genellikle teknik eksikliklerden değil, operasyonel nedenlerle taşır: sertifika yenilemeleri, işletim sistemi yamaları, yedeklemeler, izleme ve nöbet (on-call) yükü, başka işleri de olan birinin omzuna biner. Uzak cihazlar ayrıca erişilebilir bir endpoint'e ihtiyaç duyar; bu da kendi bakımını yaptığınız bir sunucu için güvenlik duvarı kuralları ve internete açılma demektir. Henüz karar aşamasındaysanız önce kendi barındırılan ve yönetilen MQTT broker karşılaştırması ile Mosquitto bulut alternatifi yazılarındaki artı ve eksileri karşılaştırın.

Adım 1: İstemcilerin, Topic'lerin ve Özelliklerin Envanterini Çıkarın

Listelemediğiniz bir şeyi taşıyamazsınız. Mevcut broker'dan dört şey toplayın.

Yapılandırma. mosquitto.conf dosyasını ve conf.d içindeki dosyaları okuyun. Listener'ları ve portları, allow_anonymous, password_file, acl_file, kalıcılık (persistence) ayarlarını, max_inflight_messages değerini, mesaj boyutu limitlerini ve mevcut bridge'leri not edin.

İstemciler. Mosquitto her bağlantıyı client ID'siyle birlikte loglar. Benzersiz ID'leri ve kaynak adresleri logdan çıkarın:

grep "New client connected" /var/log/mosquitto/mosquitto.log \
  | sed -E 's/.*from ([0-9a-fA-F.:]+):[0-9]+ as ([^ ]+).*/\2 \1/' \
  | sort -u > clients.txt
wc -l clients.txt

Topic'ler. Temsili bir süre boyunca her şeye abone olun ve retained olanlar dahil benzersiz topic adlarını kaydedin:

timeout 600 mosquitto_sub -h localhost -p 1883 -u admin -P 'ADMIN_PASSWORD' \
  -i inventory-$RANDOM -t '#' -F '%t %r' | sort -u > topics.txt

%r alanı retained mesajlar için 1 yazdırır; bu mesajları yeni broker'da yeniden oluşturmanız gerekecek.

Özellik kullanımı. İstemcilerin MQTT 5, QoS 2, kalıcı oturumlar (persistent session), büyük payload'lar, wildcard abonelikler veya topic bazlı ACL kullanıp kullanmadığını kontrol edin. Her biri hedef broker için bir gereksinime dönüşür.

Adım 2: Özellikleri ve Kimlik Bilgilerini Eşleyin

Herhangi bir cihaza dokunmadan önce envanterinizi hedef broker ile karşılaştırın:

Mosquitto özelliği Hedefte kontrol edilecek ConnectMQ
MQTT 3.1.1 / 5.0 Aynı sürümler destekleniyor mu İkisi de destekleniyor
1883 / 8883 / WebSocket listener'ları Portlar ve yollar /mqtt ile 1883, 8883, 8083, 8084
password_file kullanıcıları Kimlik bilgilerinin nasıl verildiği Portalda üretilen kullanıcı adı, parola ve client ID
Her client ID'ye izin verilmesi Client ID kuralları Client ID'ler verilen kimlik bilgilerine bağlı
acl_file topic bazlı kurallar ACL desteği Topic bazlı ACL sunulmuyor; her güven sınırı için ayrı broker'lar veya kimlik bilgileri
QoS 2 Plan desteği Serverless Paid ve üzeri
message_size_limit Maksimum payload Free'de 256 KB, Serverless Paid'de 1 MB
Yeniden başlatmalar arasında kalıcılık Oturum ve retained kalıcılığı Garanti edilmiyor; istemciler yeniden abone olmalı ve durumu yeniden yayınlamalı
Diğer broker'lara bridge Yerel bridge desteği Bulut tarafında sunulmuyor; gerekirse bridge'i Mosquitto'da tutun

İki satır özel dikkat gerektirir. Birincisi client ID'ler: Mosquitto'da genellikle her istemci istediği ID'yi seçebilirken, ConnectMQ her client ID'yi verilen kimlik bilgilerine bağlar. Her cihaz veya servis için bir kimlik bilgisi seti planlayın ve her cihazın kendisine verilen client ID'yi kullanması için firmware'i veya yapılandırmayı güncelleyin. İkincisi ACL'ler: Mosquitto kurulumunuz güvenilmeyen tarafları ayırmak için ayrıntılı topic ACL'lerine dayanıyorsa, geçişten önce bu sınırı ayrı broker'larla veya erişime aracılık eden bir backend ile yeniden tasarlayın.

Ardından hedefi oluşturun: app.connectmq.com adresinden kaydolun, zirve bağlantı sayınıza uygun bir plan seçin, bir broker oluşturun ve bridge ile ilk istemci dalgası için kimlik bilgilerini oluşturun.

Adım 3: Mosquitto Bridge ile Paralel Çalıştırın

Kesintisiz geçişi mümkün kılan şey bridge'dir. Mosquitto bulut broker'a normal bir MQTT istemcisi olarak bağlanır ve seçilen topic'leri her iki yönde iletir; böylece geçiş süresince iki broker'daki cihazlar da aynı veriyi görür. /etc/mosquitto/conf.d/bridge-connectmq.conf gibi bir dosya ekleyin:

connection connectmq
address broker.connectmq.com:8883
bridge_protocol_version mqttv311
remote_clientid YOUR_CLIENT_ID
remote_username YOUR_USERNAME
remote_password YOUR_PASSWORD
bridge_capath /etc/ssl/certs
bridge_insecure false
try_private false
notifications false
cleansession true
restart_timeout 5 60

# Yerel cihazların ürettiği telemetri buluta gider
topic factory1/+/+/telemetry out 1
topic factory1/+/+/status out 1
# Bulut tarafındaki uygulamaların gönderdiği komutlar yerel cihazlara iner
topic factory1/+/+/cmd in 1

Mosquitto'yu sudo systemctl restart mosquitto ile yeniden başlatın ve logda bridge bağlantısının başarılı olduğunu kontrol edin. Bazı ayarlar önemlidir:

  • try_private false: private bridge bayrağı Mosquitto'ya özgü bir uzantıdır; uzak taraf farklı bir broker olduğunda bunu kapatın.
  • notifications false: Mosquitto'nun bridge durum topic'lerini uzak tarafa yayınlamasını engeller; orada bunlara ihtiyacınız yoktur.
  • Yönlü topic'ler: mümkün olan her yerde both yerine out ve in kullanın. Aynı topic'lerin iki broker arasında çift yönlü köprülenmesi mesaj döngülerine yol açabilir.
  • restart_timeout: bulut tarafına kısa süreliğine erişilemediğinde yeniden bağlanma denemelerini kademeli olarak seyreltir.

Bridge'i doğrulamak için bulut tarafında kendi kimlik bilgilerinizle abone olun veya yerel bir cihaz yayın yaparken portaldaki canlı topic gezginini izleyin.

mosquitto_sub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
  -u YOUR_USERNAME -P YOUR_PASSWORD -i YOUR_CLIENT_ID \
  -t 'factory1/#' -v

Burada bridge'inkinden farklı bir kimlik bilgisi seti kullanın, çünkü her client ID aynı anda yalnızca bir bağlantı tutabilir.

Adım 4: İstemcileri Dalgalar Halinde Taşıyın

Bridge çalışırken her istemci bağımsız olarak taşınabilir. Önce tüketicileri, sonra üreticileri taşıyın:

  1. Backend tüketicileri (veritabanları, Node-RED, dashboard'lar): bunları bulut broker'a yönlendirin. Bridge sayesinde yerel telemetriyi almaya devam ederler.
  2. Pilot cihaz grubu: farklı sahalardan ve firmware sürümlerinden birkaç cihaz. Host'u, 8883 portunu, TLS'i ve kimlik bilgilerini değiştirin ve birkaç gün boyunca izleyin.
  3. Kalan cihazlar, gruplar halinde: saha veya ürün hattı bazında, her gruptan sonra bir kontrol noktasıyla.
  4. Komut üreticileri: cihazlar bulut broker'a geçtikten sonra komut gönderen uygulamaları taşıyın.

Her grup için bağlantı durumunu $SYS/broker/connection/{clientId}/state üzerinden doğrulayın, beklenen topic'lerin gezginde göründüğünü kontrol edin ve envanterinizin işaretlediği retained mesajları yeniden oluşturun. ConnectMQ yeniden başlatmalar arasında retained durumu garanti etmediğinden, cihazların her bağlandığında retained durumlarını ve yapılandırmalarını yeniden yayınlamasını sağlayın; bu zaten her broker'da iyi bir uygulamadır.

Dalgalar sırasında planınızın limitlerini izleyin. Bir dalga bağlantı sayısını kotanın üzerine çıkarırsa MQTT 5 istemcileri 0x97 reason code'unu alır; 3.1.1 istemcileri ise reddedilir. Planı dalga sırasında değil, dalgadan önce yükseltin.

Adım 5: Geçişi Tamamlayın, Ardından Eski Sistemi Devreden Çıkarın

Yerel broker'da bridge dışında doğrudan bağlı hiçbir istemci kalmadığında geçiş işlevsel olarak tamamlanmış demektir. Bridge'i ve eski broker'ı, geri dönüş yolu olarak üzerinde anlaşılan bir gözlem süresi boyunca çalışır durumda tutun. Bir cihazı geri almak yalnızca eski host'a dönen bir yapılandırma değişikliğidir; bu arada bridge iki tarafı senkronize tutar.

Ardından sırayla devreden çıkarın: bridge yapılandırmasını kaldırın, Mosquitto'yu durdurun, güvenlik duvarı portlarını kapatın, eski kimlik bilgilerini iptal edin ve yapılandırma dosyalarını arşivleyin. Bazı sahalar çevrimdışı da çalışması gereken edge mantığı için yerel MQTT'ye ihtiyaç duyuyorsa, orada kalıcı olarak bir Mosquitto instance'ı tutun ve bunu yukarıya doğru köprüleyin; bu hibrit tasarım yaygındır ve tamamen geçerlidir.

Geçiş Kontrol Listesi

  1. Yapılandırma, istemci listesi ve topic listesi Mosquitto'dan dışa aktarıldı.
  2. Özellik boşlukları (ACL'ler, QoS 2, mesaj boyutu, kalıcılık) çözüldü.
  3. Hedef broker yeterli bağlantı içeren bir planda oluşturuldu.
  4. Her cihaz veya servis için bir kimlik bilgisi seti oluşturuldu.
  5. Bridge yönlü topic'lerle çalışıyor; veri her iki tarafta doğrulandı.
  6. Tüketiciler taşındı ve doğrulandı.
  7. Cihazlar kontrol noktalarıyla dalgalar halinde taşındı.
  8. Retained durum bağlantı anında yeniden yayınlanıyor.
  9. Gözlem süresi boyunca geri dönüş yolu korundu.
  10. Eski broker devreden çıkarıldı ve kimlik bilgileri iptal edildi.

MQTT'de prototipten üretime geçiş rehberi, aynı projeye dahil etmek isteyebileceğiniz sıkılaştırma (hardening) adımlarını ele alıyor.

ConnectMQ'ya Geçin

app.connectmq.com adresinde kredi kartı gerekmeden Serverless planda ücretsiz bir broker oluşturun ve taahhütte bulunmadan önce tüm runbook'u test etmek için bridge'i bu broker'a karşı kurun. ConnectMQ size TLS, WebSocket, verilen kimlik bilgileri ve canlı topic gezgini içeren bir portalla birlikte barındırılan bir MQTT broker sunar. Dağıtım modelleri hakkında arka plan bilgisi için bulut MQTT broker rehberini okuyun; hızlı ve hassas olmayan denemeler için de herkese açık MQTT test broker'ını kullanın.

Sık Sorulan Sorular

Cihaz firmware'ini değiştirmeden Mosquitto'dan bulut MQTT'ye geçebilir miyim?

Yalnızca host, port, TLS ayarları, kimlik bilgileri ve client ID firmware güncellemesi olmadan yapılandırılabiliyorsa. Broker adresi koda gömülü cihazlar, buluta bridge ile bağlanan yerel bir Mosquitto üzerinde kalabilir.

Bridge QoS 1 mi yoksa QoS 0 mı kullanmalı?

Telemetri ve komutları köprülemek için genellikle QoS 1 tercih edilir, çünkü mesajları bridge bağlantısı boyunca korur. QoS 0'ı yalnızca ara sıra kaybın kabul edilebilir olduğu yüksek hızlı veriler için kullanın.

Retained mesajlar otomatik olarak taşınır mı?

Mosquitto'da hâlihazırda bulunan retained mesajlar toplu olarak kopyalanmaz. Bridge yalnızca yeni yayınları iletir; cihazların bağlandıklarında retained durumlarını yeniden yayınlamasını sağlayın ve retained topic'leri bulut tarafında doğrulayın.

Eski Mosquitto broker'ı ne kadar süre tutmalıyım?

Her istemci yeni broker'da üzerinde anlaşılan bir süre boyunca kararlı çalışana kadar, bridge çalışır durumdayken tutun. Bu size çok düşük maliyetle anında geri dönüş imkânı verir.

İlgili yazılar

BYOC MQTT Broker: Kendi Bulutunuzu Getirin Modeli Açıklandı

BYOC MQTT broker sizin bulut hesabınızda çalışır ama bir sağlayıcı tarafından işletilir. Modelin nasıl işlediğini, sorumluluk paylaşımını ve hesabınızı buna nasıl hazırlayacağınızı öğrenin.

7 dk okuma

Google Cloud IoT Core Alternatifi: Kapanış Sonrası Seçenekler ve Geçiş

Google, Cloud IoT Core'u Ağustos 2023'te kullanımdan kaldırdı. Bu rehber gerçekçi alternatifleri karşılaştırıyor, IoT Core kavramlarını standart MQTT'ye eşliyor ve verileriniz Google Cloud'a akmaya devam ederken cihazlarınızı yönetilen bir broker'a nasıl taşıyacağınızı gösteriyor.

7 dk okuma

Saniyede MQTT Mesaj Sayısı: Verim Nasıl Tahmin Edilir ve Ölçülür

MQTT verim planlaması birkaç formüle ve tek bir dürüst ölçüme dayanır. Saniyedeki gelen ve giden mesaj sayısını nasıl tahmin edeceğinizi, tepe değerleri nasıl hesaba katacağınızı ve sonucu bir broker planına nasıl eşleyeceğinizi öğrenin.

6 dk okuma

Tüm yazılar →

Özel MQTT broker’ınız birkaç tık uzağınızda

Hesabınızı oluşturun, broker kimlik bilgilerinizi alın ve ilk cihazınızı bağlayın — kurulacak, yamalanacak ya da ölçeklendirilecek sunucu yok.