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 {productName} cluster

[[sthref147]]

=== Synopsis

[source]
----
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 {productName} cluster.
Initially the cluster contains no {productName} 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 {productName} 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 {productName} instance or the DAS. This
    format is required if multiple {productName} 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 {productName} 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 {productName}
  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 {productName} instance,
  or a node.
  * The name must not be `domain`, `server`, or any other keyword that
  is reserved by {productName}. +
  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 {productName} cluster, the length of
  the {productName} 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]
----
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
{productName} 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]
----
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]
----
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]
----
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)


