private void monitorDnsChange(final SingleServerConfig cfg) {
    monitorFuture =
        GlobalEventExecutor.INSTANCE.scheduleWithFixedDelay(
            new Runnable() {
              @Override
              public void run() {
                try {
                  InetAddress master = currentMaster.get();
                  InetAddress now = InetAddress.getByName(cfg.getAddress().getHost());
                  if (!now.getHostAddress().equals(master.getHostAddress())) {
                    log.info(
                        "Detected DNS change. {} has changed from {} to {}",
                        cfg.getAddress().getHost(),
                        master.getHostAddress(),
                        now.getHostAddress());
                    if (currentMaster.compareAndSet(master, now)) {
                      changeMaster(
                          MAX_SLOT, cfg.getAddress().getHost(), cfg.getAddress().getPort());
                      log.info("Master has been changed");
                    }
                  }

                } catch (Exception e) {
                  log.error(e.getMessage(), e);
                }
              }
            },
            cfg.getDnsMonitoringInterval(),
            cfg.getDnsMonitoringInterval(),
            TimeUnit.MILLISECONDS);
  }