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


"keeper_server",
        configuration_and_settings_->log_storage_path,
        configuration_and_settings_->state_file_path,
        config,
        coordination_settings);
}
/**
 * Tiny wrapper around nuraft::raft_server which adds some functions
 * necessary for recovery, mostly connected to config manipulation.
 */
struct KeeperServer::KeeperRaftServer : public nuraft::raft_server
{
    bool isClusterHealthy()
    {
        if (timer_from_init)
        {
            size_t expiry = get_current_params().heart_beat_interval_ * raft_server::raft_limits_.response_limit_;
            if (timer_from_init->elapsedMilliseconds() < expiry)
                return false;
            timer_from_init.reset();
        }
        const size_t voting_members = get_num_voting_members();
        const auto not_responding_peers = get_not_responding_peers();
        const auto quorum_size = voting_members / 2 + 1;
        const auto max_not_responding_peers = voting_members - quorum_size;
        return not_responding_peers <= max_not_responding_peers;
    }
    
    
    void setConfig(const nuraft::ptr<nuraft::cluster_config> & new_config)