HAProxy + keepalived 高可用集群代理

HAProxy + keepalived

# 1 安装keepalived:
yum install keepalived -y

# 2 修改KEEPalived配置文件:
vim /etc/keepalived/keepalived.conf

global_defs {
   notification_email {
       [email protected]                # 通知接受名单
   }
   notification_email_from [email protected] # 那个帐号发送邮件.
   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 [email protected]
     set smtp=smtp.qq.com
     set [email protected]
     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='[email protected]'
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}\n"  192.168.3.100/index.html
  sleep 0.5
done


第二种:(ping VIP)
ping 192.168.3.100 

猜你喜欢

转载自www.cnblogs.com/zhenxing06/p/12825066.html