Centos7 mqtt集群安裝


准備數據庫

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM