当前位置: 首页 > backend >正文

emqx部署

要修改文件-命名空间-节点选择器
 

#apiVersion: v1
##kind: ConfigMap
##metadata:
##  name: emqx-config
##data:
##  emqx.conf: |
## 
#
---
apiVersion: v1
kind: PersistentVolume
metadata:name: emqx-pv
spec:capacity:storage: 5GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: local-storagehostPath:path: /store/data/emqxtype: DirectoryOrCreate
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: emqx-pvcnamespace: middle-ware-sy
spec:accessModes:- ReadWriteOnceresources:requests:storage: 5GistorageClassName: local-storage
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: emqxnamespace: middle-ware-sy
spec:serviceName: "emqx-headless"replicas: 1selector:matchLabels:app: emqxtemplate:metadata:labels:app: emqxspec:nodeName: node2containers:- name: emqximage: emqx:5.8.3ports:- containerPort: 1883name: mqtt- containerPort: 18083name: dashboardvolumeMounts:#      - mountPath: /opt/emqx/data/mnesia#        name: emqx-pvc#        subPath: mnesia- mountPath: /opt/emqx/dataname: emqx-pvcsubPath: data- mountPath: /opt/emqx/logsname: emqx-pvcsubPath: logs- name: timezonemountPath: /etc/localtime#- mountPath: /opt/emqx/etc#  name: emqx-pvc#  subPath: etcvolumes:- name: emqx-pvcpersistentVolumeClaim:claimName: emqx-pvc- name: timezonehostPath: path: /usr/share/zoneinfo/Asia/Shanghai
---
apiVersion: v1
kind: Service
metadata:name: emqx-servicenamespace: middle-ware-sy
spec:type: NodePortselector:app: emqxports:- name: mqttport: 1883targetPort: 1883nodePort: 30004- name: dashboardport: 18083targetPort: 18083nodePort: 30005- name: mqtt-tlsport: 8883targetPort: 8883nodePort: 30006- name: mqtt-wssport: 8084targetPort: 8084nodePort: 30007- name: mqtt-wsport: 8083targetPort: 8083nodePort: 30008

【实现1个emqx,部署在主节点】

目录映射关系{

/data/emqx/etc:/opt/emqx/etc

/data/emqx/data:/opt/emqx/data

/data/emqx/log:/opt/emqx/log }

端口{

web地址:18083:32205

订阅地址:1883:32201

}

部署流程:

  1. helm工具+emqx仓库源

wget https://get.helm.sh/helm-v3.12.3-linux-amd64.tar.gz

tar -zxvf helm-v3.12.3-linux-amd64.tar.gz

cp linux-amd64/helm /usr/local/bin/

helm version

helm repo add emqx https://repos.emqx.io/charts

helm repo update

mkdir -p /data/emqx

chmod 777 -R /data/emqx

2.解压emqx包

tar -xf emqx.tar.gz

cd emqx/emqx

vim emqx-kind.yml

ports:

    - name: mqtt

      port: 1883 #修改为1883,或者新增一段1883

      targetPort: 1883

      nodePort: 32201  # 指定 NodePort 用于 MQTT 服务

    - name: dashboard

      port: 18083

      targetPort: 18083

      nodePort: 32205  # 指定 NodePort 用于 Dashboard 服务

#1883为物联网设备mqtt连接端口

#8083为web应用的websocket连接端口

kubectl apply -f emqx-kind.yml

helm install my-emqx emqx/emqx -f values.yaml

#helm install my-emqx emqx/emqx -f values.yaml --namespace middle-ware-sy

#helm uninstall my-emqx --namespace middle-ware-sy#删除

#helm install my-emqx emqx/emqx -f values.yaml -n middle-ware-sy#重新安装

3.验证状态

kubectl get pods -A

emqx  running

若是有报错:

#起不来,因为镜像,修改values.yml里的image还有sts.yml里的image

kubectl describe pods my-emqx-0 -n default

Events:

  Type     Reason     Age                 From               Message

  ----     ------     ----                ----               -------

  Normal   Scheduled  100s                default-scheduler  Successfully assigned default/my-emqx-0 to node2

  Normal   Pulled     44s (x4 over 100s)  kubelet            Container image "emqx/emqx:5.8.5" already present on machine

  Normal   Created    44s (x4 over 100s)  kubelet            Created container emqx

  Normal   Started    44s (x4 over 99s)   kubelet            Started container emqx

  Warning  BackOff    10s (x8 over 93s)   kubelet            Back-off restarting failed container

docker pull emqx/emqx:6.8.7

#/data/emqx目录权限不足,chmod 777 -R /data/emqx

kubectl logs my-emqx-0 -n default

mkdir: cannot create directory ‘/opt/emqx/data/configs’: Permission denied

#如果是二次部署,需要删除/data/emqx下面的所有数据

kubectl delete -f emqx.yaml  #先停止emqx,不再生成数据

