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


return;
        asio_listeners.emplace_back(std::move(asio_listener));
    }
    else
    {
        for (const auto & listen_host : listen_hosts)
        {
            auto asio_listener = asio_service->create_rpc_listener(listen_host, state_manager->getPort(), logger);
            if (asio_listener)
                asio_listeners.emplace_back(std::move(asio_listener));
        }
    }
    nuraft::ptr<nuraft::delayed_task_scheduler> scheduler = asio_service;
    nuraft::ptr<nuraft::rpc_client_factory> rpc_cli_factory = asio_service;
    nuraft::ptr<nuraft::state_mgr> casted_state_manager = state_manager;
    nuraft::ptr<nuraft::state_machine> casted_state_machine = state_machine;
    
    nuraft::context * ctx
        = new nuraft::context(casted_state_manager, casted_state_machine, asio_listeners, logger, rpc_cli_factory, scheduler, params);
    raft_instance = nuraft::cs_new<KeeperRaftServer>(ctx, init_options);
    if (!raft_instance)
        throw Exception(ErrorCodes::RAFT_ERROR, "Cannot allocate RAFT instance");
    raft_instance->start_server(init_options.skip_initial_election_timeout_);
    nuraft::ptr<nuraft::raft_server> casted_raft_server = raft_instance;
    for (const auto & asio_listener : asio_listeners)
    {
        asio_listener->listen(casted_raft_server);
    }
}
void KeeperServer::startup(const Poco::Util::AbstractConfiguration & config, bool enable_ipv6)