code: func New(scheduler Scheduler, storage Storage, caPath string, nodes ...Node) (*Cluster, error) {
  	var (
  		c   Cluster
  		err error
  	)
  	if storage == nil {
  		return nil, errStorageMandatory
  	}
  	c.stor = storage
  	c.scheduler = scheduler
  	if caPath != "" {
  		tlsConfig, errTLS := readTLSConfig(caPath)
  		if errTLS != nil {
  			return nil, errTLS
  		}
  		c.tlsConfig = tlsConfig
  	}
  	c.Healer = DefaultHealer{}
  	if scheduler == nil {
  		c.scheduler = &roundRobin{lastUsed: -1}
  	}
  	if len(nodes) > 0 {
  		for _, n := range nodes {
  			err = c.Register(n)
  			if err != nil {
  				return &c, err
  			}
  		}
  	}
  	return &c, err
  }
docs: // New creates a new Cluster, initially composed by the given nodes.
  //
  // The scheduler parameter defines the scheduling strategy. It defaults
  // to round robin if nil.
  // The storage parameter is the storage the cluster instance will use.