type=page
status=published
title=create-cluster
next=create-connector-connection-pool.html
prev=create-auth-realm.html
~~~~~~
create-cluster
==============

[[create-cluster-1]][[GSRFM00017]][[create-cluster]]

create-cluster
--------------

creates a \{product---name} cluster

[[sthref147]]

Synopsis

[source,oac_no_warn]
----
asadmin [asadmin-options] create-cluster [--help] 
[--config config-name]
[--systemproperties (name=value)[:name=value]*]
[--properties (name=value)[:name=value]*]
[--gmsenabled={true|false}] 
[--multicastport multicast-port] 
[--multicastaddress multicast-address]
[--bindaddress bind-address]
[--hosts hadb-host-list] 
[--haagentport port-number]
[--haadminpassword password] 
[--haadminpasswordfile file-name] [--devicesize devicesize ] 
[--haproperty (name=value)[:name=value]*]
[--autohadb=false] [--portbase port-number]
cluster-name
----

[[sthref148]]

Description

The `create-cluster` subcommand creates a \{product---name} cluster.
Initially the cluster contains no \{product---name} instances,
applications, or resources.

A cluster requires a reference to the named configuration that defines
the configuration of all instances that are added to the cluster. The
configuration can be specified in the command to create the cluster, but
is not required. If no configuration is specified, the subcommand
creates a configuration that is named cluster-name`-config` for the
cluster. The cluster that is created is a standalone cluster because the
cluster's configuration is not shared with any other clusters or
standalone instances.

To add instances to the cluster, set the `--cluster` option to the name
of the cluster when using either of the following subcommands:

* link:create-instance.html#create-instance-1[`create-instance`(1)]
* link:create-local-instance.html#create-local-instance-1[`create-local-instance`(1)]

To delete server instances from the cluster at any time, use one of the
following subcommands:

* link:delete-instance.html#delete-instance-1[`delete-instance`(1)]
* link:delete-local-instance.html#delete-local-instance-1[`delete-local-instance`(1)]

To associate applications and resources with all instances in the
cluster, set the `--target` option to the name of the cluster when
performing the following operations:

* Deploying applications by using the
link:deploy.html#deploy-1[`deploy`(1)] subcommand
* Creating resources by using subcommands such as
link:create-jdbc-resource.html#create-jdbc-resource-1[`create-jdbc-resource`(1)]
* Creating references to applications that are already deployed in other
targets by using the
link:create-application-ref.html#create-application-ref-1[`create-application-ref`(1)]
subcommand
* Creating references to resources that are already created in other
targets by using the
link:create-resource-ref.html#create-resource-ref-1[`create-resource-ref`(1)]
subcommand

This subcommand is supported in remote mode only.

[[sthref149]]

Options

asadmin-options::
  Options for the `asadmin` utility. For information about these
  options, see the link:asadmin.html#asadmin-1m[`asadmin`(1M)] help page.
`--help`::
`-?`::
  Displays the help text for the subcommand.
`--config`::
  Specifies the named configuration that the cluster references. The
  configuration must exist and must not be named `default-config` or
  `server-config`. Specifying the `--config` option creates a shared
  cluster. If this option is omitted, a standalone cluster is created.
