in How-to

มาลองเล่น High Availability MQTT Cluster กัน

เนื่องจากจำไม่ได้ว่าใครถามเรื่อง High Availability MQTT Cluster แต่ที่จำได้ผมบอกไปว่า Mosca + Haproxy น่าจะจบก็ไม่ได้ทำอะไรต่อเพราะน่าจะเข้าใจแล้ว แต่ก็คิดไปคิดมาก็เลยลองดูสักหน่อยว่าใช้ได้หรือเปล่า T_T จาก Blog ของ Lelylan อธิบายเรื่อง High Availability MQTT Cluster ไว้ได้ดีในเรื่องของการประยุกต์ใช้ Docker และ MQTT Broker ซึ่งถือว่าเป็น Micro Service ถ้าสนใจก็ลองไปอ่านได้ครับ

กลับมา Back to Basic เราจะไม่ใช้ Docker เพื่อให้เกิดความเข้าใจเรื่อง HA กับ MQTT Broker ในเบื้องต้นก่อนครั้งหน้า (ถ้าไม่ลืม) เราจะมาเล่น Docker Machine + Swarm + Compose ทำ High Availability MQTT Cluster กันอีกรอบ

ครั้งนี้มาสร้างความเข้าใจกันก่อน จากภาพเราใช้ Loadbalance ให้ listen MQTT Broker port 1883 ทำให้เราสามารถแจก load ไปยัง MQTT Broker เนื่องจากการกระจายโหลดไปยัง MQTT Broker จะทำให้ข้อมูลของแต่ละ Connection จะไปกองอยู่ที่ MQTT Broker เราสามารถตั้งค่า Persistence Storage เข้ามาช่วยได้ เช่น Redis, MongoDB เป็นต้น มาลงมือกันเลย เริ่มจาก MQTT Broker กันก่อน ครั้งนี้เราจะใช้ Ponte หรือใครจะใช้ Mosca ก็ได้ เราต้อง config ponte ให้ใช้ Persistence Storage ภายนอกดังนี้

จากนั้น start ponte ด้วยคำสั่ง

ponte -v -c config.cfg | bunyan

เมื่อได้ Broker ทั้ง 2 เครื่องครบแล้ว ตั้งค่า Haproxy ดังนี้

จาก config มี Stat ให้ดูผ่าน Web นิดหน่อย ส่วน MQTT จะกระจายโหลดไปยัง Broker ที่ตั้งค่าไว้ หากลอง publish ผ่านเครื่อง HAProxy จะพบว่าโหลดจะกระจายไปยัง Broker โดยอัตโนมัติ

Ponte มี Service อื่นด้วยเช่น CoAP, REST API ก็ไป config HAProxy เพิ่มได้เลยครับ :)