**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.
{
            shutdown();
        }
        catch (...)
        {
            std::terminate();
        }
        
        throw;
    }
}
void StorageReplicatedMergeTree::flush()
{
    if (flush_called.exchange(true))
        return;
    flushAllInMemoryPartsIfNeeded();
}
void StorageReplicatedMergeTree::shutdown()
{
    if (shutdown_called.exchange(true))
        return;
    
    fetcher.blocker.cancelForever();
    merger_mutator.merges_blocker.cancelForever();
    parts_mover.moves_blocker.cancelForever();
    mutations_finalizing_task->deactivate();
    stopBeingLeader();
    restarting_thread.shutdown();
    background_operations_assignee.finish();
    part_moves_between_shards_orchestrator.shutdown();