- [x] I have searched the [issues](https://github.com/apache/incubator-dubbo/issues) of this repository and believe that this is not a duplicate.
- [x] I have checked the [FAQ](https://github.com/apache/incubator-dubbo/blob/master/FAQ.md) of this repository and believe that this is not a duplicate.

### Environment

* Dubbo version: 2.7.0
* Operating System version: mac
* Java version: 1.8

### Steps to reproduce this issue

1.  `AbstractClient#initConnectStatusCheckCommand` set break point at `  !isConnected()`.
2. `AbstractClient#close()` set break point here.    
3.  start client first, start provider and then shutdown provider gracefully , let method `AbstractClient.close()` be executed. Then select step `1` and trigger the thread to execute `!isConnected`, here will always try to connect the offline machine.

Pls. provide [GitHub address] to reproduce this issue.

### Expected Result

What do you expected from the above steps？

When the server goes offline, the client will not reconnect the offline machine.

### Actual Result

What actually happens?

The client reconnects the offline machine every 2 seconds and causes a large number of arp packets(because ip is recycled and not available now).
} else {
                if (logger.isInfoEnabled()) {
                    logger.info("Successed connect to server " + getRemoteAddress() + " from " + getClass().getSimpleName() + " "
                            + NetUtils.getLocalHost() + " using dubbo version " + Version.getVersion()
                            + ", channel is " + this.getChannel());
                }
            }
            reconnect_count.set(0);
            reconnect_error_log_flag.set(false);
        } catch (RemotingException e) {
            throw e;
        } catch (Throwable e) {
            throw new RemotingException(this, "Failed connect to server " + getRemoteAddress() + " from " + getClass().getSimpleName() + " "
                    + NetUtils.getLocalHost() + " using dubbo version " + Version.getVersion()
                    + ", cause: " + e.getMessage(), e);
        } finally {
            connectLock.unlock();
        }
    }
    public void disconnect() {
        connectLock.lock();
        try {
            destroyConnectStatusCheckCommand();
            try {
                Channel channel = getChannel();
                if (channel != null) {
                    channel.close();
                }
            } catch (Throwable e) {
                logger.warn(e.getMessage(), e);