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

**Use case**

Support manually snapshot for Keeper.

**Describe the solution you'd like**

Throught 4lw commands, such as `csnp`.


LOG_INFO(log, "RAFT doesn't start, shutdown not required");
        return;
    }
    raft_instance->shutdown();
    keeper_context->server_state = KeeperContext::Phase::SHUTDOWN;
    if (create_snapshot_on_exit)
        raft_instance->create_snapshot();
    raft_instance.reset();
    for (const auto & asio_listener : asio_listeners)
    {
        if (asio_listener)
        {
            asio_listener->stop();
            asio_listener->shutdown();
        }
    }
    if (asio_service)
    {
        asio_service->stop();
        size_t count = 0;
        while (asio_service->get_active_workers() != 0 && count < timeout * 100)
        {
            std::this_thread::sleep_for(std::chrono::milliseconds(10));
            count++;
        }
    }
    if (asio_service->get_active_workers() != 0)
        LOG_WARNING(log, "Failed to shutdown RAFT server in {} seconds", timeout);
}
void KeeperServer::shutdown()