`--systemproperties`::
  Defines system properties for the configuration that is created for
  the cluster. These properties override the property values in the
  `default-config` configuration. The following properties are
  available: +
  `ASADMIN_LISTENER_PORT`;;
    This property specifies the port number of the HTTP port or HTTPS
    port through which the DAS connects to the instance to manage the
    instance. Valid values are 1-65535. On UNIX, creating sockets that
    listen on ports 1-1024 requires superuser privileges.
  `HTTP_LISTENER_PORT`;;
    This property specifies the port number of the port that is used to
    listen for HTTP requests. Valid values are 1-65535. On UNIX,
    creating sockets that listen on ports 1-1024 requires superuser
    privileges.
  `HTTP_SSL_LISTENER_PORT`;;
    This property specifies the port number of the port that is used to
    listen for HTTPS requests. Valid values are 1-65535. On UNIX,
    creating sockets that listen on ports 1-1024 requires superuser
    privileges.
  `IIOP_LISTENER_PORT`;;
    This property specifies the port number of the port that is used for
    IIOP connections. Valid values are 1-65535. On UNIX, creating
    sockets that listen on ports 1-1024 requires superuser privileges.
  `IIOP_SSL_LISTENER_PORT`;;
    This property specifies the port number of the port that is used for
    secure IIOP connections. Valid values are 1-65535. On UNIX, creating
    sockets that listen on ports 1-1024 requires superuser privileges.
  `IIOP_SSL_MUTUALAUTH_PORT`;;
    This property specifies the port number of the port that is used for
    secure IIOP connections with client authentication. Valid values are
    1-65535. On UNIX, creating sockets that listen on ports 1-1024
    requires superuser privileges.
  `JAVA_DEBUGGER_PORT`;;
    This property specifies the port number of the port that is used for
    connections to the
    http://java.sun.com/javase/technologies/core/toolsapis/jpda/[Java
    Platform Debugger Architecture (JPDA)]
    (http://www.oracle.com/technetwork/java/javase/tech/jpda-141715.html)
    debugger. Valid values are 1-65535. On UNIX, creating sockets that
    listen on ports 1-1024 requires superuser privileges.
  `JMS_PROVIDER_PORT`;;
    This property specifies the port number for the Java Message Service
    provider. Valid values are 1-65535. On UNIX, creating sockets that
    listen on ports 1-1024 requires superuser privileges.
  `JMX_SYSTEM_CONNECTOR_PORT`;;
    This property specifies the port number on which the JMX connector
    listens. Valid values are 1-65535. On UNIX, creating sockets that
    listen on ports 1-1024 requires superuser privileges.
  `OSGI_SHELL_TELNET_PORT`;;
    This property specifies the port number of the port that is used for
    connections to the
    http://felix.apache.org/site/apache-felix-remote-shell.html[Apache
    Felix Remote Shell]
    (http://felix.apache.org/site/apache-felix-remote-shell.html). This
    shell uses the Felix shell service to interact with the OSGi module
    management subsystem. Valid values are 1-65535. On UNIX, creating
    sockets that listen on ports 1-1024 requires superuser privileges.
`--properties`::
  Defines properties for the cluster. The following properties are
  available: +
  `GMS_DISCOVERY_URI_LIST`;;
    The locations of \{product---name} instances in the cluster to use
    for discovering the cluster. This property is required only if the
    Group Management Service (GMS) is not using multicast for
    broadcasting messages. +
    Valid values for this property are as follows: +
    * A comma-separated list of uniform resource identifiers (URIs).
    Each URI must locate a \{product---name} instance or the DAS. This
    format is required if multiple \{product---name} instances are
    running on the same host. +
    The format of each URI in the list is as follows: +
    scheme`://`host-name-or -IP-address`:`port
    ** scheme is the URI scheme, which is `tcp`.
    ** host-name-or -IP-address is the host name or IP address of the
    host on which the instance is running.
    ** port is the port number of the port on which the instance listens
    for messages from GMS. The system property
    `GMS_LISTENER_PORT-`clustername must be set for the instance. For
    information about how to set this system property for an instance,
    see "link:../ha-administration-guide/clusters.html#GSHAG00373[Discovering a Cluster When Multicast Transport
    Is Unavailable]" in GlassFish Server Open Source Edition High
    Availability Administration Guide.
    * A comma-separated list of IP addresses or host names on which the
    DAS or the instances are running. The list can contain a mixture of
    IP addresses and host names. This format can be used only if one
    clustered instance is running on each host. The value of the
    `GMS_LISTENER_PORT` property must be unique for each cluster in a
    domain.
    * The keyword `generate`. This format can be used only if one
    instance in a cluster is running on each host and the DAS is running
    on a separate host. Multiple instances on the same host cannot be
    members of the same cluster. The value of the `GMS_LISTENER_PORT`
    property must be unique for each cluster in a domain.
  `GMS_LISTENER_PORT`;;
    The port number of the port on which the cluster listens for
    messages from GMS. +
    The default value is a reference to the
    `GMS_LISTENER_PORT-`cluster-name system property. By default, this
    system property is not set. In this situation, GMS selects a free
    port from the range that is defined by the properties
    `GMS_TCPSTARTPORT` and `GMS_TCPENDPORT`. By default, this range is
    9090-9200. In most situations, the default behavior should suffice. +
    However, if GMS is not using multicast for broadcasting messages,
    the `GMS_LISTENER_PORT` property must specify a port number that is
    valid for all \{product---name} instances in the cluster. To use the
    default value to meet this requirement, use a system property to set
    the port number individually for each instance. +
    For example, use the `create-system-properties` subcommand to create
    the system property `GMS_LISTENER_PORT-`cluster-name for the DAS.
    Then, for each instance in the cluster, set the
    `GMS_LISTENER_PORT-`cluster-name system property to the port number
    on which the instance listens for messages from GMS. The default
    value of the `GMS_LISTENER_PORT` property for the cluster references
    this system property.
  `GMS_LOOPBACK`;;
    Specifies whether an instance may receive from itself
    application-level messages that the instance broadcasts to the
    cluster. +
    Possible values are as follows:::
    `false`::
      The instance may not receive messages from itself (default).
    `true`::
      The instance may receive messages from itself. Use this setting
      for testing an instance when the instance is the only instance in
      a cluster.
  `GMS_MULTICAST_TIME_TO_LIVE`;;
    The maximum number of iterations or transmissions that a multicast
    message for the following types of events can experience before the
    message is discarded: +
    * Group discovery
    * Member heartbeats
    * Membership changes +
    To match the configuration of the network on which the DAS and
    clustered instances are deployed, set this value as low as possible.
    To determine the lowest possible value for your system, use the
    link:validate-multicast.html#validate-multicast-1[`validate-multicast`(1)]
    subcommand. +
    A value of 0 ensures that multicast messages never leave the host
    from which they are broadcast. +
    A value of 1 might prevent the broadcast of messages between hosts
    on same subnet that are connected by a switch or a router. +
    The default is 4, which ensures that messages are successfully
    broadcast to all cluster members in networks where hosts are
    connected by switches or routers.
  `GMS_TCPENDPORT`;;
    The highest port number in the range from which GMS selects a free
    port if the `GMS_LISTENER_PORT-`cluster-name system property is not
    set. The default is 9200.
  `GMS_TCPSTARTPORT`;;
    The lowest port number in the range from which GMS selects a free
    port if the `GMS_LISTENER_PORT-`cluster-name system property is not
    set. The default is 9090.
