code: protected function openFromPoolSequentially(array $pool, array $sharedConfig)
      {
          if (empty($pool)) {
              return null;
          }
  
          if (!isset($sharedConfig['class'])) {
              $sharedConfig['class'] = get_class($this);
          }
  
          $cache = is_string($this->serverStatusCache) ? Yii::$app->get($this->serverStatusCache, false) : $this->serverStatusCache;
  
          foreach ($pool as $config) {
              $config = array_merge($sharedConfig, $config);
              if (empty($config['dsn'])) {
                  throw new InvalidConfigException('The "dsn" option must be specified.');
              }
  
              $key = [__METHOD__, $config['dsn']];
              if ($cache instanceof CacheInterface && $cache->get($key)) {
                  // should not try this dead server now
                  continue;
              }
  
              /* @var $db Connection */
              $db = Yii::createObject($config);
  
              try {
                  $db->open();
                  return $db;
              } catch (\Exception $e) {
                  Yii::warning("Connection ({$config['dsn']}) failed: " . $e->getMessage(), __METHOD__);
                  if ($cache instanceof CacheInterface) {
                      // mark this server as dead and only retry it after the specified interval
                      $cache->set($key, 1, $this->serverRetryInterval);
                  }
              }
          }
  
          return null;
      }
docs: Opens the connection to a server in the pool.
  This method implements the load balancing among the given list of the servers.
  Connections will be tried in sequential order.
  @param array $pool the list of connection configurations in the server pool
  @param array $sharedConfig the configuration common to those given in `$pool`.
  @return Connection the opened DB connection, or `null` if no server is available
  @throws InvalidConfigException if a configuration does not specify "dsn"
  @since 2.0.11