**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.
partialShutdown();
        tryLogCurrentException(log, __PRETTY_FUNCTION__);
        if (e.code() == ErrorCodes::REPLICA_STATUS_CHANGED)
            reschedule_period_ms = 0;
    }
    catch (...)
    {
        partialShutdown();
        tryLogCurrentException(log, __PRETTY_FUNCTION__);
    }
    if (first_time)
    {
        if (storage.is_readonly)
        {
            
            CurrentMetrics::add(CurrentMetrics::ReadonlyReplica);
        }
        
        storage.startup_event.set();
        first_time = false;
    }
    if (need_stop)
        return;
    if (reschedule_period_ms)
        task->scheduleAfter(reschedule_period_ms);
    else
        task->schedule();
}
bool ReplicatedMergeTreeRestartingThread::runImpl()