`--gmsenabled`::
  Specifies whether GMS is enabled for the cluster. +
  Possible values are as follows: +
  `true`;;
    GMS is enabled for the cluster (default). +
    When GMS is enabled for a cluster, GMS is started in each server
    instance in the cluster and in the DAS. The DAS participates in each
    cluster for which this option is set to `true`.
  `false`;;
    GMS is disabled for the cluster.
`--multicastaddress`::
  The address on which GMS listens for group events. This option must
  specify a multicast address in the range 224.0.0.0 through
  239.255.255.255. The default is 228.9.XX.YY, where XX and YY are
  automatically generated independent values between 0 and 255.
`--multicastport`::
  The port number of communication port on which GMS listens for group
  events. This option must specify a valid port number in the range
  2048-49151. The default is an automatically generated value in this
  range.
`--bindaddress`::
  The Internet Protocol (IP) address of the network interface to which
  GMS binds. This option must specify the IP address of a local network
  interface. The default is all public network interface addresses. +
  On a multihome machine, this option configures the network interface
  that is used for the GMS. A multihome machine possesses two or more
  network interfaces. +
  To specify an address that is valid for all \{product---name}
  instances in the cluster, use a system property to set the address
  individually for each instance. +
  For example, use the `create-system-properties` subcommand to create
  the system property `GMS-BIND-INTERFACE-ADDRESS-`cluster-name. Then
  set the `--bindaddress` option of this subcommand to
  `${GMS-BIND-INTERFACE-ADDRESS-`cluster-name`}` to specify the system
  property. Finally, for each instance in the cluster, set the
  `GMS-BIND-INTERFACE-ADDRESS-`cluster-name system property to the
  required network interface address on the instance's machine.
`--hosts`::
  Do not specify this option. This option is retained for compatibility
  with earlier releases. If you specify this option, a syntax error does
  not occur. Instead, the subcommand runs successfully and displays a
  warning message that the option is ignored.
