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 
    
  • 相关阅读:
    nyoj-707-A Simple Problem
    nyoj-290-动物统计加强版
    nyoj-27-水池数目
    nyoj-92-图像有用区域
    nyoj-82-迷宫寻宝(一)
    nyoj-289-苹果
    nyoj-311-完全背包
    Docker: docker network 容器网络
    Docker: docker container常用命令实战(2)-数据持久化
    Docker: docker container常用命令实战
  • 原文地址:https://www.cnblogs.com/zhenxing06/p/12825066.html
Copyright © 2011-2022 走看看