• Haproxy+Keepalived高可用负载均衡详细配置


    本文所使用的环境:

    10.6.2.128    centos6.5

    10.6.2.129    centos6.5

    VIP  为10.6.2.150

    要实现的目标:

    实现10.6.2.128和10.6.2.129的9998端口的服务通过haproxy负载,并通过keepalived实现高可用。

    1、安装haproxy

    yum install -y haproxy

    2、配置haproxy

    vi /etc/haproxy/haproxy.cfg

    修改代码如下:

     1 #---------------------------------------------------------------------
     2 # Example configuration for a possible web application.  See the
     3 # full configuration options online.
     4 #
     5 #   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
     6 #
     7 #---------------------------------------------------------------------
     8 
     9 #---------------------------------------------------------------------
    10 # Global settings
    11 #---------------------------------------------------------------------
    12 global
    13     # to have these messages end up in /var/log/haproxy.log you will
    14     # need to:
    15     #
    16     # 1) configure syslog to accept network log events.  This is done
    17     #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    18     #    /etc/sysconfig/syslog
    19     #
    20     # 2) configure local2 events to go to the /var/log/haproxy.log
    21     #   file. A line like the following can be added to
    22     #   /etc/sysconfig/syslog
    23     #
    24     #    local2.*                       /var/log/haproxy.log
    25     #
    26     log         127.0.0.1 local2
    27 
    28     chroot      /var/lib/haproxy
    29     pidfile     /var/run/haproxy.pid
    30     maxconn     100000    #最大连接数
    31     user        haproxy
    32     group       haproxy
    33     daemon           #以守护进程方式运行
    34 
    35     # turn on stats unix socket
    36     stats socket /var/lib/haproxy/stats
    37 
    38 #---------------------------------------------------------------------
    39 # common defaults that all the 'listen' and 'backend' sections will
    40 # use if not designated in their block
    41 #---------------------------------------------------------------------
    42 defaults
    43     mode                    http
    44     log                     global
    45     option                  httplog
    46     option                  dontlognull
    47     option http-server-close
    48     option forwardfor       except 127.0.0.0/8
    49     option                  redispatch
    50     retries                 3                #定义连接后端服务器的失败重连次数,连接失败次数超过次值后就会将对应后端服务器标记为不可用
    51     timeout http-request    10s               #http请求超时时间
    52     timeout queue           1m               #一个请求在队列里的超时时间
    53     timeout connect         10s                        #连接超时时间
    54     timeout client          1m                         #客户端超时时间
    55     timeout server          1m                         #服务器端超时时间
    56     timeout http-keep-alive 10s                        #设置http-keep-alive的超时时间
    57     timeout check           10s              #检查超时的间隔
    58     maxconn                 10000             #每个进程可用的最大连接数
    59 
    60 #---------------------------------------------------------------------
    61 # main frontend which proxys to the backends
    62 #---------------------------------------------------------------------
    63 frontend  pay_test *:9999
    64     acl url_static       path_beg       -i /static /images /javascript /stylesheets
    65     acl url_static       path_end       -i .jpg .gif .png .css .js
    66 
    67    # use_backend static          if url_static
    68     default_backend             pay_test
    69 
    70 #---------------------------------------------------------------------
    71 # static backend for serving up images, stylesheets and such
    72 #---------------------------------------------------------------------
    73 #backend static
    74 #    balance     roundrobin
    75 #    server      static 127.0.0.1:4331 check
    76 
    77 #---------------------------------------------------------------------
    78 # round robin balancing between the various backends
    79 #---------------------------------------------------------------------
    80 backend pay_test
    81     balance     roundrobin          #负载均衡的算法  roundrobin:轮询   source:根据请求源ip
    82     fullconn    10000             #定义后端组的最大连接数
    83     server  pay_test_1 10.6.2.128:9998 inter 2000 rise 2 fall 3 check maxconn 5000     #inter 2000代表执行健康检查的间隔(ms),rise代表离线server转换到上线需要检查的次数,fall代表server从正常转到离线的检查次数
    84     server  pay_test_2 10.6.2.129:9998 inter 2000 rise 2 fall 3 check maxconn 5000   #check代表启动对此server执行健康检查,maxconn代表此服务器接受的最大并发连接数
    85 listen stats
    86     mode http
    87     bind 0.0.0.0:9997
    88     stats enable                  #开启监控页面
    89     stats refresh 3s                #页面刷新频率
    90     stats hide-version              #隐藏版本信息(为安全考虑)
    91     stats uri /monitor              #后台监控页面得uri
    92     stats realm Haproxy monitor        #提示信息
    93     stats auth admin:admin            #后台监控页面的用户名密码
    94     stats admin if TRUE

    3、服务启动

    service haproxy start

    4、将1-3步骤在10.6.2.129机器上也执行一次。

    安装keepalived

    1、下载安装keepalived

    yum install -y keepalived

    2、配置keepalived

    vi /etc/keepalived/keepalived.conf

    配置文件如下:

     1 ! Configuration File for keepalived
     2 
     3 global_defs {
     4    notification_email {
     5      bs_wjg@163.com                    #keepalived发生错误时候发送报警的邮箱 8    }
     9    notification_email_from notify@163.com     #发件人邮箱
    10    smtp_server mail.163.com            #发送email所使用的smtp服务器地址
    11    smtp_connect_timeout 30             #连接stmp的超时时间
    12    router_id LVS_DEVEL
    13 }
    14 #检查haproxy的进程状态,每1s执行一次
    15 vrrp_script chk_haproxy {
    16         script "killall -0 haproxy"
    17         interval 1 
    18         weight 2
    19 }
    20 
    21 vrrp_instance VI_1 {
    22     state MASTER            #主为MASTER  从为BACKUP
    23     interface eth0           #实例绑定的网卡,视实际情况而定
    24     virtual_router_id 76        #这里设置vrid,如果两台机器属于同一组,设置为一样
    25     priority 101            #设置本节点的优先级,高的为master,不能超过255     一般master设置101   backup设置100
    26     advert_int 1            #组波信息发送间隔,默认为1s,同一本分组的两机器必须一样
    27     authentication {
    28         auth_type PASS        
    29         auth_pass 123456    }    #验证密码,统一备份组的机器必须一致。
    31     virtual_ipaddress {
    32         10.6.2.150/16         #虚拟IP的地址
    33     }
    34     track_interface {
    35         eth0
    36     }
    37     track_script {
    38         chk_haproxy
    39     }
        #状态通知
    40 notify_master "/etc/keepalived/notify.sh master" 41 notify_backup "/etc/keepalived/notify.sh backup" 42 notify_fault "/etc/keepalived/notify.sh fault" 43 44 }

    notify.sh 脚本如下:

    vip=10.6.2.150
    contact='bs_wjg@163.com'
    notify() {
        mailsubject="`hostname` to be $1: $vip floating"
        mailbody="`date '+%F %H:%M:%S'`: vrrp transition, `hostname` changed to be $1"
        echo $mailbody | mail -s "$mailsubject" $contact
    }
    
    checkHA(){
            counter=$(ps -C haproxy --no-heading|wc -l)
            if [ "${counter}" = "0" ]; then
                /etc/rc.d/init.d/haproxy start
                sleep 2
                counter=$(ps -C haproxy --no-heading|wc -l)
                if [ "${counter}" = "0" ]; then
                    /etc/init.d/keepalived stop
                fi
            fi
    }
    
    checkNG(){
            counter=$(ps -C nginx --no-heading|wc -l)
            if [ "${counter}" = "0" ]; then
                /usr/local/bin/nginx
                sleep 2
                counter=$(ps -C nginx --no-heading|wc -l)
                if [ "${counter}" = "0" ]; then
                    /etc/init.d/keepalived stop
                fi
            fi
    }
    
    case "$1" in
        master)
            notify master
            exit 0
        ;;
        backup)
            notify backup
            exit 0
        ;;
        fault)
            notify fault
            exit 0
        ;;
        *)
            echo 'Usage: `basename $0` {master|backup|fault}'
            exit 1
        ;;
    esac

    3、服务启动

    service keepalived start

    4、10.6.2.129机器执行1-3步骤,根据从节点的配置进行配置。

    到此配置结束,自行测试吧。

  • 相关阅读:
    Java知多少(28)super关键字
    Java知多少(27)继承的概念与实现
    Java知多少(26)源文件的声明规则
    Java知多少(25)再谈Java包
    Java知多少(24)包装类、拆箱和装箱详解
    Java知多少(23)类的基本运行顺序
    Java知多少(22)方法重载
    Java知多少(21)this关键字详解
    Java知多少(20)变量的作用域
    Java知多少(19)访问修饰符(访问控制符)
  • 原文地址:https://www.cnblogs.com/niceplay/p/6085859.html
Copyright © 2020-2023  润新知