{"id":3149,"date":"2016-10-27T17:18:16","date_gmt":"2016-10-27T21:18:16","guid":{"rendered":"https:\/\/www.globo.tech\/learning-center\/?p=3149"},"modified":"2017-11-24T16:31:48","modified_gmt":"2017-11-24T21:31:48","slug":"ha-load-balancing-keepalived-ubuntu-16","status":"publish","type":"post","link":"https:\/\/www.globo.tech\/learning-center\/ha-load-balancing-keepalived-ubuntu-16\/","title":{"rendered":"How to Achieve High Availability Load Balancing with Keepalived on Ubuntu 16"},"content":{"rendered":"<h1>How to Achieve High Availability Load Balancing with Keepalived on Ubuntu 16<\/h1>\n<p><a rel=\"nofollow\" href=\"http:\/\/www.keepalived.org\/\" target=\"_blank\">Keepalived<\/a> is a daemon that can be used to drive a number of load balancing processes on Linux Virtual Servers (LVS) to maintain high availability. Load balancers enable two or more identical servers to provide service through a single floating IP address or set of IP addresses. When one or more of the servers is not functioning optimally, keepalived can shift more of the load to those servers that are more healthy. Perhaps the simplest configuration for the keepalived load balancer uses the daemon to maintain high availability by implementing the failover service. During failover, the entire load is shifted from a primary server to a secondary server upon failure of the primary. The present tutorial describes the implementation of such a highly-available load balancer setup based on Ubuntu 16.04 and keepalived. In this tutorial, we will configure the load balancers using a &#8220;floating IP&#8221; and an active\/passive redundancy.<\/p>\n<h2>Getting Started<\/h2>\n<p>In order to follow this guide you will need to have the following in place:<br \/>\n\u2022 Two servers (<a href=\"https:\/\/www.globo.tech\/cloud-server-pricing\" target=\"_blank\"><b>Cloud Server<\/b><\/a> or <a href=\"http:\/\/www.globo.tech\/dedicated-server-hosting\" target=\"_blank\"><b>Dedicated Server<\/b><\/a>), each running a fresh installation of Ubuntu 16.04. We will call these servers LB1 and LB2 below<br \/>\n\u2022 Root access to the nodes<\/p>\n<h2>Tutorial<\/h2>\n<p>For your reference, here are the servers, or load balancers, we&#8217;ll be working with, along with their respective public and private IP addresses. Where necessary, remember to replace with the IP addresses for your own servers.<\/p>\n<p>LB1<br \/>\nPublic:173.209.49.66<br \/>\nPrivate:10.119.0.1<\/p>\n<p>LB2<br \/>\nPublic:173.209.49.67<br \/>\nPrivate:10.119.0.2<\/p>\n<p>The load balancers will make use of a &#8220;floating IP&#8221;, and we&#8217;ll configure active and passive redundancy as well.<\/p>\n<p>Floating<br \/>\nPublic:173.209.49.70<br \/>\nPrivate:10.119.0.10<\/p>\n<h2>Tutorial<\/h2>\n<p>Your first step when you install any software is to make sure your system is up to date by executing the following commands.<\/p>\n<p><code>apt-get update<br \/>\napt-get -y upgrade<\/code><\/p>\n<p>The update ensures you will install the most recent (stable) packages available. The upgrade will install the most recent security patches and fixes.<\/p>\n<p>Ubuntu\u2019s firewall will have to be re-configured to allow for the configuration changes made to run keepalived. So, once your system has been updated disable Ubuntu\u2019s firewall.<\/p>\n<p><code>ufw disable<\/code><\/p>\n<p>You are now ready to install keepalived and the necessary dependencies:<\/p>\n<p><code>apt-get install linux-headers-$(uname -r) keepalived<\/code><\/p>\n<p><strong>Startup Keepalived on Boot<\/strong><\/p>\n<p>With keepalived installed, configure the server so that the daemon activates on boot. You will also need to enable the ipvsadm kernel module, which provides key underlying functionality keepalived uses for load balancing.<\/p>\n<p><code>systemctl enable keepalived<br \/>\nmodprobe ip_vs<\/code><\/p>\n<p><strong>Configure Keepalived<\/strong><\/p>\n<p>Create the keepalived configuration file folder on both servers:<\/p>\n<p><code>echo \"\" > \/etc\/keepalived\/keepalived.conf<br \/>\nnano \/etc\/keepalived\/keepalived.conf<\/code><\/p>\n<p>We will now set up keepalived so that it will use the Virtual Router Redundancy Protocol (VRRP) to determine when LB1 or LB2 should be the active router based on the health of LB1. To implement this step you will need to create and save the following script to your keepalived folder on LB1:<\/p>\n<p><code class=\"gris\">vrrp_instance VI_LOCAL {<br \/>\n        interface eth1<br \/>\n        state MASTER<br \/>\n        virtual_router_id 51<br \/>\n        priority 101<br \/>\n        virtual_ipaddress {<br \/>\n                10.119.0.10<br \/>\n        }<br \/>\n        track_interface {<br \/>\n                eth0<br \/>\n                eth1<br \/>\n        }<br \/>\n}<br \/>\nvrrp_instance VI_PUB {<br \/>\n        interface eth0<br \/>\n        state MASTER<br \/>\n        virtual_router_id 52<br \/>\n        priority 101<br \/>\n        virtual_ipaddress {<br \/>\n                173.209.49.70<br \/>\n        }<br \/>\n        track_interface {<br \/>\n                eth0<br \/>\n                eth1<br \/>\n        }<br \/>\n}<br \/>\nvirtual_server 173.209.49.70 443 {<br \/>\n        delay_loop 4<br \/>\n        lb_algo sh      # source hash<br \/>\n        lb_kind NAT<br \/>\n        protocol TCP<br \/>\n        real_server 10.119.0.100 443 {<br \/>\n                weight 1<br \/>\n                TCP_CHECK {<br \/>\n                        connect_timeout 15<br \/>\n                        nb_get_retry 3<br \/>\n                        delay_before_retry 2<br \/>\n                }<br \/>\n        }<br \/>\n        real_server 10.119.0.101 443 {<br \/>\n                weight 1<br \/>\n                TCP_CHECK {<br \/>\n                        connect_timeout 15<br \/>\n                        nb_get_retry 3<br \/>\n                        delay_before_retry 2<br \/>\n                }<br \/>\n        }<br \/>\n}<br \/>\nvirtual_server 173.209.49.70 80 {<br \/>\n        delay_loop 4<br \/>\n        lb_algo wrr      # weighted round robin<br \/>\n        lb_kind NAT<br \/>\n        protocol TCP<br \/>\n        real_server 10.119.0.100 80 {<br \/>\n                weight 1<br \/>\n                TCP_CHECK {<br \/>\n                        connect_timeout 15<br \/>\n                        nb_get_retry 3<br \/>\n                        delay_before_retry 2<br \/>\n                }<br \/>\n        }<br \/>\n        real_server 10.119.0.101 80 {<br \/>\n                weight 1<br \/>\n                TCP_CHECK {<br \/>\n                        connect_timeout 15<br \/>\n                        nb_get_retry 3<br \/>\n                        delay_before_retry 2<br \/>\n                }<br \/>\n        }<br \/>\n}<\/code><\/p>\n<p>and create and save the following script to your keepalived folder on LB2: <\/p>\n<p><code class=\"gris\">vrrp_instance VI_LOCAL {<br \/>\n        interface eth1<br \/>\n        state BACKUP<br \/>\n        virtual_router_id 51<br \/>\n        priority 100<br \/>\n        virtual_ipaddress {<br \/>\n                10.119.0.10<br \/>\n        }<br \/>\n        track_interface {<br \/>\n                eth0<br \/>\n                eth1<br \/>\n        }<br \/>\n}<br \/>\nvrrp_instance VI_PUB {<br \/>\n        interface eth0<br \/>\n        state BACKUP<br \/>\n        virtual_router_id 52<br \/>\n        priority 100<br \/>\n        virtual_ipaddress {<br \/>\n                173.209.49.70<br \/>\n        }<br \/>\n        track_interface {<br \/>\n                eth0<br \/>\n                eth1<br \/>\n        }<br \/>\n}<br \/>\nvirtual_server 173.209.49.70 443 {<br \/>\n        delay_loop 4<br \/>\n        lb_algo sh      # source hash<br \/>\n        lb_kind NAT<br \/>\n        protocol TCP<br \/>\n        real_server 10.119.0.100 443 {<br \/>\n                weight 1<br \/>\n                TCP_CHECK {<br \/>\n                        connect_timeout 15<br \/>\n                        nb_get_retry 3<br \/>\n                        delay_before_retry 2<br \/>\n                }<br \/>\n        }<br \/>\n        real_server 10.119.0.101 443 {<br \/>\n                weight 1<br \/>\n                TCP_CHECK {<br \/>\n                        connect_timeout 15<br \/>\n                        nb_get_retry 3<br \/>\n                        delay_before_retry 2<br \/>\n                }<br \/>\n        }<br \/>\n}<br \/>\nvirtual_server 173.209.49.70 80 {<br \/>\n        delay_loop 4<br \/>\n        lb_algo wrr      # weighted round robin<br \/>\n        lb_kind NAT<br \/>\n        protocol TCP<br \/>\n        real_server 10.119.0.100 80 {<br \/>\n                weight 1<br \/>\n                TCP_CHECK {<br \/>\n                        connect_timeout 15<br \/>\n                        nb_get_retry 3<br \/>\n                        delay_before_retry 2<br \/>\n                }<br \/>\n        }<br \/>\n        real_server 10.119.0.101 80 {<br \/>\n                weight 1<br \/>\n                TCP_CHECK {<br \/>\n                        connect_timeout 15<br \/>\n                        nb_get_retry 3<br \/>\n                        delay_before_retry 2<br \/>\n                }<br \/>\n        }<br \/>\n}<\/code><\/p>\n<p>The &#8220;virtual_router_id&#8221; needs to be unique for each VRRP instance defined. This ID must also be unique within the VLAN. The same ID should not be used on two clusters using the same physical switch or VLAN. The ID needs to match on both LB1 and LB2 for the same VRRP instance. Valid values are from 0 to 255.<\/p>\n<p>Netfilter can use nf_conntrack to track the connections among your servers. Kernel parameters, such as IP addresses, can be immediately modified with the sysctl command. Once nf_conntrack is enabled and sysctl is configured as follows<\/p>\n<p><code>modprobe nf_conntrack<br \/>\nnano \/etc\/sysctl.conf<\/code><\/p>\n<p>keepalived will be able to track the connections between the servers and re-assign the floating IP addresses between LB1 and LB2 as necessary, depending on which should be active and which should be passive at the time.<\/p>\n<p>To complete the configuration of the servers to run keepalived for high availability enter the following tweaks:<\/p>\n<p><code class=\"gris\">net.ipv4.ip_forward = 1<br \/>\nnet.ipv4.ip_nonlocal_bind = 1<br \/>\nnet.nf_conntrack_max = 1000000<\/code><\/p>\n<p>Once you apply the tweaks as follows:<\/p>\n<p><code>sysctl -p<\/code><\/p>\n<p>your configuration should be complete and you can start keepalived.<\/p>\n<p><code>systemctl start keepalived<\/code><\/p>\n<p><strong>Verify Keepalived&#8217;s Status<\/strong><\/p>\n<p>Now we need to ensure our keepalived instance is operating as expected. First, we&#8217;ll check that both floating IP addresses are assigned to the first keepalived instance. To do so, execute ip addr show and see if the floating IP addresses are present:<\/p>\n<p><code>root@lb1:\/etc# ip addr show<\/code><\/p>\n<p><code class=\"gris\">1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1<br \/>\n    link\/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00<br \/>\n    inet 127.0.0.1\/8 scope host lo<br \/>\n       valid_lft forever preferred_lft forever<br \/>\n    inet6 ::1\/128 scope host<br \/>\n       valid_lft forever preferred_lft forever<br \/>\n2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000<br \/>\n    link\/ether 00:50:56:8e:e4:2f brd ff:ff:ff:ff:ff:ff<br \/>\n    inet 173.209.49.66\/29 brd 173.209.49.71 scope global eth0<br \/>\n       valid_lft forever preferred_lft forever<br \/>\n    inet 173.209.49.70\/32 scope global eth0<br \/>\n       valid_lft forever preferred_lft forever<br \/>\n    inet6 fe80::250:56ff:fe8e:e42f\/64 scope link<br \/>\n       valid_lft forever preferred_lft forever<br \/>\n3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000<br \/>\n    link\/ether 00:50:56:8e:ea:2d brd ff:ff:ff:ff:ff:ff<br \/>\n    inet 10.119.0.1\/24 brd 10.119.0.255 scope global eth1<br \/>\n       valid_lft forever preferred_lft forever<br \/>\n    inet 10.119.0.10\/32 scope global eth1<br \/>\n       valid_lft forever preferred_lft forever<br \/>\n    inet6 fe80::250:56ff:fe8e:ea2d\/64 scope link<br \/>\n       valid_lft forever preferred_lft forever<\/code><\/p>\n<p>Verify that 173.209.49.70 and 10.119.0.10 are assigned to LB1. The presence of these addresses indicates that LB1 is active and LB2 is passive. Now, if we shut down keepalived on LB1 those IP addresses should appear on the second server.<\/p>\n<p><code>root@lb1:\/etc# systemctl stop keepalived<\/code><\/p>\n<p>Switch to LB2 and check the IP addresses:<\/p>\n<p><code>root@lb2:~# ip addr show<\/code><\/p>\n<p><code class=\"gris\">1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1<br \/>\n    link\/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00<br \/>\n    inet 127.0.0.1\/8 scope host lo<br \/>\n       valid_lft forever preferred_lft forever<br \/>\n    inet6 ::1\/128 scope host<br \/>\n       valid_lft forever preferred_lft forever<br \/>\n2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000<br \/>\n    link\/ether 00:50:56:8e:ae:b8 brd ff:ff:ff:ff:ff:ff<br \/>\n    inet 173.209.49.67\/29 brd 173.209.49.71 scope global eth0<br \/>\n       valid_lft forever preferred_lft forever<br \/>\n    inet 173.209.49.70\/32 scope global eth0<br \/>\n       valid_lft forever preferred_lft forever<br \/>\n    inet6 fe80::250:56ff:fe8e:aeb8\/64 scope link<br \/>\n       valid_lft forever preferred_lft forever<br \/>\n3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000<br \/>\n    link\/ether 00:50:56:8e:ed:ba brd ff:ff:ff:ff:ff:ff<br \/>\n    inet 10.119.0.2\/24 brd 10.119.0.255 scope global eth1<br \/>\n       valid_lft forever preferred_lft forever<br \/>\n    inet 10.119.0.10\/32 scope global eth1<br \/>\n       valid_lft forever preferred_lft forever<br \/>\n    inet6 fe80::250:56ff:fe8e:edba\/64 scope link<br \/>\n       valid_lft forever preferred_lft forever<\/code><\/p>\n<p>Verify that the floating IP addresses are now assigned to the second node. If so, LB2 is now active. The outwardly visible portion of the configuration has now been verified.<\/p>\n<p>As a last quick check, confirm that the backends are well specified within keepalived:<\/p>\n<p><code>root@lb1:\/etc# ipvsadm<\/code><\/p>\n<p><code class=\"gris\">IP Virtual Server version 1.2.1 (size=4096)<br \/>\nProt LocalAddress:Port Scheduler Flags<br \/>\n  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn<br \/>\nTCP  173.209.49.70:http wrr<br \/>\n  -> 10.119.0.100:http            Masq    1      0          0<br \/>\n  -> 10.119.0.101:http            Masq    1      0          0<br \/>\nTCP  173.209.49.70:https sh<br \/>\n  -> 10.119.0.100:https           Masq    1      0          0<br \/>\n  -> 10.119.0.101:https           Masq    1      0          0<\/code><\/p>\n<p>Provided all IP addresses show up as expected, keepalived should now work as expected.<\/p>\n<h2>Conclusion<\/h2>\n<p>Keepalived is now installed on your LVS cluster of two servers. Following the basic principles above, you can increase the size of your cluster if you wish to achieve even higher availability. Even with just two servers, your keepalived instance should make major downtime a thing of the past. If you found this article helpful, feel free to share it with your friends and let us know in the comments below! <\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>How to Achieve High Availability Load Balancing with Keepalived on Ubuntu 16 Keepalived is a daemon that can be used to drive a number of load balancing processes on Linux Virtual Servers (LVS) to maintain high availability. Load balancers enable two or more identical servers to provide service through a single floating IP address or<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[75],"tags":[],"class_list":["post-3149","post","type-post","status-publish","format-standard","hentry","category-ha-clustering","operating_system-ubuntu-16-04"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to Achieve High Availability Load Balancing with Keepalived on Ubuntu 16 - Globo.Tech<\/title>\n<meta name=\"description\" content=\"This tutorial will show you how to achieve High Availability Load Balancing with Keepalived on your Ubuntu 16 server. Read now !\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.globo.tech\/learning-center\/ha-load-balancing-keepalived-ubuntu-16\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Achieve High Availability Load Balancing with Keepalived on Ubuntu 16 - Globo.Tech\" \/>\n<meta property=\"og:description\" content=\"This tutorial will show you how to achieve High Availability Load Balancing with Keepalived on your Ubuntu 16 server. Read now !\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.globo.tech\/learning-center\/ha-load-balancing-keepalived-ubuntu-16\/\" \/>\n<meta property=\"og:site_name\" content=\"Globo.Tech\" \/>\n<meta property=\"article:published_time\" content=\"2016-10-27T21:18:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-11-24T21:31:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.globo.tech\/learning-center\/wp-content\/uploads\/2016\/09\/GloboTech-Logo.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"963\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"GloboTech Communications\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"GloboTech Communications\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.globo.tech\/learning-center\/ha-load-balancing-keepalived-ubuntu-16\/\",\"url\":\"https:\/\/www.globo.tech\/learning-center\/ha-load-balancing-keepalived-ubuntu-16\/\",\"name\":\"How to Achieve High Availability Load Balancing with Keepalived on Ubuntu 16 - Globo.Tech\",\"isPartOf\":{\"@id\":\"https:\/\/www.globo.tech\/learning-center\/#website\"},\"datePublished\":\"2016-10-27T21:18:16+00:00\",\"dateModified\":\"2017-11-24T21:31:48+00:00\",\"author\":{\"@id\":\"https:\/\/www.globo.tech\/learning-center\/#\/schema\/person\/e17784b37f4a4f49b7bc611847912e87\"},\"description\":\"This tutorial will show you how to achieve High Availability Load Balancing with Keepalived on your Ubuntu 16 server. Read now !\",\"breadcrumb\":{\"@id\":\"https:\/\/www.globo.tech\/learning-center\/ha-load-balancing-keepalived-ubuntu-16\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.globo.tech\/learning-center\/ha-load-balancing-keepalived-ubuntu-16\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.globo.tech\/learning-center\/ha-load-balancing-keepalived-ubuntu-16\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.globo.tech\/learning-center\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Achieve High Availability Load Balancing with Keepalived on Ubuntu 16\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.globo.tech\/learning-center\/#website\",\"url\":\"https:\/\/www.globo.tech\/learning-center\/\",\"name\":\"Globo.Tech\",\"description\":\"Welcome to the Official Globo.Tech Learning Center\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.globo.tech\/learning-center\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.globo.tech\/learning-center\/#\/schema\/person\/e17784b37f4a4f49b7bc611847912e87\",\"name\":\"GloboTech Communications\",\"sameAs\":[\"http:\/\/www.gtcomm.net\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Achieve High Availability Load Balancing with Keepalived on Ubuntu 16 - Globo.Tech","description":"This tutorial will show you how to achieve High Availability Load Balancing with Keepalived on your Ubuntu 16 server. Read now !","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.globo.tech\/learning-center\/ha-load-balancing-keepalived-ubuntu-16\/","og_locale":"en_US","og_type":"article","og_title":"How to Achieve High Availability Load Balancing with Keepalived on Ubuntu 16 - Globo.Tech","og_description":"This tutorial will show you how to achieve High Availability Load Balancing with Keepalived on your Ubuntu 16 server. Read now !","og_url":"https:\/\/www.globo.tech\/learning-center\/ha-load-balancing-keepalived-ubuntu-16\/","og_site_name":"Globo.Tech","article_published_time":"2016-10-27T21:18:16+00:00","article_modified_time":"2017-11-24T21:31:48+00:00","og_image":[{"width":1920,"height":963,"url":"https:\/\/www.globo.tech\/learning-center\/wp-content\/uploads\/2016\/09\/GloboTech-Logo.png","type":"image\/png"}],"author":"GloboTech Communications","twitter_misc":{"Written by":"GloboTech Communications","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.globo.tech\/learning-center\/ha-load-balancing-keepalived-ubuntu-16\/","url":"https:\/\/www.globo.tech\/learning-center\/ha-load-balancing-keepalived-ubuntu-16\/","name":"How to Achieve High Availability Load Balancing with Keepalived on Ubuntu 16 - Globo.Tech","isPartOf":{"@id":"https:\/\/www.globo.tech\/learning-center\/#website"},"datePublished":"2016-10-27T21:18:16+00:00","dateModified":"2017-11-24T21:31:48+00:00","author":{"@id":"https:\/\/www.globo.tech\/learning-center\/#\/schema\/person\/e17784b37f4a4f49b7bc611847912e87"},"description":"This tutorial will show you how to achieve High Availability Load Balancing with Keepalived on your Ubuntu 16 server. Read now !","breadcrumb":{"@id":"https:\/\/www.globo.tech\/learning-center\/ha-load-balancing-keepalived-ubuntu-16\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.globo.tech\/learning-center\/ha-load-balancing-keepalived-ubuntu-16\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.globo.tech\/learning-center\/ha-load-balancing-keepalived-ubuntu-16\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.globo.tech\/learning-center\/"},{"@type":"ListItem","position":2,"name":"How to Achieve High Availability Load Balancing with Keepalived on Ubuntu 16"}]},{"@type":"WebSite","@id":"https:\/\/www.globo.tech\/learning-center\/#website","url":"https:\/\/www.globo.tech\/learning-center\/","name":"Globo.Tech","description":"Welcome to the Official Globo.Tech Learning Center","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.globo.tech\/learning-center\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.globo.tech\/learning-center\/#\/schema\/person\/e17784b37f4a4f49b7bc611847912e87","name":"GloboTech Communications","sameAs":["http:\/\/www.gtcomm.net"]}]}},"_links":{"self":[{"href":"https:\/\/www.globo.tech\/learning-center\/wp-json\/wp\/v2\/posts\/3149","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.globo.tech\/learning-center\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.globo.tech\/learning-center\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.globo.tech\/learning-center\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.globo.tech\/learning-center\/wp-json\/wp\/v2\/comments?post=3149"}],"version-history":[{"count":3,"href":"https:\/\/www.globo.tech\/learning-center\/wp-json\/wp\/v2\/posts\/3149\/revisions"}],"predecessor-version":[{"id":3870,"href":"https:\/\/www.globo.tech\/learning-center\/wp-json\/wp\/v2\/posts\/3149\/revisions\/3870"}],"wp:attachment":[{"href":"https:\/\/www.globo.tech\/learning-center\/wp-json\/wp\/v2\/media?parent=3149"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.globo.tech\/learning-center\/wp-json\/wp\/v2\/categories?post=3149"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.globo.tech\/learning-center\/wp-json\/wp\/v2\/tags?post=3149"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}