public void start() throws MemberStartupException {
    boolean started = false;
    try {
      logger.info("Starting membership services");
      logger.debug("starting Messenger");
      messenger.start();
      logger.debug("starting JoinLeave");
      joinLeave.start();
      logger.debug("starting HealthMonitor");
      healthMon.start();
      logger.debug("starting Manager");
      manager.start();
      messenger.started();
      joinLeave.started();
      healthMon.started();
      manager.started();

      if (membershipLocator != null) {
        /*
         * Now that all the services have started we can let the membership locator know
         * about them. We must do this before telling the manager to joinDistributedSystem()
         * later in this method
         */
        final MembershipLocatorImpl locatorImpl =
            (MembershipLocatorImpl) membershipLocator;
        locatorImpl.setServices(this);
      }

      logger.debug("All membership services have been started");
      started = true;
    } catch (RuntimeException e) {
      logger.fatal("Unexpected exception while booting membership services", e);
      throw e;
    } finally {
      if (!started) {
        manager.stop();
        healthMon.stop();
        joinLeave.stop();
        messenger.stop();
        timer.cancel();
      }
    }

    try {
      manager.joinDistributedSystem();
    } catch (Throwable e) {
      stop();
      throw e;
    }
  }
Start services - this will start everything up and join the cluster.
Invoke init() before this method.
geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/Services.java