准備數據庫 create database mqtt; use mqtt; SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for mqtt_acl -- ---------------------------- DROP TABLE IF EXISTS `mqtt_acl`; CREATE TABLE `mqtt_acl` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `allow` int(1) DEFAULT NULL COMMENT '0: deny, 1: allow', `ipaddr` varchar(60) DEFAULT NULL COMMENT 'IpAddress', `username` varchar(100) DEFAULT NULL COMMENT 'Username', `clientid` varchar(100) DEFAULT NULL COMMENT 'ClientId', `access` int(2) NOT NULL COMMENT '1: subscribe, 2: publish, 3: pubsub', `topic` varchar(100) NOT NULL DEFAULT '' COMMENT 'Topic Filter', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Table structure for mqtt_user -- ---------------------------- DROP TABLE IF EXISTS `mqtt_user`; CREATE TABLE `mqtt_user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(100) DEFAULT NULL, `password` blob, `salt` blob, `is_superuser` tinyint(1) DEFAULT '0', `created` datetime DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `mqtt_username` (`username`) ) ENGINE=InnoDB AUTO_INCREMENT=643 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC; 3節點均執行下列步驟進行安裝 安裝依賴: yum install lksctp-tools -y 下載emqtt: https://www.emqx.io/downloads/broker/v2.2.0/emqttd-centos7-v2.2.0.el7.centos.x86_64.rpm #安裝 rpm -ivh --force emqttd-centos7-v2.2.0.el7.centos.x86_64.rpm #替換127.0.0.1為當前節點的真實ip sed -i 's$node.name = emqttd@127.0.0.1$node.name = emqttd@192.168.6.117$g' /etc/emqttd/emq.conf ### 修改mysql插件配置(注意替換數據庫連接信息) sed -i 's$auth.mysql.server = 127.0.0.1:3306$auth.mysql.server = 192.168.6.125:23306$' /etc/emqttd/plugins/emq_auth_mysql.conf sed -i 's$auth.mysql.pool = 8$auth.mysql.pool = 50$g' /etc/emqttd/plugins/emq_auth_mysql.conf sed -i 's$## auth.mysql.username =$auth.mysql.username=root$g' /etc/emqttd/plugins/emq_auth_mysql.conf sed -i 's$## auth.mysql.password =$auth.mysql.password=xiaoWEI0923!$g' /etc/emqttd/plugins/emq_auth_mysql.conf sed -i 's$select password from mqtt_user$select password,salt from mqtt_user$g' /etc/emqttd/plugins/emq_auth_mysql.conf sed -i 's$auth.mysql.password_hash = sha256$auth.mysql.password_hash = md5 salt$g' /etc/emqttd/plugins/emq_auth_mysql.conf ### 啟動並確認 #設置emqtt為自啟動 systemctl enable emqttd.service #啟動emqtt systemctl start emqttd #檢查 systemctl status emqttd 或netstat -tlnp | grep 1883,如打印以下內容,則證明服務啟動,1883已監聽 tcp 0 0 127.0.0.1:11883 0.0.0.0:* LISTEN 21579/beam.smp tcp 0 0 0.0.0.0:1883 0.0.0.0:* LISTEN 21579/beam.smp #Load mysql認證 emqttd_ctl plugins load emq_auth_mysql #重啟emqtt systemctl restart emqttd 瀏覽器打開 http://當前部署節點ip:18083/#/plugins 賬號:admin 密碼:public 確認emq_auth_mysql插件處於running狀態 創建集群 假設上面安裝了mqtt的服務器分別為node1,node2,node3,則: 在node2上執行:emqttd_ctl cluster join emqttd@node1的ip 在node3上執行:emqttd_ctl cluster join emqttd@node2的ip #確認集群創建成功 emqttd_ctl cluster status running_nodes中包含了所有節點ip,如下: Cluster status: [{running_nodes,['emqttd@192.168.6.118', 'emqttd@192.168.6.117', 'emqttd@192.168.6.119']}] 故障恢復 因端點或其他原因,會造成集群失敗,則停掉不在在集群中的節點,刪除相關文件后再次加入集群 systemctl stop emqttd rm -Rf /var/lib/emqttd/mnesia/* systemctl start emqttd emqttd_ctl cluster join emqttd@節點ip