(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.

String cluster_name;
    ClusterPtr cluster;
    Cluster::Address address_in_cluster;
    size_t host_shard_num;
    size_t host_replica_num;
    bool is_circular_replicated = false;
    
    ExecutionStatus execution_status;
    bool was_executed = false;
    
};
namespace
{
/** Caveats: usage of locks in ZooKeeper is incorrect in 99% of cases,
  *  and highlights your poor understanding of distributed systems.
  *
  * It's only correct if all the operations that are performed under lock
  *  are atomically checking that the lock still holds
  *  or if we ensure that these operations will be undone if lock is lost
  *  (due to ZooKeeper session loss) that's very difficult to achieve.
  *
  * It's Ok if every operation that we perform under lock is actually operation in ZooKeeper.
  *
  * In 1% of cases when you can correctly use Lock, the logic is complex enough, so you don't need this class.
  *
  * TLDR: Don't use this code.
  * We only have a few cases of it's usage and it will be removed.
  */
class ZooKeeperLock