`--haagentport`::
  Do not specify this option. This option is retained for compatibility
  with earlier releases. If you specify this option, a syntax error does
  not occur. Instead, the subcommand runs successfully and displays a
  warning message that the option is ignored.
`--haadminpassword`::
  Do not specify this option. This option is retained for compatibility
  with earlier releases. If you specify this option, a syntax error does
  not occur. Instead, the subcommand runs successfully and displays a
  warning message that the option is ignored.
`--haadminpasswordfile`::
  Do not specify this option. This option is retained for compatibility
  with earlier releases. If you specify this option, a syntax error does
  not occur. Instead, the subcommand runs successfully and displays a
  warning message that the option is ignored.
`--devicesize`::
  Do not specify this option. This option is retained for compatibility
  with earlier releases. If you specify this option, a syntax error does
  not occur. Instead, the subcommand runs successfully and displays a
  warning message that the option is ignored.
`--haproperty`::
  Do not specify this option. This option is retained for compatibility
  with earlier releases. If you specify this option, a syntax error does
  not occur. Instead, the subcommand runs successfully and displays a
  warning message that the option is ignored.
`--autohadb`::
  Do not specify this option. This option is retained for compatibility
  with earlier releases. If you specify this option, a syntax error does
  not occur. Instead, the subcommand runs successfully and displays a
  warning message that the option is ignored.
`--portbase`::
  Do not specify this option. This option is retained for compatibility
  with earlier releases. If you specify this option, a syntax error does
  not occur. Instead, the subcommand runs successfully and displays a
  warning message that the option is ignored.

[[sthref150]]

Operands

cluster-name::
  The name of the cluster. +
  The name must meet the following requirements: +
  * The name may contain only ASCII characters.
  * The name must start with a letter, a number, or an underscore.
  * The name may contain only the following characters:
  ** Lowercase letters
  ** Uppercase letters
  ** Numbers
  ** Hyphen
  ** Period
  ** Underscore
  * The name must be unique in the domain and must not be the name of
  another cluster, a named configuration, a \{product---name} instance,
  or a node.
  * The name must not be `domain`, `server`, or any other keyword that
  is reserved by \{product---name}. +
  If the
  link:configure-jms-cluster.html#configure-jms-cluster-1[`configure-jms-cluster`(1)]
  subcommand is to be used to configure a Message Queue cluster to
  provide JMS services to the \{product---name} cluster, the length of
  the \{product---name} cluster name is might be restricted: +
  * If `clustertype` is set to `enhanced` in the
  link:configure-jms-cluster.html#configure-jms-cluster-1[`configure-jms-cluster`(1)]
  subcommand, the name can be no longer than n–21 characters, where n is
  the maximum table name length allowed by the database.
  * If `configstoretype` is set to `shareddb` in the
  link:configure-jms-cluster.html#configure-jms-cluster-1[`configure-jms-cluster`(1)]
  subcommand, the name can be no longer than n–19 characters, where n is
  the maximum table name length allowed by the database.

[[sthref151]]

Examples

[[GSRFM462]][[sthref152]]

Example 1   Creating a Cluster

This example creates a cluster that is named `ltscluster` for which port
1169 is to be used for secure IIOP connections. Because the `--config`
option is not specified, the cluster references a copy of the named
configuration `default-config` that is named `ltscluster-config`.

[source,oac_no_warn]
----
asadmin> create-cluster 
--systemproperties IIOP_SSL_LISTENER_PORT=1169 
ltscluster
Command create-cluster executed successfully.
----

[[GSRFM463]][[sthref153]]

Example 2   Creating a Cluster With a List of URIs for Discovering the
Cluster

This example creates a cluster that is named `tcpcluster`. In this
example, GMS is not using multicast for broadcasting messages and
multiple instances reside on the same host. Therefore, the
`GMS_DISCOVERY_URI_LIST` property is set to the locations of the
\{product---name} instances to use for discovering the cluster. These
instances reside on the host whose IP address is `10.152.23.224` and
listen for GMS events on ports 9090, 9091, and 9092.

