20

Install EMQX MQTT Broker on Rocky Linux 8|AlmaLinux 8

 2 years ago
source link: https://computingforgeeks.com/install-emqx-mqtt-broker-on-rocky-almalinux/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
Install EMQX MQTT Broker on Rocky Linux 8|AlmaLinux 8

MQTT broker is a lightweight message exchange protocol that makes use of the publish-subscribe pattern. That is to say, the MQTT broker receives the message published by clients, filters them according to topics, and distributes them to the subscribers. EMQX is an open-source, elastic MQTT message broker written in Erlang.

EMQX is suitable for massive clients with fast and low message latency routing. It is highly preferred due to the following:

  • Distributed cluster: fast and low-latency message routing, and single-cluster supports tens of thousands of routes.
  • Stable to host large-scale MQTT client connections with a single server node supporting 2 million connections.
  • Comprehensive IoT protocol support that includes MQTT, MQTT-SN, CoAP, LwM2M, and other TCP/UDP based proprietary protocol.
  • Higly extensible: supports customized plugins, such as authentication and other functions.

The features for EMQX are:

  • HTTP message publishing interface support
  • MQTT/WebSocket/SSL support
  • TCP/SSL connection support
  • Client online status query and subscription support
  • Support manual, mcast, dns, etcd, k8s and other cluster discovery methods
  • Redis, MySQL, PostgreSQL, MongoDB, HTTP authentication integration
  • Suppoprts several authentication methods such as LDAP, password e..t.c
  • Full MQTT V3.1/V3.1.1 and V5.0 protocol specification support
  • MQTT Broker bridge support
  • CoAP protocol support
  • MQTT-SN protocol support
  • Configure nodes by partition
  • Connection and message rate limit
  • Automatic network partition healing
  • Multi-server node cluster (Cluster)
  • Access control (ACL) based on client ID, IP address, user name

This guide offers an in-depth illustration of how to install EMQX MQTT Broker on Rocky Linux 8|AlmaLinux 8|CentOS Stream 8. The installation methods covered in this guide include:

  • Using script automated way
  • Installing from YUM repository
  • Running in a Docker container

Getting Started.

Before we dive into the nub, it is highly recommended that you update the system packages to their latest stable versions.

sudo yum update -y

You will also need some other packages installed with the below command:

sudo yum install curl vim

Install EMQX MQTT Broker on Rocky Linux 8|AlmaLinux 8|CentOS Stream 8

This guide takes a deep dive into demonstrating each of the outlined installation methods.

Method 1 – One-click installation of shell script

There is an automated way to install EMQX on Linux systems. This makes it so easy to install EMQX MQTT Broker on Rocky Linux 8|AlmaLinux 8|CentOS Stream 8.

Download and run the script with the command:

curl https://repos.emqx.io/install_emqx.sh | sudo bash

Sample Output:

Adding repo from: https://repos.emqx.io/emqx-ce/redhat/centos/8/emqx-ce.repo
emqx-stable                                     1.0 MB/s | 819 kB     00:00    
Dependencies resolved.
================================================================================
 Package      Architecture   Version               Repository              Size
================================================================================
Installing:
 emqx         x86_64         4.3.5-1.el8           emqx-ce-stable          22 M

Transaction Summary
================================================================================
....
Running transaction
  Preparing        :                                                        1/1 
  Running scriptlet: emqx-4.3.5-1.el8.x86_64                                1/1 
  Installing       : emqx-4.3.5-1.el8.x86_64                                1/1 
  Running scriptlet: emqx-4.3.5-1.el8.x86_64                                1/1 
Created symlink /etc/systemd/system/multi-user.target.wants/emqx.service → /usr/lib/systemd/system/emqx.service.

  Verifying        : emqx-4.3.5-1.el8.x86_64                                1/1 
Installed products updated.

Installed:
  emqx-4.3.5-1.el8.x86_64                                                       

Complete!
EMQ X install success

Start and enable the service.

sudo systemctl start emqx && sudo systemctl enable emqx

Check the status of the service.