rm -fr /data/emqx/* /store/data/emqx/* #删除目录下数据

【emqx.yml方式部署】

[root@master kind]# cat emqx.yml

#apiVersion: v1

##kind: ConfigMap

##metadata:

##  name: emqx-config

##data:

##  emqx.conf: |

##

#

---

apiVersion: v1

kind: PersistentVolume

metadata:

  name: emqx-pv

spec:

  capacity:

    storage: 5Gi

  volumeMode: Filesystem

  accessModes:

    - ReadWriteOnce

  persistentVolumeReclaimPolicy: Retain

  storageClassName: local-storage

  hostPath:

    path: /store/data/emqx

    type: DirectoryOrCreate

---

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

  name: emqx-pvc

  namespace: middle-ware-sy

spec:

  accessModes:

    - ReadWriteOnce

  resources:

    requests:

      storage: 5Gi

  storageClassName: local-storage

---

apiVersion: apps/v1

kind: StatefulSet

metadata:

  name: emqx

  namespace: middle-ware-sy

spec:

  serviceName: "emqx-headless"

  replicas: 1

  selector:

    matchLabels:

      app: emqx

  template:

    metadata:

      labels:

        app: emqx

    spec:

      nodeName: node2

      containers:

        - name: emqx

          image: emqx:5.8.3

          ports:

            - containerPort: 1883

              name: mqtt

            - containerPort: 18083

              name: dashboard

          volumeMounts:

      #      - mountPath: /opt/emqx/data/mnesia

      #        name: emqx-pvc

      #        subPath: mnesia

            - mountPath: /opt/emqx/data

              name: emqx-pvc

              subPath: data

            - mountPath: /opt/emqx/logs

              name: emqx-pvc

              subPath: logs

            #- mountPath: /opt/emqx/etc

            #  name: emqx-pvc

            #  subPath: etc

      volumes:

        - name: emqx-pvc

          persistentVolumeClaim:

            claimName: emqx-pvc

---

apiVersion: v1

kind: Service

metadata:

  name: emqx-service

  namespace: middle-ware-sy

spec:

  type: NodePort

  selector:

    app: emqx

  ports:

    - name: mqtt

      port: 1883

      targetPort: 1883

      nodePort: 30004

    - name: dashboard

      port: 18083

      targetPort: 18083

      nodePort: 30005

  1. mysql创建库和表用来给emqx存储连接信息(账密)

create database heihei

USE heihei;

CREATE TABLE IF NOT EXISTS `mqtt_acl` (

  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,

  `username` varchar(100) NOT NULL,

  `permission` varchar(5) NOT NULL,

  `action` varchar(9) NOT NULL,

  `topic` varchar(100) NOT NULL,

  `qos` tinyint(1),

  `retain` tinyint(1),

  INDEX username_idx(username),

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `mqtt_user` (

  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,

  `username` varchar(100) DEFAULT NULL,

  `password_hash` varchar(100) DEFAULT NULL,

  `salt` varchar(35) DEFAULT NULL,

  `is_superuser` tinyint(1) DEFAULT 0,

  `created` datetime DEFAULT NULL,

  PRIMARY KEY (`id`),

  UNIQUE KEY `mqtt_username` (`username`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `mqtt_user` (`username`, `password_hash`, `salt`)

VALUES ('test', 'b94c8b48b9ce0c98f11f11be025d9aa56ee40d5f89598c35a2a5cf118db0c054', 'maker_sjy');

# 参考:https://blog.csdn.net/maker_knz/article/details/120727309
# 生成密钥网页:https://www.cmd5.com/hash.aspx
INSERT INTO `mqtt_user` ( `username`, `password_hash`, `salt`)
VALUES
        ('test', 'b94c8b48b9ce0c98f11f11be025d9aa56ee40d5f89598c35a2a5cf118db0c054', 'maker_sjy');

#mqttx测试账密:test/test,mqtt服务连接的账密

5.登录webui界面配置mysql连接

浏览器访问-->服务器ip:32205

默认账密:admin/public

改密码:Wod44cm,9

6.emqx配置更改

#放行规则

kubectl exec -it my-emqx-0 -- /bin/bash

echo "{allow,all}." >>etc/acl.conf

#重启生效配置

kubectl delete pod my-emqx-0 -n default

kubectl get pod my-emqx-0 -n default -w

7.mqttx测试

test/test账号

#下载mqttx :https://www.emqx.com/zh/downloads/MQTTX/v1.11.1/MQTTX-Setup-1.11.1-x64.exe

http://www.xdnf.cn/news/2877.html

相关文章:

  • 厚铜板的镀前处理差异:工艺参数与成本影响
  • C22-作业练习之最大公约数与最小公倍数
  • idea启动springboot方式及web调用
  • 半监督学习与强化学习的结合:新兴的智能训练模式
  • Docker网络架构深度解析与技术实践
  • 【深入理解指针(6)】
  • IIC 通信协议
  • Spring系列四:AOP切面编程第三部分
  • MySQL-排序
  • Finish技术生态计划: FinishRpc
  • print用法讲解(Python)
  • 数字人接大模型第二步:语音克隆
  • 洛谷P1003[NOIP 2011 提高组] 铺地毯
  • GPU虚拟化实现(四)
  • XMOS人工智能降噪——AI降噪让极端嘈杂环境下的通话和拾音变得可能
  • 说说stack reconciler 和fiber reconciler
  • 算法题(136):逛画展
  • 如何利用谷歌趋势精确估算关键词搜索量?
  • DDI0487--A1.3
  • 阿里云服务器云盘扩容
  • 【Machine Learning Q and AI 读书笔记】- 01 嵌入、潜空间和表征
  • 更新日期自动填充
  • LeetCode 热题 100_最小路径和(92_64_中等_C++)(多维动态规划)
  • TypeScript之type
  • IEEE会议:第十届网络安全与信息工程国际会议(ICCSIE 2025)
  • 资产定位解决方案:蓝牙Beacon如何实现低成本高效追踪
  • 【Android】谈谈DexClassLoader
  • dx11 龙书学习 第四章 dx11 准备工作
  • Unity AI-使用Ollama本地大语言模型运行框架运行本地Deepseek等模型实现聊天对话(二)
  • 天梯——链表去重