A GitHub Enterprise cluster must be set up with a license and initialized using the administrative shell (SSH).

Installing GitHub Enterprise

  1. On each cluster node, provision and install GitHub Enterprise. For more information, see "Setting up a GitHub Enterprise instance."
  2. Using the administrative shell or DHCP, only configure the IP address of each node. Don't configure any other settings.

Configuring the first node

  1. Connect to the node that will be designated as the mysql-master in cluster.conf. For more information, see “About the cluster configuration file".
  2. In your web browser, visit https://<ip address>:8443/setup/.
  3. At the prompt, upload your license file and set a management console password. For more information, see "License files."

  4. In the Management Console, configure and save your desired settings.

  5. The instance will restart automatically.

Initializing the cluster

To initialize the cluster, you need a cluster configuration file (cluster.conf). For more information, see “About the cluster configuration file".

  1. From the first node that was configured, run ghe-cluster-config-init. This will initialize the cluster if there are nodes in the cluster configuration file that are not configured.
  2. Run ghe-cluster-config-apply. This will validate the cluster.conf file, apply the configuration to each node file and bring up the configured services on each node.

To check the status of a running cluster use the ghe-cluster-status command.

About the cluster configuration file

The cluster configuration file (cluster.conf) defines the nodes in the cluster, and what services they run. For more information, see "About cluster nodes".

This example cluster.conf defines a cluster with five nodes.

  • Two nodes (called ghe-app-node-\*) run the web-server and job-server services responsible for responding to client requests.
  • Three nodes (called ghe-data-node-\*) run the services responsible for storage and retrieval of GitHub Enterprise data.

The names of the nodes can be any valid hostname you choose. The names are set as the hostname of each node, and will also be added to /etc/hosts on each node, so that the nodes are locally resolvable to each other.

Specify the first cluster node you configured as the MySQL master via mysql-server and mysql-master.

[cluster]
  mysql-master = ghe-data-node-1
  redis-master = ghe-data-node-1
[cluster "ghe-app-node-1"]
  hostname = ghe-app-node-1
  ipv4 = 192.168.0.2
  # ipv6 = fd12:3456:789a:1::2
  web-server = true
  job-server = true
[cluster "ghe-app-node-2"]
  hostname = ghe-app-node-2
  ipv4 = 192.168.0.3
  # ipv6 = fd12:3456:789a:1::3
  web-server = true
  job-server = true
[cluster "ghe-data-node-1"]
  hostname = ghe-data-node-1
  ipv4 = 192.168.0.4
  # ipv6 = fd12:3456:789a:1::4
  git-server = true
  pages-server = true
  mysql-server = true
  elasticsearch-server = true
  redis-server = true
  memcache-server = true
  metrics-server = true
  storage-server = true
[cluster "ghe-data-node-2"]
  hostname = ghe-data-node-2
  ipv4 = 192.168.0.5
  # ipv6 = fd12:3456:789a:1::5
  git-server = true
  pages-server = true
  mysql-server = true
  elasticsearch-server = true
  redis-server = true
  memcache-server = true
  metrics-server = true
  storage-server = true
[cluster "ghe-data-node-3"]
  hostname = ghe-data-node-3
  ipv4 = 192.168.0.6
  # ipv6 = fd12:3456:789a:1::6
  git-server = true
  pages-server = true
  mysql-server = true
  elasticsearch-server = true
  redis-server = true
  memcache-server = true
  metrics-server = true
  storage-server = true

Create the file /data/user/common/cluster.conf on the configured first node. For example, using vim:

ghe-data-node-1:~$ sudo vim /data/user/common/cluster.conf