Visit Azul.com Support

Configuring Optimizer Hub Host

As an Optimizer Hub administrator, you must provide users the DNS name or IP:PORT of the Optimizer Hub service or the load balancer the JVMs must connect to. The JVMs need this for the value to be specified in the -XX:OptHubHost=<value> option.

We highly recommend using a load-balanced setup, configured with a DNS address, that redirects requests from JVMs to one or more Optimizer Hub services.

Host for Single Optimizer Hub service

In a setup with a single Optimizer Hub service, you can either use the included gw-proxy component, or add your own load balancer.

Using your Own Load Balancer

It’s recommended to use your own preferred load balancer, consistent with how you dispatch HTTP traffic to your other applications. In such a case, disable gw-proxy in Optimizer Hub and use your own instance, by adding the following to your values-override.yaml file:

 
$ gwProxy.enabled=false

Your load balancer must be aware of gRPC calls and avoid affinity to a single gateway and not interrupt long calls.

If you correctly defined the load-balancer in values-override.yaml as described in Installing Optimizer Hub, you can discover the external IP of the service using the following command:

 
$ kubectl describe service gateway -n my-opthub | grep 'LoadBalancer Ingress:' LoadBalancer Ingress: internal-add1ff3e1591e4f93a49af3523b68e3b-1321158844.us-west-2.elb.amazonaws.com

JVM customers then connect using the following command:

 
java -XX:OptHubHost=internal-add1ff3e1591e4f93a49af3523b68e3b-1321158844.us-west-2.elb.amazonaws.com \ -XX:+EnableRNO \ -jar my-app.jar

Using the Included gw-proxy

Note
We recommend using your own load balancer.

The gw-proxy pod which is deployed in the Optimizer Hub namespace is the default load balancer. It uses Envoy as the default gRPC proxy for optimal session balancing. You can find the endpoint of gw-proxy using the following steps:

  1. Run the following command:

     
    kubectl -n my-opthub get services
  2. Look for the gateway service and note the ports corresponding to port 50051 inside the container. This is the port to use for connecting VMs to this Optimizer Hub cluster.

     
    service/gateway NodePort 10.233.15.55 <none> 8080:31951/TCP,50051:30926/TCP 52d

    In this example the port is 30926.

    Note
    Only the internal ports 8080 and 50051 in Optimizer Hub are fixed. The port in each setup is a random value. You need to use this lookup to find the port of your Optimizer Hub instance.
  3. Run the kubectl get nodes command and note the IP address or name of any node.

  4. Concatenate node IP with service ports to get something like 10.22.20.131:30926. Do not prefix it with http://.

  5. JVM customers set -XX:OptHubHost=host:port flag to the port mapped to 50051.

     
    java -XX:OptHubHost=10.22.20.131:30926 \ -XX:+EnableRNO \ -jar my-app.jar

Host for High Availability and Failover

When you have multiple Optimizer Hub services to guarantee high availability (HA) and provide a failover system, you can use the following approaches.

  • Use a (DNS) load balancer of your choice, e.g. Route 53.

  • Use the readiness state of each Optimizer Hub service by using the Kubernetes check available on /q/health.

  • Configure your (DNS) load balancer with the host info of each Optimizer Hub service.