Create a NATS cluster
This section describes the creation of a NATS cluster with servers located on different hosts. This way, messages published on one server will be routed and received by a subscriber on another server. The following example shows a cluster comprised of two instances, follow these instructions:
- Launch as much NATS instances as nodes you want to have in the cluster. (In this example, two instances). Note the IP addresses of both instances.
- Connect their Virtual Private Clouds (VPCs) by configuring VPC Network Peering.
- Open the port 6222 in both servers.
Now, it is time to configure, on the first instance, the IP address it needs to listen on for connections from the second instance, and vice versa:
-
In the /opt/bitnami/nats/conf/nats-server.conf file, navigate to the “Clustering multiple servers together” section and modify those lines as shown below.
You must set a password (PASSWORD_SERVER1) to authorize route connections. In the example below, remember to replace PASSWORD_SERVER2 with the password you will define in the /opt/bitnami/nats/conf/nats-server.conf file of the second instance, and IP_ADDRESS_SERVER2 with the IP address of that instance.
# Clustering multiple servers together. Disabled by default. cluster { listen: 0.0.0.0:6222 # host/port for inbound route connections # Authorization for route connections authorization { user: nats pass: PASSWORD_SERVER1 timeout: 2 } # Routes are actively solicited and connected to from this server. # Other servers can connect to us if they supply the correct credentials # in their routes definitions from above routes = [nats://nats:PASSWORD_SERVER2@IP_ADDRESS_SERVER2:6222] }
Configure the second NATS instance
-
On the second instance, edit the /opt/bitnami/nats/conf/nats-server.conf file and set a password (PASSWORD_SERVER2) to authorize route connections.
In this case replace the PASSWORD_SERVER1 with the password you have defined in the /opt/bitnami/nats/conf/nats-server.conf file of the first server, and IP_ADDRESS_SERVER1 with the IP address of that instance. That way, the communication between instances will be bi-directional:
# Clustering multiple servers together. Disabled by default. cluster { listen: 0.0.0.0:6222 # host/port for inbound route connections # Authorization for route connections authorization { user: nats pass: PASSWORD_SERVER2 timeout: 2 } # Routes are actively solicited and connected to from this server. # Other servers can connect to us if they supply the correct credentials # in their routes definitions from above routes = [nat://nats:PASSWORD_SERVER1@IP_ADDRESS_SERVER1:6222]
-
To check if the cluster is working, use the client on the second instance to listen the message as shown below. Replace PASSWORD with the password displayed in the “Authorization for client connections” line of the second instance’s /opt/bitnami/nats/conf/nats-server.conf file.
$ nats-echo -s nats://nats:PASSWORD@127.0.0.1:4222 SomeSubject Connected to NATS server: nats://127.0.0.1:4222
-
Use a client on the first instance to send a message. Replace PASSWORD with the default password displayed in the “Authorization for client connections” line of the first instance’s configuration file (/opt/bitnami/nats/conf/nats-server.conf).
NOTE: Check the Connect to NATS page to learn how to use a Golang client to write a simple NATS client.
$ nats-pub -s nats://nats:PASSWORD@127.0.0.1:4222 -reply Hi SomeSubject "Hi everyone" Connected to NATS server: nats://127.0.0.1:4222 Published [SomeSubject] : 'Hi everyone'
-
On the second instance, you should see a confirmation that the subscriber is receiving the messages:
... Listening on [SomeSubject] Received message 'Hi everyone'
Congratulations, you have just scaled your NATS solution!