zoukankan      html  css  js  c++  java
  • HAproxy+Keepalived实现高可用

    HAproxy+Keepalived实现高可用
    
    说明:
    HA1:HAproxy+Keepalived(master)
    HA2:HAproxy+Keepalived(backup)
    
    1.HA1上keepalived的配置:
    # Configuration File for keepalived
    global_defs {
            notification_email 
            {
                    from@email.com
            }
            notification_email_from alert@email.com
            smtp_server 127.0.0.1
            smtp_connect_timeout 30
            router_id LVS_DEVEL
    }
    
    vrrp_script chk_haproxy {
        script "/usr/local/keepalived/scripts/chk_haproxy.sh"
            interval 2
            weight 2
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        lvs_sync_daemon_inteface eth0
        virtual_router_id 105
        priority 151
        advert_int 1
        nopreempt
        authentication {
            auth_type PASS
            auth_pass xxx
        }
        track_interface {
            eth0
            eth1
        }
        track_script {
            chk_haproxy
        }
        virtual_ipaddress {
            xxx.xxx.xxx.xxx
        }
        notify "/usr/local/keepalived/scripts/alarm.bash"
    }
    
    2.HA2上keepalived的配置:
    # Configuration File for keepalived
    global_defs {
            notification_email 
            {
                    from@email.com
            }
            notification_email_from alert@email.com
            smtp_server 127.0.0.1
            smtp_connect_timeout 30
            router_id LVS_DEVEL
    }
    
    vrrp_script chk_haproxy {
        script "/usr/local/keepalived/scripts/chk_haproxy.sh"
            interval 2
            weight 2
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        lvs_sync_daemon_inteface eth0
        virtual_router_id 105
        priority 141
        advert_int 1
        nopreempt
        authentication {
            auth_type PASS
            auth_pass xxx
        }
        track_interface {
            eth0
            eth1
        }
        track_script {
            chk_haproxy
            }
        virtual_ipaddress {
            xxx.xxx.xxx.xxx
        }
        notify "/usr/local/keepalived/scripts/alarm.bash"
    }
    
    
    3.HA1和HA2上haproxy的配置:
    # this config needs haproxy-1.1.28 or haproxy-1.2.1
    
    global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 4096
        #chroot /usr/share/haproxy
        user haproxy
        group haproxy
        daemon
        #debug
        #quiet
    
    defaults
        log global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout  5000
        clitimeout  50000
        srvtimeout  50000
    
    listen  fabuqi 0.0.0.0:80
        cookie  SERVERID rewrite
        balance roundrobin
        server  real_server1 rs1_ip:80 cookie app1inst1 check inter 1000 rise 2 fall 5
        server  real_server2 rs2_ip:80 cookie app1inst2 check inter 1000 rise 2 fall 5
        server  real_server3 rs3_ip:80 cookie app1inst3 check inter 1000 rise 2 fall 5 backup
    
    listen  fabuqi_ssl 0.0.0.0:443
        mode tcp  # 只代理需要用tcp模式,没有cookie的设置
        balance roundrobin
        server  real_server1 10.20.172.131:443 check inter 1000 rise 2 fall 5
        server  real_server2 10.21.180.145:443 check inter 1000 rise 2 fall 5
        server  real_server3 10.26.2.184:443 check inter 1000 rise 2 fall 5 backup
    
    listen stats 0.0.0.0:1080 #设置Frontend和Backend的组合体,监控组的名称,按需要自定义名称
            mode http #http的7层模式
            option httplog #采用http日志格式
            #log 127.0.0.1 local0 err #错误日志记录
            maxconn 5 #默认的最大连接数
            stats refresh 30s #统计页面自动刷新时间
            stats uri /stats #统计页面url
            stats realm XingCloud Haproxy #统计页面密码框上提示文本
            stats auth admin:xxx #设置监控页面的用户和密码:admin,可以设置多个用户名
            #stats auth Frank:xxx #设置监控页面的用户和密码:Frank
            stats hide-version #隐藏统计页面上HAProxy的版本信息
            stats admin if TRUE
    
    4.keepalived监控haproxy脚本:
    #!/bin/bash
    
    if [[ `ps -C haproxy --no-header | wc -l` -eq 0 ]]; then
      echo [`date`] "haproxy not running,attempt to start up." >> /usr/local/keepalived/logs/chk_haproxy.log 2>&1
      haproxy -f /etc/haproxy/haproxy.cfg
      sleep 3
      if [[ `ps -C haproxy --no-header | wc -l` -eq 0 ]]; then
        /etc/init.d/keepalived stop
            echo [`date`] "haproxy start failure,stop keepalived." >> /usr/local/keepalived/logs/chk_haproxy.log 2>&1
      else
        echo [`date`] "haproxy started success." >> /usr/local/keepalived/logs/chk_haproxy.log 2>&1
      fi
    fi
    
    5.配置haproxy日志:
    1)syslog-ng的配置:
    # vim /etc/syslog-ng/syslog-ng.conf
    # 在文件最后添加以下配置
    source src_haproxy { udp(ip("0.0.0.0") port(514)); };
    filter f_local03 { facility(local0,local3); };
    filter custom { program("haproxy"); };
    destination dst_haproxy { file("/var/log/haproxy.log"); };
    log { source(src_haproxy); filter(f_local03); destination(dst_haproxy); };
    log { source(src_haproxy); filter(custom); destination(dst_haproxy); };
    # service syslog-ng restart
    2)syslog的配置:
    # vim /etc/syslog.d/haproxy.conf
    local3.* /var/log/haproxy.log
    local0. /var/log/haproxy.log
    &~  #不打印到/var/log/message中
    # vim /etc/sysconfig/syslog
    SYSLOGD_OPTIONS="-r -m 0"
    # service syslog restart
    3)日志分割和清理脚本:
    # cat /usr/local/haproxy/sbin/cut_haproxy_log.sh
    #!/bin/bash  
    # This script run at 00:00  
    # crontab -e
    # 00 00 * * * /usr/local/haproxy/sbin/cut_haproxy_log.sh >/dev/null 2>&1
    
    # The haproxy log path
    LOGPATH="/data/logs/haproxy"
    
    [[ -z `ps aux | grep sbin/haproxy | grep -v grep` ]] && exit 1
    mv ${LOGPATH}/haproxy.log ${LOGPATH}/haproxy_$(date -d "yesterday" +"%Y-%m-%d").log
    rm -f ${LOGPATH}/haproxy_$(date -d "10 days ago" +"%Y-%m-%d").log 
    /sbin/service syslog restart
    # chmod +x /usr/local/haproxy/sbin/cut_haproxy_log.sh
    

      

  • 相关阅读:
    JavaScript Location对象
    JavaScript History 对象
    JavaScript Navigator 对象
    C#实现windows系统重启、关机
    JavaScript ObjectURL | URL.createObjectURL和URL.revokeObjectURL
    依赖注入在 dotnet core 中实现与使用:4. 集成 Autofac
    Raid5的搭建、测试、取消
    Linux磁盘阵列(RAID)概述与实战
    Zookeeper超级用户使用案例:How to remove ACL protected ZK Node
    Kafka 权限管理实战(最全整理)
  • 原文地址:https://www.cnblogs.com/wsjhk/p/8823001.html
Copyright © 2011-2022 走看看