|
@@ -1,12 +1,18 @@
|
|
|
#!/usr/bin/env bash
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
-## Test two nodes-cluster discover each other using DNS A records lookup result.
|
|
|
|
|
|
|
+## Test two-nodes cluster discover each other using DNS A records lookup result.
|
|
|
|
|
|
|
|
set -euo pipefail
|
|
set -euo pipefail
|
|
|
|
|
|
|
|
cd -P -- "$(dirname -- "$0")/.."
|
|
cd -P -- "$(dirname -- "$0")/.."
|
|
|
|
|
|
|
|
-IMAGE="${1}"
|
|
|
|
|
|
|
+IMAGE="${1:-}"
|
|
|
|
|
+
|
|
|
|
|
+if [ -z "$IMAGE" ]; then
|
|
|
|
|
+ echo "Usage: $0 <EMQX_IMAGE_TAG>"
|
|
|
|
|
+ echo "e.g. $0 docker.io/emqx/emqx:5.0.8"
|
|
|
|
|
+ exit 1
|
|
|
|
|
+fi
|
|
|
|
|
|
|
|
NET='test_node_discovery_dns'
|
|
NET='test_node_discovery_dns'
|
|
|
NODE1='emqx1'
|
|
NODE1='emqx1'
|
|
@@ -56,7 +62,9 @@ docker run -d -t --name dnsmasq \
|
|
|
--cap-add=NET_ADMIN \
|
|
--cap-add=NET_ADMIN \
|
|
|
storytel/dnsmasq dnsmasq --no-daemon --log-queries
|
|
storytel/dnsmasq dnsmasq --no-daemon --log-queries
|
|
|
|
|
|
|
|
-start_emqx() {
|
|
|
|
|
|
|
+# Node names (the part before '@') should be all the same in the cluster
|
|
|
|
|
+# e.g. emqx@${IP}
|
|
|
|
|
+start_emqx_v5() {
|
|
|
NAME="$1"
|
|
NAME="$1"
|
|
|
IP="$2"
|
|
IP="$2"
|
|
|
DASHBOARD_PORT="$3"
|
|
DASHBOARD_PORT="$3"
|
|
@@ -66,6 +74,7 @@ start_emqx() {
|
|
|
--ip "$IP" \
|
|
--ip "$IP" \
|
|
|
--dns "$IP0" \
|
|
--dns "$IP0" \
|
|
|
-p "$DASHBOARD_PORT:18083" \
|
|
-p "$DASHBOARD_PORT:18083" \
|
|
|
|
|
+ -e EMQX_NODE_NAME="emqx@${IP}" \
|
|
|
-e EMQX_LOG__CONSOLE_HANDLER__LEVEL=debug \
|
|
-e EMQX_LOG__CONSOLE_HANDLER__LEVEL=debug \
|
|
|
-e EMQX_NODE_COOKIE="$COOKIE" \
|
|
-e EMQX_NODE_COOKIE="$COOKIE" \
|
|
|
-e EMQX_cluster__discovery_strategy='dns' \
|
|
-e EMQX_cluster__discovery_strategy='dns' \
|
|
@@ -74,5 +83,48 @@ start_emqx() {
|
|
|
"$IMAGE"
|
|
"$IMAGE"
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-start_emqx "$NODE1" "$IP1" 18083
|
|
|
|
|
-start_emqx "$NODE2" "$IP2" 18084
|
|
|
|
|
|
|
+## EMQX v4 has different configuration schema:
|
|
|
|
|
+# EMQX_NODE_NAME="emqx@${IP}":
|
|
|
|
|
+# This is necessary because 4.x docker entrypoint
|
|
|
|
|
+# by default uses docker container ID as node name
|
|
|
|
|
+# (the part before @ of e.g. emqx@172.18.0.101)
|
|
|
|
|
+# EMQX_cluster__dns__app
|
|
|
|
|
+# This must be the same as node name in 4.x
|
|
|
|
|
+# EMQX_cluster__discovery
|
|
|
|
|
+# This in 5.0 is EMQX_cluster__discovery_strategy
|
|
|
|
|
+# EMQX_cluster__dns__name
|
|
|
|
|
+# The DNS domain to lookup for peer nodes
|
|
|
|
|
+# EMQX_cluster__dns__record_type
|
|
|
|
|
+# The DNS record type. (only 'a' type is tested)
|
|
|
|
|
+start_emqx_v4() {
|
|
|
|
|
+ NAME="$1"
|
|
|
|
|
+ IP="$2"
|
|
|
|
|
+ APP_NAME="emqx"
|
|
|
|
|
+ DASHBOARD_PORT="$3"
|
|
|
|
|
+ docker run -d -t \
|
|
|
|
|
+ --name "$NAME" \
|
|
|
|
|
+ --net "$NET" \
|
|
|
|
|
+ --ip "$IP" \
|
|
|
|
|
+ --dns "$IP0" \
|
|
|
|
|
+ -p "$DASHBOARD_PORT:18083" \
|
|
|
|
|
+ -e EMQX_NODE_NAME="${APP_NAME}@${IP}" \
|
|
|
|
|
+ -e EMQX_LOG__LEVEL=debug \
|
|
|
|
|
+ -e EMQX_NODE_COOKIE="$COOKIE" \
|
|
|
|
|
+ -e EMQX_cluster__discovery='dns' \
|
|
|
|
|
+ -e EMQX_cluster__dns__name="$DOMAIN" \
|
|
|
|
|
+ -e EMQX_cluster__dns__app="${APP_NAME}" \
|
|
|
|
|
+ -e EMQX_cluster__dns__record_type="a" \
|
|
|
|
|
+ "$IMAGE"
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+case "${IMAGE}" in
|
|
|
|
|
+ *emqx:4.*|*emqx-ee:4.*)
|
|
|
|
|
+ start_emqx_v4 "$NODE1" "$IP1" 18083
|
|
|
|
|
+ start_emqx_v4 "$NODE2" "$IP2" 18084
|
|
|
|
|
+ ;;
|
|
|
|
|
+ *)
|
|
|
|
|
+ start_emqx_v5 "$NODE1" "$IP1" 18083
|
|
|
|
|
+ start_emqx_v5 "$NODE2" "$IP2" 18084
|
|
|
|
|
+ ;;
|
|
|
|
|
+
|
|
|
|
|
+esac
|