async addNode(id, ip, lastMessageId) {
    if (this.remoteNodes.has(id)) {
      return false;
    }

    const subscriber = new ClusterSubscriber(this, id, ip);

    this.remoteNodes.set(id, subscriber);
    await subscriber.init();
    await subscriber.sync(lastMessageId);
    await this.idCardHandler.addNode(id);

    global.kuzzle.log.info(`[CLUSTER] Node "${id}" joined the cluster`);
    this.trackActivity(id, ip, nodeActivityEnum.ADDED);

    if (
      global.kuzzle.state === kuzzleStateEnum.NOT_ENOUGH_NODES &&
      this.countActiveNodes() >= this.config.minimumNodes
    ) {
      global.kuzzle.state = kuzzleStateEnum.RUNNING;
      global.kuzzle.log.warn(
        `[CLUSTER] Minimum number of nodes reached (${this.countActiveNodes()}). This node is now accepting requests again.`,
      );
    }

    return true;
  }
Adds a new remote node, and subscribes to it.
@param {string} id            - remote node ID
@param {string} ip            - remote node IP address
@param {number} lastMessageId - remote node last message ID
@return {boolean} false if the node was already known, true otherwise