(you don't have to strictly follow this form)

**Describe the bug**
Useless DDLWorker remains in ClickHouse because of zookeeper failing to initialize.
That will cause DDLWorker failing to watch the zookeeper DDL queue normally.
Later, if we perform DDL operations in the cluster, the operation will be hanged.

**How to reproduce**
Configure invalid zookeeper domain name.
* Which ClickHouse server version to use
v20.3.10.75-lts

* Queries to run that lead to unexpected result
```C++
CREATE DATABASE online_smoke ON CLUSTER default_cluster;
```

**Expected behavior**
When Zookeeper fails to initialize normally,we should exit the program.

**Error message and/or stacktrace**
![image](https://user-images.githubusercontent.com/13234323/101854471-970bc500-3b9c-11eb-91f1-4e6e8502c32c.png)


**Additional context**
https://github.com/ClickHouse/ClickHouse/blob/master/src/Interpreters/DDLWorker.cpp#L1110-L1140

```C++
            if (!Coordination::isHardwareError(e.code))
                throw;  /// A logical error.
```
when we meet  a logical error, the exception throwed will be catched by ThreadPool:
![image](https://user-images.githubusercontent.com/13234323/101854838-48125f80-3b9d-11eb-80f0-4f5e0538cc64.png)

I think we should exit the program, when we fail to  initialize `zookeeper`. （But we need to exit the program in a thread, I can not see any code like that）
If there is no problem, I will submit a PR.

task.entry_name, task.host_id.readableString(), task.cluster_name);
    
    
    
    const auto & shards = task.cluster->getShardsAddresses();
    bool found_exact_match = false;
    String default_database;
    for (size_t shard_num = 0; shard_num < shards.size(); ++shard_num)
    {
        for (size_t replica_num = 0; replica_num < shards[shard_num].size(); ++replica_num)
        {
            const Cluster::Address & address = shards[shard_num][replica_num];
            if (address.host_name == task.host_id.host_name && address.port == task.host_id.port)
            {
                if (found_exact_match)
                {
                    if (default_database == address.default_database)
                    {
                        throw Exception(ErrorCodes::INCONSISTENT_CLUSTER_DEFINITION,
                            "There are two exactly the same ClickHouse instances {} in cluster {}",
                            address.readableString(), task.cluster_name);
                    }
                    else
                    {
                        /* Circular replication is used.
                         * It is when every physical node contains
                         * replicas of different shards of the same table.
                         * To distinguish one replica from another on the same node,
                         * every shard is placed into separate database.
                         * */