getstarted

This commit is contained in:
Feng Lee 2016-02-26 19:35:02 +08:00
parent 09ab8bc446
commit f63b826521
1 changed files with 90 additions and 63 deletions

View File

@ -13,7 +13,7 @@ emqttd(Erlang MQTT Broker) is an open source MQTT broker written in Erlang/OTP.
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. 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.
The emqttd broker is: Highlights of the emqttd broker:
* Full MQTT V3.1/3.1.1 Protocol Specifications Support * Full MQTT V3.1/3.1.1 Protocol Specifications Support
* Easy to Install - Quick Install on Linux, FreeBSD, Mac and Windows * Easy to Install - Quick Install on Linux, FreeBSD, Mac and Windows
@ -21,7 +21,6 @@ The emqttd broker is:
* Easy to extend - Hooks and plugins to customize or extend the broker * Easy to extend - Hooks and plugins to customize or extend the broker
* Pluggable Authentication - LDAP, MySQL, PostgreSQL, Redis Authentication Plugins * Pluggable Authentication - LDAP, MySQL, PostgreSQL, Redis Authentication Plugins
-------- --------
Features Features
-------- --------
@ -47,7 +46,6 @@ Features
* Extensible architecture with Hooks, Modules and Plugins * Extensible architecture with Hooks, Modules and Plugins
* Passed eclipse paho interoperability tests * Passed eclipse paho interoperability tests
----------- -----------
Quick Start Quick Start
----------- -----------
@ -55,7 +53,9 @@ Quick Start
Download and Install Download and Install
-------------------- --------------------
Download binary package for Linux, Mac, FreeBSD and Windows platform from http://emqtt.io/downloads. The emqttd broker is cross-platform, could be deployed on Linux, Mac, FreeBSD, Windows and Raspberry Pi.
Download binary package from: http://emqtt.io/downloads. Installing on Mac, For example:
.. code:: console .. code:: console
@ -71,7 +71,7 @@ Download binary package for Linux, Mac, FreeBSD and Windows platform from http:/
./bin/emqttd stop ./bin/emqttd stop
Installing from Source Installing from Source
----------------------- ----------------------
.. NOTE:: emqttd requires Erlang R17+ to build. .. NOTE:: emqttd requires Erlang R17+ to build.
@ -81,39 +81,56 @@ Installing from Source
cd emqttd && make && make dist cd emqttd && make && make dist
-------------------- -------------
Web Dashboard Web Dashboard
-------------------- -------------
A Web Dashboard will be loaded automatically when the emqttd broker is started successfully.
The Dashboard helps to check running status of the broker, monitor statistics and metrics of MQTT packets,
query clients, sessions, topics and subscriptions.
+------------------+---------------------------+
| Default Address | http://localhost:18083 |
+------------------+---------------------------+
| Default User | admin |
+------------------+---------------------------+
| Default Password | public |
+------------------+---------------------------+
.. image:: ./_static/images/dashboard.png .. image:: ./_static/images/dashboard.png
------------------- -------------------
Modules and Plugins Modules and Plugins
------------------- -------------------
The emqttd broker could be extended by modules and plugins. The emqttd broker could be extended by Modules and Plugins.
The authentication and ACL mechanism is usally implemented by a module or plugin.
Modules Modules
------- -------
+-------------------------+-----------------------------------+ +-------------------------+--------------------------------------------+
| emqttd_auth_clientid | ClientId认证 | | emqttd_auth_clientid | Authentication with ClientId |
+-------------------------+-----------------------------------+ +-------------------------+--------------------------------------------+
| emqttd_auth_username | 用户名密码认证 | | emqttd_auth_username | Authentication with Username and Password |
+-------------------------+-----------------------------------+ +-------------------------+--------------------------------------------+
| emqttd_auth_ldap | LDAP认证 | | emqttd_auth_ldap | Authentication with LDAP |
+-------------------------+-----------------------------------+ +-------------------------+--------------------------------------------+
| emqttd_mod_presence | 客户端上下线状态消息发布 | | emqttd_mod_presence | Publish presence message to $SYS topics |
+-------------------------+-----------------------------------+ | | when client connected or disconnected |
| emqttd_mod_subscription | 客户端上线自动主题订阅 | +-------------------------+--------------------------------------------+
+-------------------------+-----------------------------------+ | emqttd_mod_subscription | Subscribe topics automatically when client |
| emqttd_mod_rewrite | 重写客户端订阅主题(Topic) | | | connected |
+-------------------------+-----------------------------------+ +-------------------------+--------------------------------------------+
| emqttd_mod_rewrite | Topics rewrite like HTTP rewrite module |
+-------------------------+--------------------------------------------+
扩展模块通过'etc/emqttd.config'配置文件的auth, modules段落启用。 Configure the 'auth', 'module' paragraph in 'etc/emqttd.config' to enable a module.
例如启用用户名密码认证:: Enable 'emqttd_auth_username' module::
{access, [ {access, [
%% Authetication. Anonymous Default %% Authetication. Anonymous Default
@ -123,7 +140,7 @@ Modules
... ...
启用客户端状态发布模块:: Enable 'emqttd_mod_presence' module::
{modules, [ {modules, [
%% Client presence management module. %% Client presence management module.
@ -131,71 +148,70 @@ Modules
{presence, [{qos, 0}]} {presence, [{qos, 0}]}
Plugins Plugins
-------- -------
+-------------------------+-----------------------------------+ A plugin is an Erlang application to extend the emqttd broker.
| emqttd_plugin_template | 插件模版与演示代码 |
+-------------------------+-----------------------------------+
| emqttd_dashboard | Web管理控制台默认加载 |
+-------------------------+-----------------------------------+
| emqttd_plugin_mysql | MySQL认证插件 |
+-------------------------+-----------------------------------+
| emqttd_plugin_pgsql | PostgreSQL认证插件 |
+-------------------------+-----------------------------------+
| emqttd_plugin_redis | Redis认证插件 |
+-------------------------+-----------------------------------+
| emqttd_plugin_mongo | MongoDB认证插件 |
+-------------------------+-----------------------------------+
| emqttd_stomp | Stomp协议插件 |
+-------------------------+-----------------------------------+
| emqttd_sockjs | SockJS插件 |
+-------------------------+-----------------------------------+
| emqttd_recon | Recon优化调测插件 |
+-------------------------+-----------------------------------+
扩展插件通过'bin/emqttd_ctl'管理命令行,加载启动运行。 +----------------------------+-----------------------------------+
| `emqttd_plugin_template`_ | Plugin template and demo |
+----------------------------+-----------------------------------+
| `emqttd_dashboard`_ | Web Dashboard |
+----------------------------+-----------------------------------+
| `emqttd_plugin_mysql`_ | Authentication with MySQL |
+----------------------------+-----------------------------------+
| `emqttd_plugin_pgsql`_ | Authentication with PostgreSQL |
+----------------------------+-----------------------------------+
| `emqttd_plugin_redis`_ | Authentication with Redis |
+----------------------------+-----------------------------------+
| `emqttd_plugin_mongo`_ | Authentication with MongoDB |
+----------------------------+-----------------------------------+
| `emqttd_stomp`_ | STOMP Protocol Plugin |
+----------------------------+-----------------------------------+
| `emqttd_sockjs`_ | SockJS(Stomp) Plugin |
+----------------------------+-----------------------------------+
| `emqttd_recon`_ | Recon Plugin |
+----------------------------+-----------------------------------+
例如启用PostgreSQL认证插件:: A plugin could be enabled by 'bin/emqttd_ctl plugins load' command.
For example, enable 'emqttd_plugin_pgsql' plugin::
./bin/emqttd_ctl plugins load emqttd_plugin_pgsql ./bin/emqttd_ctl plugins load emqttd_plugin_pgsql
---------------------------------- -----------------------
One million Connections One million Connections
---------------------------------- -----------------------
Latest release of the emqttd broker is scaling to 1.3 million MQTT connections on a 12 Core, 32G CentOS server.
.. NOTE:: .. NOTE::
emqttd消息服务器默认设置允许最大客户端连接是512因为大部分操作系统'ulimit -n'限制为1024。 The emqttd broker only allows 512 concurrent connections by default, for 'ulimit -n' limit is 1024 on most platform.
emqttd消息服务器当前版本连接压力测试到130万线8核心/32G内存的CentOS云服务器。 We need tune the OS Kernel, TCP Stack, Erlang VM and emqttd broker for one million connections benchmark.
操作系统内核参数、TCP协议栈参数、Erlang虚拟机参数、emqttd最大允许连接数设置简述如下
Linux Kernel Parameters Linux Kernel Parameters
----------------------- -----------------------
# 2M - 系统所有进程可打开的文件数量::
.. code:: .. code::
# 2M:
sysctl -w fs.file-max=2097152 sysctl -w fs.file-max=2097152
sysctl -w fs.nr_open=2097152 sysctl -w fs.nr_open=2097152
# 1M - 系统允许当前进程打开的文件数量:: # 1M:
ulimit -n 1048576 ulimit -n 1048576
TCP Stack Parameters TCP Stack Parameters
----------------------- --------------------
# backlog - Socket监听队列长度::
.. code:: .. code::
# backlog
sysctl -w net.core.somaxconn=65536 sysctl -w net.core.somaxconn=65536
Erlang VM Erlang VM
----------------- ---------
emqttd/etc/vm.args:: emqttd/etc/vm.args::
@ -210,8 +226,8 @@ emqttd/etc/vm.args::
-env ERTS_MAX_PORTS 1048576 -env ERTS_MAX_PORTS 1048576
emqttd.config emqttd broker
----------------- -------------
emqttd/etc/emqttd.config:: emqttd/etc/emqttd.config::
@ -239,6 +255,7 @@ Test Client
sysctl -w net.ipv4.ip_local_port_range="500 65535" sysctl -w net.ipv4.ip_local_port_range="500 65535"
echo 1000000 > /proc/sys/fs/nr_open echo 1000000 > /proc/sys/fs/nr_open
ulimit -n 100000
---------------------- ----------------------
emqtt Client Libraries emqtt Client Libraries
@ -261,3 +278,13 @@ GitHub: https://github.com/emqtt
.. _CocoaMQTT: https://github.com/emqtt/CocoaMQTT .. _CocoaMQTT: https://github.com/emqtt/CocoaMQTT
.. _QMQTT: https://github.com/emqtt/qmqtt .. _QMQTT: https://github.com/emqtt/qmqtt
.. _emqttd_plugin_template: https://github.com/emqtt/emqttd_plugin_template
.. _emqttd_dashboard: https://github.com/emqtt/emqttd_dashboard
.. _emqttd_plugin_mysql: https://github.com/emqtt/emqttd_plugin_mysql
.. _emqttd_plugin_pgsql: https://github.com/emqtt/emqttd_plugin_pgsql
.. _emqttd_plugin_redis: https://github.com/emqtt/emqttd_plugin_redis
.. _emqttd_plugin_mongo: https://github.com/emqtt/emqttd_plugin_mongo
.. _emqttd_stomp: https://github.com/emqtt/emqttd_stomp
.. _emqttd_sockjs: https://github.com/emqtt/emqttd_sockjs
.. _emqttd_recon: https://github.com/emqtt/emqttd_recon