Facebook Twitter Instagram
    TecAdmin
    • Home
    • FeedBack
    • Submit Article
    • About Us
    Facebook Twitter Instagram
    TecAdmin
    You are at:Home»Linux Tutorials»How to Install and Configure HAProxy on CentOS/RHEL 7/6

    How to Install and Configure HAProxy on CentOS/RHEL 7/6

    By RahulDecember 1, 20133 Mins ReadUpdated:October 22, 2019

    HAProxy is a very fast and reliable solution for high availability, load balancing, It supports TCP and HTTP-based applications. Nowadays most of the websites need 99.999% uptime for their site, which is not possible with single server setup. Then we need some high availability environment that can easily manage with single server failure.

    Advertisement

    haproxy-setup-diagram

    This article will help you to install HAProxy on CentOS, RHEL servers and will configure a Layer 4 Load Balancing (Transport Layer). Which will balance load and transfer requests to different-2 servers based on IP address and port numbers.

    Step 1 – Install HAProxy

    HAProxy package is available under the default yum repository for CentOS, Redhat systems. Use the following yum package manager command to install HAProxy on your system.

    sudo yum install haproxy
    

    Step 2 – Configure HAProxy

    Update your HAProxy configuration file /etc/haproxy/haproxy.cfg as per your requirement, You may also use below given configuration file as an example of setup and modify it.

    vim /etc/haproxy/haproxy.cfg
    
    [ Update red mark values as per your network setup ]
    global
            log 127.0.0.1   local0
            log 127.0.0.1   local1 debug
            maxconn   45000 # Total Max Connections.
            daemon
            nbproc      1 # Number of processing cores.
    defaults
            timeout server 86400000
            timeout connect 86400000
            timeout client 86400000
            timeout queue   1000s
    
    # [HTTP Site Configuration]
    listen  http_web 192.168.10.10:80
            mode http
            balance roundrobin  # Load Balancing algorithm
            option httpchk
            option forwardfor
            server server1 192.168.10.100:80 weight 1 maxconn 512 check
            server server2 192.168.10.101:80 weight 1 maxconn 512 check
    
    # [HTTPS Site Configuration]
    listen  https_web 192.168.10.10:443
            mode tcp
            balance source# Load Balancing algorithm
            reqadd X-Forwarded-Proto: http
            server server1 192.168.10.100:443 weight 1 maxconn 512 check
            server server2 192.168.10.101:443 weight 1 maxconn 512 check
    

    Change the ips in configuration file as per your network setup. In HTTP Site Configuration section if any request on ip 192.168.10.10 on port 80, this will be redirected to port 80 of 192.168.10.100 or 192.168.10.101 servers. Similarly in HTTPS Site Configuration if any request on ip 192.168.10.10 on port 443, this will be redirected to port 443 of 192.168.10.100 or 192.168.10.101 servers.

    You also need to make a few changes in the configuration file as per your system configuration.

    • nbproc <value> # Number of processing cores in your system.
    • mode <value> # ‘http’ for http site and ‘tcp’ for https site
    • balance <value> # Type of load balancing like ‘source’, ’roundrobin’ etc.
    • Step 3 – Start HAProxy Service

      Start HAProxy service using the following command, also configure it to auto-start on system boot.

      systemctl start haproxy
      systemctl enable haproxy
      

      And You have done it.

      Congratulation’s! you have successfully configured HAProxy load balancer. Read next article to enable haproxy stats and setup ACL in HAProxy.

      For more configuration details check below url. http://haproxy.1wt.eu/download/1.4/doc/configuration.txt

    cluster HAProxy HAProxy Setup load-balancing
    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email WhatsApp

    Related Posts

    An Introduction to the “./configure” Command: Compiling Source Code in Linux

    Getting Started with Linux Command line: The Beginning

    Backing Up Your Linux System with Rsync: A Step-by-Step Guide

    View 21 Comments

    21 Comments

    1. sachin on August 29, 2019 12:01 pm

      Hi Rahul,

      I have installed haproxy as root and created a non root user lbAdmin in my rhel 7.6

      I am planning to give permission to lbAdmin user to configure haproxy.cfg in /etc/haproxy and also start and stop haproxy service.

      please provide steps to configure haproxy for a particular non root user

      Reply
    2. Muhamed Hussain on August 7, 2019 1:26 pm

      ha proxy is not listening in any port for me. How to confirm its listening.

      My Conf:

      #———————————————————————
      # Example configuration for a possible web application. See the
      # full configuration options online.
      #
      # http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
      #
      #———————————————————————

      #———————————————————————
      # Global settings
      #———————————————————————
      global
      # to have these messages end up in /var/log/haproxy.log you will
      # need to:
      #
      # 1) configure syslog to accept network log events. This is done
      # by adding the ‘-r’ option to the SYSLOGD_OPTIONS in
      # /etc/sysconfig/syslog
      #
      # 2) configure local2 events to go to the /var/log/haproxy.log
      # file. A line like the following can be added to
      # /etc/sysconfig/syslog
      #
      # local2.* /var/log/haproxy.log
      #
      log 127.0.0.1 local2

      chroot /var/lib/haproxy
      pidfile /var/run/haproxy.pid
      maxconn 4000
      user haproxy
      group haproxy
      daemon

      # turn on stats unix socket
      stats socket /var/lib/haproxy/stats

      #———————————————————————
      # common defaults that all the ‘listen’ and ‘backend’ sections will
      # use if not designated in their block
      #———————————————————————
      defaults
      mode http
      log global
      option httplog
      option dontlognull
      option http-server-close
      option forwardfor except 127.0.0.0/8
      option redispatch
      retries 3
      timeout http-request 10s
      timeout queue 1m
      timeout connect 10s
      timeout client 1m
      timeout server 1m
      timeout http-keep-alive 10s
      timeout check 10s
      maxconn 3000

      #———————————————————————
      # main frontend which proxys to the backends
      #———————————————————————
      frontend main *:5000
      acl url_static path_beg -i /static /images /javascript /stylesheets
      acl url_static path_end -i .jpg .gif .png .css .js

      use_backend static if url_static
      default_backend app

      #———————————————————————
      # static backend for serving up images, stylesheets and such
      #———————————————————————
      backend static
      balance roundrobin
      server static 127.0.0.1:4331 check

      #———————————————————————
      # round robin balancing between the various backends
      #———————————————————————
      backend app
      balance roundrobin
      server app1 127.0.0.1:5001 check
      server app2 127.0.0.1:5002 check
      server app3 127.0.0.1:5003 check
      server app4 127.0.0.1:5004 check

      frontend rserve_frontend
      bind *:81
      mode tcp
      option tcplog
      timeout client 1m
      default_backend rserve_backend

      backend rserve_backend
      mode tcp
      option tcplog
      option log-health-checks
      option redispatch
      log global
      balance roundrobin
      timeout connect 10s
      timeout server 1m
      server rserve1 127.0.0.1:7000 check
      server rserve2 127.0.0.1:7001 check

      Reply
    3. SDB on August 1, 2018 12:27 pm

      Is there any document available to install HA-Proxy 1.8 on Centos 7 ?

      Reply
    4. rohit on August 7, 2017 11:00 am

      My haproxy not starting

      Reply
      • Rahul K. on August 8, 2017 9:37 am

        Hi Rohit,

        What is the error?

        Reply
        • rohit on August 16, 2017 2:19 pm

          unable to access application through 443 port

          global
          log 127.0.0.1 local0 notice
          maxconn 50000
          daemon
          defaults
          log global
          mode http
          option httplog
          option dontlognull
          contimeout 120000
          clitimeout 120000
          srvtimeout 120000
          option forwardfor
          option http-server-close

          # Configuration for HTTP site
          frontend http-in
          bind *:80
          acl is_oems url_beg /oems
          use_backend http_oems if is_oems
          default_backend http_back

          backend http_oems
          mode http
          balance roundrobin # Load Balancing algorithm
          option httpchk
          option forwardfor
          server WEB2 192.168.40.61:443 weight 1 maxconn 512 check
          server WEB1 192.168.40.60:443 weight 1 maxconn 512 check

          backend http_back
          mode http
          balance roundrobin # Load Balancing algorithm
          option httpchk
          option forwardfor
          server WEB2 192.168.40.61:8080 weight 1 maxconn 512 check
          server WEB1 192.168.40.60:8080 weight 1 maxconn 512 check

          Reply
          • Rahul K. on August 17, 2017 3:17 am

            Hi Rohit, It looks you have not used the configuration shown in the tutorial. To access the site with https required “mode tcp“. Please check step 2 in the tutorial.

            Reply
            • rohit on August 17, 2017 10:26 am

              after using your configuration i am getting this error in haproxy service

              [[email protected] ~]# systemctl status haproxy.service
              ● haproxy.service – SYSV: HA-Proxy is a TCP/HTTP reverse proxy which is particularly suited for high availability environments.
              Loaded: loaded (/etc/rc.d/init.d/haproxy; bad; vendor preset: disabled)
              Active: failed (Result: exit-code) since Thu 2017-08-17 15:50:20 IST; 51s ago
              Docs: man:systemd-sysv-generator(8)
              Process: 23234 ExecStop=/etc/rc.d/init.d/haproxy stop (code=exited, status=0/SUCCESS)
              Process: 23223 ExecReload=/etc/rc.d/init.d/haproxy reload (code=exited, status=0/SUCCESS)
              Process: 23536 ExecStart=/etc/rc.d/init.d/haproxy start (code=exited, status=1/FAILURE)
              Main PID: 20332 (code=exited, status=0/SUCCESS)

              Aug 17 15:50:20 cloud032 haproxy[23536]: [ALERT] 228/155020 (23540) : parsing [/etc/haproxy/haproxy.cfg:23] : ‘listen’ cannot han…5:443′.
              Aug 17 15:50:20 cloud032 haproxy[23536]: [ALERT] 228/155020 (23540) : parsing [/etc/haproxy/haproxy.cfg:23] : please use the ‘bin…resses.
              Aug 17 15:50:20 cloud032 haproxy[23536]: [ALERT] 228/155020 (23540) : parsing [/etc/haproxy/haproxy.cfg:26] : ‘reqadd’ : Expectin…’http’.
              Aug 17 15:50:20 cloud032 haproxy[23536]: [ALERT] 228/155020 (23540) : Error(s) found in configuration file : /etc/haproxy/haproxy.cfg
              Aug 17 15:50:20 cloud032 haproxy[23536]: [ALERT] 228/155020 (23540) : Fatal errors found in configuration.
              Aug 17 15:50:20 cloud032 haproxy[23536]: Errors found in configuration file, check it with ‘haproxy check’.
              Aug 17 15:50:20 cloud032 systemd[1]: haproxy.service: control process exited, code=exited status=1
              Aug 17 15:50:20 cloud032 systemd[1]: Failed to start SYSV: HA-Proxy is a TCP/HTTP reverse proxy which is particularly suited for…nments..
              Aug 17 15:50:20 cloud032 systemd[1]: Unit haproxy.service entered failed state.
              Aug 17 15:50:20 cloud032 systemd[1]: haproxy.service failed.
              Hint: Some lines were ellipsized, use -l to show in full.

              Reply
            • prakash on March 10, 2019 3:52 am

              My Question to you plz answer this
              1. I am using CENTos7 through VMWare
              2. I have a single private IP which is generated/assigned by VMWare
              3. I want to create multiple DNS by using this single IP. Is it possible ? if possible can you describe how to install and configure this DNS.
              4. Is there any alternate way where I can create multiple name server by using single IP address. If it is then plz write the steps
              Hope you will answer to my queries

              PC Panda
              Senior System Administrator
              IIIT, Bhubaneswar

              Reply
        • rohit on August 16, 2017 3:30 pm

          Please my below command not working

          global
          log 127.0.0.1 local0 notice
          maxconn 50000
          daemon
          defaults
          log global
          mode http
          option httplog
          option dontlognull
          contimeout 120000
          clitimeout 120000
          srvtimeout 120000
          option forwardfor
          option http-server-close

          # Configuration for HTTP site
          frontend http-in
          bind *:80
          acl is_oems url_beg /oems
          use_backend http_oems if is_oems
          default_backend http_back

          backend http_oems
          mode http
          balance roundrobin # Load Balancing algorithm
          option httpchk
          option forwardfor
          server WEB2 192.168.40.61:443 weight 1 maxconn 512 check
          server WEB1 192.168.40.60:443 weight 1 maxconn 512 check

          backend http_back
          mode http
          balance roundrobin # Load Balancing algorithm
          option httpchk
          option forwardfor
          server WEB2 192.168.40.61:8080 weight 1 maxconn 512 check
          server WEB1 192.168.40.60:8080 weight 1 maxconn 512 check

          Reply
    5. Allwyn on August 10, 2015 11:01 am

      Hi,
      How to make ha proxy route the traffic if the URL has paths after ‘/’ ? My web app URL is like this http://abc.com:8080/xyz. In my front-end settings I have used ‘path_beg’ to identify ‘/xyz’ but couldn’t set something similar in the back-end settings. Any thoughts ?

      Reply
    6. Super Man on February 10, 2015 5:42 am

      Can this solution be used to support failover for non-http processes? All we want to achieve is an automatic failover from host_a to host_b if there is a problem with host_a. A very simplistic failover. The app uses a network drive to store its configuration files ,etc. so the host_b can take over with minimal disruption (users can wait upto a minute or so , but the transition needs to be automatic). I was thinking of using a virtual IP address configured on both hosts and a simple script to start the app on host_b when host_a is down. Any ideas?

      Thanks in Advance.

      Reply
      • Rahul on April 7, 2015 3:52 am

        Hi,

        If you are thinking about that you add 2 hosts but only one host serve requests continuously and second host keep as spare. In any case first host goes down, then second take place of them.

        This you can do by adding host_a as active and host_b as backup. Configuration looks like below

        listen http_web 192.168.10.10:80
        mode http
        balance source
        option httpchk
        option forwardfor
        server host_a 192.168.10.100:80 weight 1 maxconn 512 check
        server host_b 192.168.10.101:80 weight 1 maxconn 512 check backup

        Also you can use this configuration for non http requests.

        Reply
        • Joe on December 26, 2018 7:11 pm

          How would you configure this, if you need the ability to failover from A to B, then after repairing A, A should then become the backup for B.

          To put this a different way, A is primary, and B is failover. But, after failing over to B, B then becomes primary, and A then becomes failover.

          Reply
        • Joe on December 26, 2018 7:14 pm

          How would you configure this, if you need the ability to failover from A to B, then after repairing A, A should then become the backup for B.

          To put this a different way, A is primary, and B is failover. But, after failing over to B, B then becomes primary, and A then becomes failover.

          Also, this load balancer is not using http.

          It will only ever use TCP, for HL7 messaging.

          Reply
    7. saudi on January 1, 2015 9:28 am

      easy to follow explanation. thanks

      Reply
    8. dhenyismail on July 29, 2014 7:44 am

      how to configure haproxy explanation of this?

      server server1 192.168.10.100:443 weight 1 maxconn 512 check
      server server2 192.168.10.101:443 weight 1 maxconn 512 check

      thanks..

      Reply
    9. Mathieu on May 14, 2014 1:53 pm

      HaProxy seems to be not available on EPEL for RHEL6/CentOS6.

      Reply
      • dbman on July 24, 2014 8:34 pm

        It is no longer on EPEL. haproxy was moved to the base load for RHEL/CentOS 6.4 and above. You will find it in the base repo, or on your DVD if you have 6.4 or later.

        Reply
    10. Harsh on October 18, 2013 11:04 am

      Very nice blog, Simple and precise..

      Reply
    11. sustainabilitymarket.in on July 3, 2013 7:13 pm

      Whoa! This blog looks just like my old one!
      It’s on a completely different topic but it has pretty much the same page layout and design. Outstanding choice of colors!

      Reply

    Leave A Reply Cancel Reply

    Advertisement
    Recent Posts
    • Error: EACCES: permission denied, scandir (Resolved)
    • How To Install Python 3.11 on Ubuntu 22.04 / 20.04
    • How to Install Python 3.11 on Amazon Linux 2
    • An Introduction to the “./configure” Command: Compiling Source Code in Linux
    • How to Install PHP 8.x on Pop!_OS
    Facebook Twitter Instagram Pinterest
    © 2023 Tecadmin.net. All Rights Reserved | Terms  | Privacy Policy

    Type above and press Enter to search. Press Esc to cancel.