getstarted.rst 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. .. _getstarted:
  2. ===========
  3. Get Started
  4. ===========
  5. --------
  6. Overview
  7. --------
  8. emqttd(Erlang MQTT Broker) is an open source MQTT broker written in Erlang/OTP. Erlang/OTP is a concurrent, fault-tolerant, soft-realtime and distributed programming platform. MQTT is an extremely lightweight publish/subscribe messaging protocol powering IoT, M2M and Mobile applications.
  9. The emqttd project is aimed to implement a scalable, distributed, extensible open-source MQTT broker for IoT, M2M and Mobile applications that hope to handle ten millions of concurrent MQTT clients.
  10. Highlights of the emqttd broker:
  11. * Full MQTT V3.1/3.1.1 Protocol Specifications Support
  12. * Easy to Install - Quick Install on Linux, FreeBSD, Mac and Windows
  13. * Massively scalable - Scaling to 1 million connections on a single server
  14. * Cluster and Bridge Support
  15. * Easy to extend - Hooks and plugins to customize or extend the broker
  16. * Pluggable Authentication - LDAP, MySQL, PostgreSQL, Redis Authentication Plugins
  17. --------
  18. Features
  19. --------
  20. * Full MQTT V3.1/V3.1.1 protocol specification support
  21. * QoS0, QoS1, QoS2 Publish and Subscribe
  22. * Session Management and Offline Messages
  23. * Retained Message
  24. * Last Will Message
  25. * TCP/SSL Connection
  26. * MQTT Over WebSocket(SSL)
  27. * HTTP Publish API
  28. * STOMP protocol
  29. * STOMP over SockJS
  30. * $SYS/# Topics
  31. * ClientID Authentication
  32. * IpAddress Authentication
  33. * Username and Password Authentication
  34. * Access control based on IpAddress, ClientID, Username
  35. * Authentication with LDAP, Redis, MySQL, PostgreSQL
  36. * Cluster brokers on several servers
  37. * Bridge brokers locally or remotely
  38. * mosquitto, RSMB bridge
  39. * Extensible architecture with Hooks, Modules and Plugins
  40. * Passed eclipse paho interoperability tests
  41. -----------
  42. Quick Start
  43. -----------
  44. Download and Install
  45. --------------------
  46. The emqttd broker is cross-platform, could be deployed on Linux, Mac, FreeBSD, Windows and Raspberry Pi.
  47. Download binary package from: http://emqtt.io/downloads.
  48. Installing on Mac, For example:
  49. .. code:: console
  50. unzip emqttd-macosx-0.16.0-beta-20160216.zip && cd emqttd
  51. # Start emqttd
  52. ./bin/emqttd start
  53. # Check Status
  54. ./bin/emqttd_ctl status
  55. # Stop emqttd
  56. ./bin/emqttd stop
  57. Installing from Source
  58. ----------------------
  59. .. NOTE:: emqttd broker requires Erlang R17+ to build.
  60. .. code:: console
  61. git clone https://github.com/emqtt/emqttd.git
  62. cd emqttd && make && make dist
  63. cd rel/emqttd && ./bin/emqttd console
  64. -------------
  65. Web Dashboard
  66. -------------
  67. A Web Dashboard will be loaded automatically when the emqttd broker is started successfully.
  68. The Dashboard helps to check running status of the broker, monitor statistics and metrics of MQTT packets, query clients, sessions, topics and subscriptions.
  69. +------------------+---------------------------+
  70. | Default Address | http://localhost:18083 |
  71. +------------------+---------------------------+
  72. | Default User | admin |
  73. +------------------+---------------------------+
  74. | Default Password | public |
  75. +------------------+---------------------------+
  76. .. image:: ./_static/images/dashboard.png
  77. -------------------
  78. Modules and Plugins
  79. -------------------
  80. The Authentication and ACL mechanism is usually implemented by a Module or Plugin.
  81. Modules
  82. -------
  83. +-------------------------+--------------------------------------------+
  84. | emqttd_auth_clientid | Authentication with ClientId |
  85. +-------------------------+--------------------------------------------+
  86. | emqttd_auth_username | Authentication with Username and Password |
  87. +-------------------------+--------------------------------------------+
  88. | emqttd_auth_ldap | Authentication with LDAP |
  89. +-------------------------+--------------------------------------------+
  90. | emqttd_mod_presence | Publish presence message to $SYS topics |
  91. | | when client connected or disconnected |
  92. +-------------------------+--------------------------------------------+
  93. | emqttd_mod_subscription | Subscribe topics automatically when client |
  94. | | connected |
  95. +-------------------------+--------------------------------------------+
  96. | emqttd_mod_rewrite | Topics rewrite like HTTP rewrite module |
  97. +-------------------------+--------------------------------------------+
  98. Configure the 'auth', 'module' paragraph in 'etc/emqttd.config' to enable a module.
  99. Enable 'emqttd_auth_username' module::
  100. {access, [
  101. %% Authetication. Anonymous Default
  102. {auth, [
  103. %% Authentication with username, password
  104. {username, []},
  105. ...
  106. Enable 'emqttd_mod_presence' module::
  107. {modules, [
  108. %% Client presence management module.
  109. %% Publish messages when client connected or disconnected
  110. {presence, [{qos, 0}]}
  111. Plugins
  112. -------
  113. A plugin is an Erlang application to extend the emqttd broker.
  114. +----------------------------+-----------------------------------+
  115. | `emqttd_plugin_template`_ | Plugin template and demo |
  116. +----------------------------+-----------------------------------+
  117. | `emqttd_dashboard`_ | Web Dashboard |
  118. +----------------------------+-----------------------------------+
  119. | `emqttd_plugin_mysql`_ | Authentication with MySQL |
  120. +----------------------------+-----------------------------------+
  121. | `emqttd_plugin_pgsql`_ | Authentication with PostgreSQL |
  122. +----------------------------+-----------------------------------+
  123. | `emqttd_plugin_redis`_ | Authentication with Redis |
  124. +----------------------------+-----------------------------------+
  125. | `emqttd_plugin_mongo`_ | Authentication with MongoDB |
  126. +----------------------------+-----------------------------------+
  127. | `emqttd_stomp`_ | STOMP Protocol Plugin |
  128. +----------------------------+-----------------------------------+
  129. | `emqttd_sockjs`_ | SockJS(Stomp) Plugin |
  130. +----------------------------+-----------------------------------+
  131. | `emqttd_recon`_ | Recon Plugin |
  132. +----------------------------+-----------------------------------+
  133. A plugin could be enabled by 'bin/emqttd_ctl plugins load' command.
  134. For example, enable 'emqttd_plugin_pgsql' plugin::
  135. ./bin/emqttd_ctl plugins load emqttd_plugin_pgsql
  136. -----------------------
  137. One million Connections
  138. -----------------------
  139. Latest release of the emqttd broker is scaling to 1.3 million MQTT connections on a 12 Core, 32G CentOS server.
  140. .. NOTE::
  141. The emqttd broker only allows 512 concurrent connections by default, for 'ulimit -n' limit is 1024 on most platform.
  142. We need tune the OS Kernel, TCP Stack, Erlang VM and emqttd broker for one million connections benchmark.
  143. Linux Kernel Parameters
  144. -----------------------
  145. .. code::
  146. # 2M:
  147. sysctl -w fs.file-max=2097152
  148. sysctl -w fs.nr_open=2097152
  149. # 1M:
  150. ulimit -n 1048576
  151. TCP Stack Parameters
  152. --------------------
  153. .. code::
  154. # backlog
  155. sysctl -w net.core.somaxconn=65536
  156. Erlang VM
  157. ---------
  158. emqttd/etc/vm.args::
  159. ## max process numbers
  160. +P 2097152
  161. ## Sets the maximum number of simultaneously existing ports for this system
  162. +Q 1048576
  163. ## Increase number of concurrent ports/sockets
  164. -env ERL_MAX_PORTS 1048576
  165. -env ERTS_MAX_PORTS 1048576
  166. emqttd broker
  167. -------------
  168. emqttd/etc/emqttd.config::
  169. {mqtt, 1883, [
  170. %% Size of acceptor pool
  171. {acceptors, 64},
  172. %% Maximum number of concurrent clients
  173. {max_clients, 1000000},
  174. %% Socket Access Control
  175. {access, [{allow, all}]},
  176. %% Connection Options
  177. {connopts, [
  178. %% Rate Limit. Format is 'burst, rate', Unit is KB/Sec
  179. %% {rate_limit, "100,10"} %% 100K burst, 10K rate
  180. ]},
  181. ...
  182. Test Client
  183. -----------
  184. .. code::
  185. sysctl -w net.ipv4.ip_local_port_range="500 65535"
  186. echo 1000000 > /proc/sys/fs/nr_open
  187. ulimit -n 100000
  188. ----------------------
  189. emqtt Client Libraries
  190. ----------------------
  191. GitHub: https://github.com/emqtt
  192. +--------------------+----------------------+
  193. | `emqttc`_ | Erlang MQTT Client |
  194. +--------------------+----------------------+
  195. | `emqtt_benchmark`_ | MQTT benchmark Tool |
  196. +--------------------+----------------------+
  197. | `CocoaMQTT`_ | Swift MQTT Client |
  198. +--------------------+----------------------+
  199. | `QMQTT`_ | QT MQTT Client |
  200. +--------------------+----------------------+
  201. .. _emqttc: https://github.com/emqtt/emqttc
  202. .. _emqtt_benchmark: https://github.com/emqtt/emqtt_benchmark
  203. .. _CocoaMQTT: https://github.com/emqtt/CocoaMQTT
  204. .. _QMQTT: https://github.com/emqtt/qmqtt
  205. .. _emqttd_plugin_template: https://github.com/emqtt/emqttd_plugin_template
  206. .. _emqttd_dashboard: https://github.com/emqtt/emqttd_dashboard
  207. .. _emqttd_plugin_mysql: https://github.com/emqtt/emqttd_plugin_mysql
  208. .. _emqttd_plugin_pgsql: https://github.com/emqtt/emqttd_plugin_pgsql
  209. .. _emqttd_plugin_redis: https://github.com/emqtt/emqttd_plugin_redis
  210. .. _emqttd_plugin_mongo: https://github.com/emqtt/emqttd_plugin_mongo
  211. .. _emqttd_stomp: https://github.com/emqtt/emqttd_stomp
  212. .. _emqttd_sockjs: https://github.com/emqtt/emqttd_sockjs
  213. .. _emqttd_recon: https://github.com/emqtt/emqttd_recon