You can configure multiple API Gateway environments that publish to a single API Store. It helps you distribute the API Gateway load to multiple nodes and also gives you some logical separation (e.g., production vs sandbox) between the APIs in the API Store. Once you publish an API through multiple Gateway environments, the APIs in the API Store will have different server hosts and ports.
The steps below explain how to configure and publish to multiple Gateways. In In this guide, we set up 3 API Manager instances in the same server. In a typical production environment, the Gateways will ideally be in separate servers.
- Instance 1: Acts as the node that provides the API Publisher, Store and the Key Manager functionality.
- Instance 2: Acts as a production Gateway node.
- Instance 3: Acts as a sandbox Gateway node.
- Copy the API Manager product pack in 3 separate folders.
Let's add offsets to the default ports of the two Gateway instances. A port offset ensures that there are no port conflicts when more than one WSO2 products run on the same server. Open the
<APIM_HOME>/repository/conf/carbon.xml
file in the second API Manager instance and add an offset of 1 to its default port. This increments its default server port, which is 9443, by 1.Code Block <Offset>1</Offset>
Open the
<APIM_HOME>/repository/conf/carbon.xml
file in the third API Manager instance and add an offset of 2 to its default port. This increments its default server port, which is 9443, by 2.Code Block <Offset>2</Offset>
The thrift server should be disabled in the two Gateway instances.
Open the
<APIM_HOME>/repository/conf/api-manager.xml
files in the second and the third API Manager instances and set the<EnableThriftServer>
property to false. For example:Code Block <EnableThriftServer>false</EnableThriftServer>
The two Gateway instances need to communicate with the Key Manager in the first API Manager instance.
Open the
<APIM_HOME>/repository/conf/api-manager.xml
files in the first and the second Gateway instances and change the following:Code Block <AuthManager> <ServerURL>https://<IP of the first instance>:9443/services/</ServerURL> <Username>admin</Username> <Password>admin</Password> ... </AuthManager> ... <APIKeyValidator> <ServerURL>https://<IP of the first instance>:9443/services/</ServerURL> <Username>admin</Username> <Password>admin</Password> .... <RevokeAPIURL>https://<IP of the first instance>:8243/revoke</RevokeAPIURL> </APIKeyValidator>
You are done configuring the two API Gateway instances. Let's point to them from the first instance.
Open the
<APIM_HOME>/repository/conf/api-manager.xml
file in the first API Manager instance, add two API Gateway environments under the<Environments>
element and delete the<environment>
that comes by default. For example:Code Block language xml <Environments> <Environment type="production"> <Name>Production Gateway</Name> <Description>Production Gateway Environment</Description> <ServerURL>https://localhost:9444/services/</ServerURL> <Username>admin</Username> <Password>admin</Password> <GatewayEndpoint>http://localhost:8281,https://localhost:8244</GatewayEndpoint> </Environment> <Environment type="sandbox"> <Name>Sandbox Gateway</Name> <Description>Sandbox Gateway Environment</Description> <ServerURL>https://localhost:9445/services/</ServerURL> <Username>admin</Username> <Password>admin</Password> <GatewayEndpoint>http://localhost:8282,https://localhost:8245</GatewayEndpoint> </Environment> </Environments>
Tip Tip: The Gateway environment names must be unique.
- Start all instances.
- Log in to the API Publisher (first instance) and choose to edit an API.
- Navigate to the Manage tab, expand the Gateway Environments section and note that the two Gateway environments listed there.
In a typical production setup, you will publish the API to the sandbox Gateway first and then publish it to the production Gateway. In this case, let's publish to both. - Select both Gateways and Save and Publish the API.
- Log in to the API Store (of the first instance) and select click the API to open it.
- In the API's Overview tab, note that it has two sets if URLs for the two Gateway instances:
...