To distinguish colon (`:`) characters in URIs from separators in a
property list, colons in URIs are escaped with single quote characters
(`'`) and backslash (`\`) characters. For more information about escape
characters in options for the `asadmin` utility, see the
link:asadmin.html#asadmin-1m[`asadmin`(1M)] help page.

This example assumes that the port on which each instance listens for
GMS messages is set independently for the instance through the
`GMS_LISTENER_PORT-tcpcluster` system property. For information about
how to set the port on which an instance listens for GMS messages, see
"link:../ha-administration-guide/clusters.html#GSHAG00373[Discovering a Cluster When Multicast Transport Is
Unavailable]" in GlassFish Server Open Source Edition High Availability
Administration Guide.

[source,oac_no_warn]
----
asadmin> create-cluster --properties GMS_DISCOVERY_URI_LIST=
tcp'\\:'//10.152.23.224'\\:'9090,
tcp'\\:'//10.152.23.224'\\:'9091,
tcp'\\:'//10.152.23.224'\\:'9092 tcpcluster
Command create-cluster executed successfully.
----

[[GSRFM827]][[sthref154]]

Example 3   Creating a Cluster With a List of IP Addresses for
Discovering the Cluster

This example creates a cluster that is named `ipcluster`. In this
example, GMS is not using multicast for broadcasting messages and only
one clustered instance resides on each host. Therefore, the
`GMS_DISCOVERY_URI_LIST` property is set to the IP addresses of the
hosts where instances to use for discovering the cluster are running.
The cluster listens for messages from GMS on port 9090.

[source,oac_no_warn]
----
asadmin> create-cluster --properties 'GMS_DISCOVERY_URI_LIST=
10.152.23.225,10.152.23.226,10.152.23.227,10.152.23.228:
GMS_LISTENER_PORT=9090' ipcluster
Command create-cluster executed successfully.
----

[[GSRFM828]][[sthref155]]

Example 4   Creating a Cluster With a Generated List of Instances for
Discovering the Cluster

This example creates a cluster that is named `gencluster`. In this
example, GMS is not using multicast for broadcasting messages, one
instance in the cluster is running on each host and the DAS is running
on a separate host. Therefore, the `GMS_DISCOVERY_URI_LIST` property is
set to the keyword `generate` to generate a list of instances to use for
discovering the cluster. The cluster listens for messages from GMS on
port 9090.

[source,oac_no_warn]
----
asadmin> create-cluster --properties 'GMS_DISCOVERY_URI_LIST=generate:
GMS_LISTENER_PORT=9090' gencluster
Command create-cluster executed successfully.
----

[[sthref156]]

Exit Status

0::
  command executed successfully
1::
  error in executing the command

[[sthref157]]

See Also

link:asadmin.html#asadmin-1m[`asadmin`(1M)]

link:create-application-ref.html#create-application-ref-1[`create-application-ref`(1)],
link:create-instance.html#create-instance-1[`create-instance`(1)],
link:create-jdbc-resource.html#create-jdbc-resource-1[`create-jdbc-resource`(1)],
link:create-local-instance.html#create-local-instance-1[`create-local-instance`(1)],
link:create-resource-ref.html#create-resource-ref-1[`create-resource-ref`(1)],
link:delete-cluster.html#delete-cluster-1[`delete-cluster`(1)],
link:delete-instance.html#delete-instance-1[`delete-instance`(1)],
link:delete-local-instance.html#delete-local-instance-1[`delete-local-instance`(1)],
link:deploy.html#deploy-1[`deploy`(1)],
link:list-clusters.html#list-clusters-1[`list-clusters`(1)],
link:start-cluster.html#start-cluster-1[`start-cluster`(1)],
link:stop-cluster.html#stop-cluster-1[`stop-cluster`(1)],
link:validate-multicast.html#validate-multicast-1[`validate-multicast`(1)]

"link:../ha-administration-guide/clusters.html#GSHAG00373[Discovering a Cluster When Multicast Transport Is
Unavailable]" in GlassFish Server Open Source Edition High Availability
Administration Guide

Apache Felix Remote Shell
(http://felix.apache.org/site/apache-felix-remote-shell.html), Java
Platform Debugger Architecture (JPDA)
(http://www.oracle.com/technetwork/java/javase/tech/jpda-141715.html)


