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

**Use case**

Sometimes, for really sophisticated scenarios it can be hard to control the amount of in-progress backups run externally. For the purpose of simpler control we can introduce server-level setting which disallows running concurrent backups of any type. 

Something like this in `config.xml` (enabled by default):
`<allow_concurrent_backups>true</allow_concurrent_backups>`

**Describe the solution you'd like**

It's important that backups can be executed in distributed way on multiple servers. Need to take it into account.

**Describe alternatives you've considered**
External check of `system.backups` table, but it can be complex.

backup_coordination = makeBackupCoordination(backup_settings.coordination_zk_path, context, backup_settings.internal);
    }
    auto backup_info = BackupInfo::fromAST(*backup_query->backup_name);
    String backup_name_for_logging = backup_info.toStringForLogging();
    try
    {
        addInfo(backup_id, backup_name_for_logging, backup_settings.internal, BackupStatus::CREATING_BACKUP);
        
        ContextPtr context_in_use = context;
        ContextMutablePtr mutable_context;
        bool on_cluster = !backup_query->cluster.empty();
        if (on_cluster || backup_settings.async)
        {
            
            
            context_in_use = mutable_context = Context::createCopy(context);
            mutable_context->makeQueryContext();
        }
        if (backup_settings.async)
        {
            backups_thread_pool.scheduleOrThrowOnError(
                [this, backup_query, backup_id, backup_name_for_logging, backup_info, backup_settings, backup_coordination, context_in_use, mutable_context]
                {
                    doBackup(
                        backup_query,
                        backup_id,
                        backup_name_for_logging,
                        backup_info,
                        backup_settings,
                        backup_coordination,