**Describe the solution you'd like**

We already can run clickhouse-server without configured ZooKeeper (the tables will start in read-only mode)
and with configured ZooKeeper, if it starts to be inaccessible at runtime (the tables will be read-only until the session is re-established).

Let's also make it possible to start up when ZooKeeper is unavailable.

**Additional context**

If that will be very hard to implement, we can consider other options:
- lazy attaching of the tables after sever start-up;
- a maintenance mode when the tables are not attached at start-up and require manual ATTACH queries.
*/
    ReplicatedMergeTreeQueue queue;
    std::atomic<time_t> last_queue_update_start_time{0};
    std::atomic<time_t> last_queue_update_finish_time{0};
    mutable std::mutex last_queue_update_exception_lock;
    String last_queue_update_exception;
    String getLastQueueUpdateException() const;
    DataPartsExchange::Fetcher fetcher;
    
    Poco::Event startup_event;
    
    std::atomic<bool> partial_shutdown_called {false};
    
    Poco::Event partial_shutdown_event {false};     
    std::atomic<bool> shutdown_called {false};
    std::atomic<bool> flush_called {false};
    int metadata_version = 0;
    
    
    bool queue_update_in_progress = false;
    BackgroundSchedulePool::TaskHolder queue_updating_task;
    BackgroundSchedulePool::TaskHolder mutations_updating_task;
    
    BackgroundSchedulePool::TaskHolder merge_selecting_task;
    
    std::mutex merge_selecting_mutex;
    
    BackgroundSchedulePool::TaskHolder mutations_finalizing_task;
    
    ReplicatedMergeTreeCleanupThread cleanup_thread;