$ systemctl status emqx
● emqx.service - emqx daemon
   Loaded: loaded (/usr/lib/systemd/system/emqx.service; enabled; vendor preset>
   Active: active (running) since Sun 2022-03-06 04:20:10 EST; 4s ago
 Main PID: 3044 (run_erl)
    Tasks: 36 (limit: 23544)
   Memory: 116.1M
   CGroup: /system.slice/emqx.service
           ├─3044 /usr/lib/emqx/erts-11.1.8/bin/run_erl -daemon //var/lib/emqx/>
           ├─3073 emqx -P 2097152 -Q 1048576 -e 256000 -spp true -A 4 -IOt 4 -S>
           ├─3352 erl_child_setup 1048576
           ├─3402 sh -s disksup
           ├─3403 /usr/lib/emqx/lib/os_mon-2.6.1/priv/bin/memsup
           ├─3404 /usr/lib/emqx/lib/os_mon-2.6.1/priv/bin/cpu_sup
           ├─3437 inet_gethost 4
           └─3438 inet_gethost 4

Method 2 – Install EMQX from YUM repository

The EMQX package can as well be installed from the YUM package manager. Begin by installing dependencies.

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

Once installed, set up the EMQX repository

sudo yum-config-manager --add-repo https://repos.emqx.io/emqx-ce/redhat/centos/8/emqx-ce.repo

Now install the latest version of EMQX from the repository.

sudo yum install emqx

Sample Output:

Dependencies resolved.
================================================================================
 Package      Architecture   Version               Repository              Size
================================================================================
Installing:
 emqx         x86_64         4.3.5-1.el8           emqx-ce-stable          22 M

Transaction Summary
================================================================================
Install  1 Package

Total download size: 22 M
Installed size: 39 M
Is this ok [y/N]: y

You can as well install a specific version of EMQX. First list the available versions.

$ yum list emqx --showduplicates | sort -r
Installed Packages
emqx.x86_64                     4.3.5-1.el8                      emqx-ce-stable 
emqx.x86_64                     4.3.5-1.el8                      @emqx-ce-stable
emqx.x86_64                     4.3.4-1.el8                      emqx-ce-stable 
.... 

Proceed and install the desired version say 4.3.4

sudo yum install emqx-<version>

Once installed, start and enable the service.

sudo systemctl start emqx && sudo systemctl enable emqx

Check the status of the service.

$ systemctl status emqx
● emqx.service - emqx daemon
   Loaded: loaded (/usr/lib/systemd/system/emqx.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2022-03-06 04:24:27 EST; 7s ago
 Main PID: 32792 (run_erl)
    Tasks: 32 (limit: 36433)
   Memory: 110.8M
   CGroup: /system.slice/emqx.service
           ├─32792 /usr/lib/emqx/erts-11.1.8/bin/run_erl -daemon //var/lib/emqx/emqx_erl_pipes/[email protected]/ /var/log/emqx exec "/usr/bin>
           ├─32814 emqx -P 2097152 -Q 1048576 -e 256000 -spp true -A 4 -IOt 4 -SDio 8 -- -root /usr/lib/emqx -progname usr/bin/emqx -- -hom>
           ├─33067 erl_child_setup 1048576
           ├─33106 sh -s disksup
           ├─33107 /usr/lib/emqx/lib/os_mon-2.6.1/priv/bin/memsup
           ├─33108 /usr/lib/emqx/lib/os_mon-2.6.1/priv/bin/cpu_sup
           ├─33137 inet_gethost 4
           └─33138 inet_gethost 4

Method 3 – Run EMQX in a Docker container

Running EMQX in a docker container is the simplest method of all. For those who want to avoid the tussle of installing dependencies, this is the way to go.

Before you proceed, ensure that Docker is installed on your system. This can be done with the aid of the below guide:

Once Docker is installed, add your system user to the docker group.

sudo usermod -aG docker $USER
newgrp docker

Start and enable docker.

sudo systemctl start docker && sudo systemctl enable docker

Now pull the EMQX image. There are two ways how you can pull the EMQX image.

  • From Docker Hub.
docker pull emqx/emqx

View the pulled docker image

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
emqx/emqx    latest    445050b808a9   41 hours ago   193MB
wget -O emqx-docker.zip https://www.emqx.com/en/downloads/broker/v<VERSION-URL>.zip
unzip emqx-docker.zip
docker load < emqx-docker-vVERSION-*

With the image, you can run EMQX in a Docker container. First, create a persistent data path.

sudo mkdir -p /emqx-data/emqx.lic

Set SELinux in permissive mode.

sudo setenforce 0
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config

Run EMQX in a docker container using the below command:

docker run -d \
  --name emqx \
  -p 1883:1883 \
  -p 8081:8081 \
  -p 8083:8083 \
  -p 8883:8883 \
  -p 8084:8084 \
  -p 18083:18083 \
  -v /emqx-data/emqx.lic:/opt/emqx/etc/emqx.lic \
  emqx/emqx

Remember to tag the correct image name. Here I have used the emqx/emqx:v4.0.0 docker image

Check the status of the container.

$ docker ps
CONTAINER ID   IMAGE              COMMAND                  CREATED         STATUS         PORTS                                                                                                                                                                                                                                                                                              NAMES
b8ed3f30ee24   emqx/emqx:v4.0.0   "/usr/bin/docker-ent…"   7 seconds ago   Up 5 seconds   4369/tcp, 5369/tcp, 6369/tcp, 0.0.0.0:1883->1883/tcp, :::1883->1883/tcp, 0.0.0.0:8081->8081/tcp, :::8081->8081/tcp, 0.0.0.0:8083-8084->8083-8084/tcp, :::8083-8084->8083-8084/tcp, 8080/tcp, 0.0.0.0:8883->8883/tcp, :::8883->8883/tcp, 0.0.0.0:18083->18083/tcp, :::18083->18083/tcp, 11883/tcp   emqx

Manage the container using the commands:

##Stop EMQX
docker stop emqx

##Start EMQX
docker start emqx

Alternatively using Docker-compose, you can also set up a simple static EMQX cluster. Create the docker-compose.yml file

vim docker-compose.yml

Add the below lines to the file:

version: '3'

services:
  emqx1:
    image: emqx/emqx
    environment:
    - "EMQX_NAME=emqx"
    - "EMQX_HOST=node1.emqx.io"
    - "EMQX_CLUSTER__DISCOVERY=static"
    - "[email protected], [email protected]"
    - "EMQX_ZONE__EXTERNAL__RETRY_INTERVAL=2s"
    - "EMQX_MQTT__MAX_TOPIC_ALIAS=10"
    volumes:
        - /emqx-data/emqx.lic:/opt/emqx/etc/emqx.lic
    healthcheck:
      test: ["CMD", "/opt/emqx/bin/emqx_ctl", "status"]
      interval: 5s
      timeout: 25s
      retries: 5
    networks:
      emqx-bridge:
        aliases:
        - node1.emqx.io

  emqx2:
    image: emqx/emqx
    environment:
    - "EMQX_NAME=emqx"
    - "EMQX_HOST=node2.emqx.io"
    - "EMQX_CLUSTER__DISCOVERY=static"
    - "[email protected], [email protected]"
    - "EMQX_ZONE__EXTERNAL__RETRY_INTERVAL=2s"
    - "EMQX_MQTT__MAX_TOPIC_ALIAS=10"
    volumes:
        - /emqx-data/emqx.lic:/opt/emqx/etc/emqx.lic
    healthcheck:
      test: ["CMD", "/opt/emqx/bin/emqx_ctl", "status"]
      interval: 5s
      timeout: 25s
      retries: 5
    networks:
      emqx-bridge:
        aliases:
        - node2.emqx.io

  client:
    image: python:3.7.2-alpine3.9
    depends_on:
      - emqx1
      - emqx2
    tty: true
    networks:
        emqx-bridge:

networks:
  emqx-bridge:
    driver: bridge

Start the cluster using the command:

docker-compose -p emqx up -d

Access the EMQX Dashboard

The EMQX Dashboard is a web application accessed via the browser. The dashboard is enabled by default and runs on port 18083.

Allow the ports through the firewall.

sudo firewall-cmd --add-port=18083/tcp --permanent
sudo firewall-cmd --add-port=8083/tcp --permanent
sudo firewall-cmd --add-port=1883/tcp --permanent
sudo firewall-cmd --add-port=8081/tcp --permanent
sudo firewall-cmd --add-port=8883/tcp --permanent
sudo firewall-cmd --add-port=8084/tcp --permanent
sudo firewall-cmd --reload

Access the Dashboard using the URL http://IP_Address:18083

The default login credentials are; username- admin and the password- public. This can be edited in the file /etc/plugins/emqx_dashboard.conf. On successful login, you will be granted the EMQX dashboard.

Here, you can monitor the server and clients under the morning tab. Here, you can get the overview, client data e.t.c

When clients are configured, you can send and receive messages. For this guide, we will set up the server as the client. Navigate to the Tools>Web socket tab. Create a new connection to the client. Provide the credentials as below and connect to the client.

Once connected, subscribe to the topic and sent messages to the client.

Try and send a message to the configured client. The sent and received messages will appear as below.

Now you can view the client information under the Clients tab.

At this point, you can view topics for the Nodes

You can as well view topic subscriptions.

Voila!

That marks the end of this amazing guide on how to install the EMQX MQTT Broker on Rocky Linux 8|AlmaLinux 8|CentOS Stream 8. I hope this was significant to you.

See more:


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK