zoukankan      html  css  js  c++  java
  • HAProxy + keepalived 高可用集群代理

    HAProxy + keepalived

    # 1 安装keepalived:
    yum install keepalived -y
    
    # 2 修改KEEPalived配置文件:
    vim /etc/keepalived/keepalived.conf
    
    global_defs {
       notification_email {
           57674891@qq.com                # 通知接受名单
       }
       notification_email_from 57674891@qq.com # 那个帐号发送邮件.
       smtp_server smtp.qq.com            # 邮件服务器SMTP地址
       smtp_connect_timeout 30            # 超时时间
       #router_id LVS_DEVEL
       router_id srv-6.abc.org           # 主机名 每个主机都不一样
       vrrp_skip_check_adv_addr          # 跳过检测报文地址,会消耗大量带宽所以跳过.
       vrrp_strict                       #严格遵守VRRP协议。
       vrrp_garp_interval 0              #ARP报文发送延迟
       vrrp_gna_interval 0               #消息发送延迟
       vrrp_mcast_group4 224.0.0.18      #组播IP地址,224.0.0.0到239.255.255.255
       #vrrp_iptables                    # 不生成iptables 条目
    }
    
    vrrp_script chk_ping  {
       script /etc/keepalived/ping.sh
       interval 1
       weight -50
       fall 3
       rise 5
       timeout 5
    }
    vrrp_script chk_haproxy {
       script /etc/keepalived/chk_haproxy.sh    # 脚本具体位置
       interval 1                               # 间隔时间,单位为秒,默认1秒
       weight -50                               # 权重,监测失败后会执行权重+操作
       fall 3                                   # 脚本几次失败转换为失败
       rise 5                                   # 脚本连续监测成果后,把服务器从失败标记为成功的次数
       timeout 5                                # 超时时间
       init_fail                                # 设置默认标记为失败状态,监测成功之后再转换为成功状态
    }
    
    vrrp_instance VI_1 {
        state BACKUP                # 此服务器状态MASTER | BACKUP
        interface eth0              # 绑定在哪个网卡名
        virtual_router_id 51        # 虚拟路由ID 凭借此ID来进行广播IP
        priority 80                 # 优先级 从一定比主小,否则无法切换
        advert_int 1                # 心跳探测时长
        # nopreempt                 # 定义工作模式为非抢占模式
        unicast_src_ip 192.168.3.2  # 单播模式 减少发包和ARP风暴问题.本端IP
        unicast_peer {
            192.168.3.3             # 对端IP地址
        } 
        authentication {
            auth_type PASS        # 验证类型  AUTH 
            auth_pass linux08     # 验证密码只支持8位
        }
        virtual_ipaddress {
            192.168.3.100  dev eth0 label eth0:0   # VIP地址,绑定在哪个设备接口和名字是什么
         }
        notify_master "/etc/keepalived/chk.sh master"  # 切换主时发的通知
        notify_backup "/etc/keepalived/chk.sh backup"  # 切换从时发的通知
        notify_fault "/etc/keepalived/chk.sh fault"    # 切换失败时发的通知
        
        track_script {         # 给这个VIP定义一个检测内容.
         chk_haproxy           # 调用上面定义的脚本名.
        }
    
    }
    

    keepalived 发送邮件设置:

    1 )  开启邮箱的POP3 功能:
         此处去邮箱官网寻找打开POP功能.
    2 ) 安装mailx :
        yum install mailx -y
    3 )  编写/etc/mail.rc,使系统mail可以使用第三方邮箱发邮件,这样不会被认为是垃圾邮件
         vim /etc/mail.rc
         set from=57674891@qq.com
         set smtp=smtp.qq.com
         set smtp-auth-user=57674891@qq.com
         set smtp-auth-password=lhwnubskirykbi   # 这个密码,开启使用POP功能里面的连接码.
         set smtp-auth=login
         set ssl-verify=ignore
         
    

    keepalived 检测haproxy是否存活脚本(高可用HAProxy):

    [root@srv-6 keepalived]# vim chk_haproxy.sh 
    
    #!/bin/bash
    /usr/bin/killall -0 haproxy
    

    keepalived 状态转换发送邮件的配置:

    vim /etc/keepalived/chk.sh
    
    #!/bin/bash
    contact='57674891@qq.com'
    notify() {
    mailsubject="$(hostname) to be $1, vip转移"
    mailbody="$(date +'%F %T'): vrrptransition, $(hostname) changed to be $1"
    echo "$mailbody" | mail -s "$mailsubject" $contact
    }
    case $1 in
    master)
    notify master
    ;;
    backup)
    notify backup
    ;;
    fault)
    notify fault
    ;;
    *)
    echo "Usage: $(basename$0) {master|backup|fault}"
    exit 1
    ;;
    esac
    

    Haproxy 不能绑定VIP地址解决办法:

    vim /etc/sysctl.conf
    
    net.ipv4.ip_nonlocal_bind = 1
    
    sysctl -p
    

    haproxy 配置 ...略过:

    global
    maxconn 100000
    chroot /data/soft/haproxy
    stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
    uid 1000
    gid 1000
    daemon
    nbproc 2
    cpu-map 1 0
    cpu-map 2 1
    pidfile /var/run/haproxy.pid
    log 127.0.0.1 local3 info
    defaults
      option http-keep-alive
      option  forwardfor # ip地址透传 针对http 协议有效
      maxconn 100000
      mode http
      timeout connect 300000ms
      timeout client  300000ms
      timeout server  300000ms
    ##=======网站80入口=======================
    listen  server_hosts_group
      bind  192.168.3.100:80
      mode http
      server server1  192.168.3.6:80 weight 1 check inter 3s fall 2 rise 5
      server server2  192.168.3.7:80  weight 1 check inter 3s fall 2 rise 5
    
    #=======网站443入口=======================
    #listen server_ssl_group
    #  bind 192.168.3.100:443
    #  mode tcp
    #  server server1  192.168.3.6:443 weight 1 check inter 3s fall 2 rise 5
    #  server server2  192.168.3.7:443  weight 1 check inter 3s fall 2 rise 5
    
    listen stats
      mode http
      bind 0.0.0.0:9800
      stats enable
      log global
      bind-process 2
      stats uri     /sta
      stats auth    admin:q135235
    

    测试最终结果:

    检验:
    1 )停止master 上的keepalived 或者 haproxy 查看是否正常转移到了BACKUP 上,并进行了邮件通知.
    2 ) 开启master 上的keepalived 或者 haproxy 查看VIP是否正常漂移到了master上,并进行了邮件通知.
    3 ) 通过curl 和 ping 虚拟VIP的地址来查看在master 和 backup 切换的时候是否有闪断或者异常错误现象.
    
    第一种:(脚本CURL IP地址)
    [root@src-8 html]# cat tr.sh 
    while true;
    do
      curl -o /dev/null -s -w "%{http_code}
    "  192.168.3.100/index.html
      sleep 0.5
    done
    
    
    第二种:(ping VIP)
    ping 192.168.3.100 
    
  • 相关阅读:
    HDU 4024 Dwarven Sniper’s hunting(数学公式 或者是二分)
    二分图最大匹配总结
    HDU 4022 Bombing (STL应用)
    HDU 1847 Good Luck in CET4 Everybody!(组合博弈)
    HDU 1556 Color the ball(树状数组)
    HDU 4023 Game(博弈)
    HDU 1406 完数(水题)
    HDU 4021 24 Puzzle
    Oracle 多表查询优化
    【编程之美】字符串移位包含的问题(续)
  • 原文地址:https://www.cnblogs.com/zhenxing06/p/12825066.html
Copyright © 2011-2022 走看看