start-two-nodes-in-host.sh 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. ## This starts two nodes on the same host (not in docker).
  4. ## The listener ports are shifted with an offset to avoid clashing.
  5. ## The data and log directories are configured to use ./tmp/
  6. ## By default, the boot script is ./_build/emqx/rel/emqx
  7. ## it can be overriden with arg1 and arg2 for the two nodes respectfully
  8. # ensure dir
  9. cd -P -- "$(dirname -- "$0")/../../"
  10. DEFAULT_BOOT='./_build/emqx/rel/emqx/bin/emqx'
  11. BOOT1="${1:-$DEFAULT_BOOT}"
  12. BOOT2="${2:-$BOOT1}"
  13. export IP1='127.0.0.1'
  14. export IP2='127.0.0.2'
  15. # cannot use the same node name even IPs are different because Erlang distribution listens on 0.0.0.0
  16. NODE1="emqx1@$IP1"
  17. NODE2="emqx2@$IP2"
  18. start_cmd() {
  19. local index="$1"
  20. local nodehome
  21. nodehome="$(pwd)/tmp/emqx${index}"
  22. [ "$index" -eq 1 ] && BOOT_SCRIPT="$BOOT1"
  23. [ "$index" -eq 2 ] && BOOT_SCRIPT="$BOOT2"
  24. mkdir -p "${nodehome}/data" "${nodehome}/log"
  25. cat <<-EOF
  26. env DEBUG="${DEBUG:-0}" \
  27. EMQX_CLUSTER__STATIC__SEEDS="[\"$NODE1\",\"$NODE2\"]" \
  28. EMQX_CLUSTER__DISCOVERY_STRATEGY=static \
  29. EMQX_LOG__FILE_HANDLERS__DEFAULT__LEVEL="${EMQX_LOG__FILE_HANDLERS__DEFAULT__LEVEL:-debug}" \
  30. EMQX_LOG__FILE_HANDLERS__DEFAULT__FILE="${nodehome}/log/emqx.log" \
  31. EMQX_NODE_NAME="emqx${index}@\$IP${index}" \
  32. EMQX_NODE__COOKIE="${EMQX_NODE__COOKIE:-cookie1}" \
  33. EMQX_LOG_DIR="${nodehome}/log" \
  34. EMQX_NODE__DATA_DIR="${nodehome}/data" \
  35. EMQX_LISTENERS__TCP__DEFAULT__BIND="\$IP${index}:1883" \
  36. EMQX_LISTENERS__SSL__DEFAULT__BIND="\$IP${index}:8883" \
  37. EMQX_LISTENERS__WS__DEFAULT__BIND="\$IP${index}:8083" \
  38. EMQX_LISTENERS__WSS__DEFAULT__BIND="\$IP${index}:8084" \
  39. EMQX_DASHBOARD__LISTENERS__HTTP__BIND="\$IP${index}:18083" \
  40. "$BOOT_SCRIPT" start
  41. EOF
  42. }
  43. echo "Stopping $NODE1"
  44. env EMQX_NODE_NAME="$NODE1" "$BOOT1" stop || true
  45. echo "Stopping $NODE2"
  46. env EMQX_NODE_NAME="$NODE2" "$BOOT2" stop || true
  47. start_one_node() {
  48. local index="$1"
  49. local cmd
  50. cmd="$(start_cmd "$index" | envsubst)"
  51. echo "$cmd"
  52. eval "$cmd"
  53. }
  54. ## Fork-start node1, otherwise it'll keep waiting for node2 because we are using static cluster
  55. start_one_node 1 &
  56. start_one_node 2