January 26, 2016

Classes
Tags blog

Getting started with the SLCLI and Load Balancers

Load Balancing is a way to distribute processing and communications evenly across multiple servers within a data center

Load Balancing is a way to distribute processing and communications evenly across multiple servers within a data center so that a single device does not carry an entire load. SoftLayer Load Balancing enables customers to employ a variety of balancing methods to distribute traffic, including persistent and non-persistent options, that can be changed, activated and deactivated at any time. Today we are going to look at how to use the Python slcli client to manage your SoftLayer Local Load balancers.

Load Balancer details

To obtain information about our load balancer we will use the detail command. This will provide us with a good overview of the basic configuration of our load balancer.

$ slcli --format=raw loadbal detail local:123456 General properties ---------- ID local:123456 IP Address 172.20.31.30 Datacenter hou02 Connections limit 250 Dedicated False HA False SSL Enabled True SSL Active False

Adding new service groups

A Service Group is used to specify the type of traffic we want to distribute between our various servers. The current options are HTTP, DNS, FTP, HTTPS, TCP, and UDP. A service group will also determine the Balancing Methods or routing-methods we will use to balance our traffic. The routing-type and routing method take integer arguments which can be obtained using slcli loadbal routing-types and slcli loadbal routing-methods respectively.

In the following example we are setting up a 50/50 allocation group to balance both HTTP (routing type 2 using Round Robin) and FTP (routing type 3 using Consistent Hash IP).

$ slcli loadbal group-add --allocation 50 --port 80 --routing-type 2 --routing-method 10 local:123456 Load balancer service group is being added!

$ slcli loadbal group-add –allocation 50 –port 21 –routing-type 5 –routing-method 21 local:123456 Load balancer service group is being added!

Adding services to an existing group

In order to add a service to an existing group we need 2 pieces of information: the Service Group ID and the ID of the health check we want to set up for the service. We can get the health check ID with the command slcli loadbal health-checks

$ slcli loadbal health-checks 1 TCP 2 HTTP 3 DNS 4 Ping 5 HTTP-CUSTOM 21 Default To set up an new service to balance port 80 on the server 172.16.0.1 we set the healthcheck-type to 2 and pass the `--enabled` flag. $ slcli loadbal service-add 123456:222089 --enabled --port 80 --weight 1 --healthcheck-type 2 --ip-address 172.16.0.1 Load balancer service is being added!

$ slcli –format=raw loadbal detail local:123456 General properties ———- ID local:123456 IP Address 172.20.31.30 Datacenter hou02 Connections limit 250 Dedicated False HA False SSL Enabled True SSL Active False Service group 1 ************** Group Properties 123456:222089 21 50 % 3:TCP 10:Round Robin Services 123456:428745 172.16.0.1 80 2:HTTP 1 1 UP Service group 2 ************** Group Properties 123456:222087 80 50 % 2:HTTP 10:Round Robin Services None

Toggle service

We can quick enable and disable a service using the service-toggle option and specifying the service ID:

$ slcli loadbal service-toggle 123456:428745 This action will toggle the status on the service. Continue? [y/N]: y Load balancer service 123456:428745 status updated!

When we check the details of the Load Balancer again we can see that the Enabled flag is now set to 0 (Disabled). $ slcli –format=raw loadbal detail local:124185|grep ‘123456:428745’ Services 124185:436345 172.0.6.1 80 2:HTTP 10 0

Service delete

$ slcli loadbal service-delete 124185:428745 This action will cancel a service from your load balancer. Continue? [y/N]: y Load balancer service 428745 is being cancelled!

Service group delete

$ slcli loadbal group-delete 124185:222089 This action will cancel a service group. Continue? [y/N]: y Service group 124185:222089 is being deleted!

Feedback?

If this article contains any error, or leaves any of your questions unanswered, please help us out by opening up a github issue.
Open an issue