Haproxy+keepalived

  • Post author:
  • Post category:其他

Haproxy+keepalived

主机 ip地址 角色
ha1 192.168.1.10 haproxy+keepalived
ha2 192.168.1.20 haproxy+keepalived

安装keepalived

两台主机都需要操作

yum install -y keepalived
yum install -y keepalived 

关闭防火墙以及selinux

systemctl stop firewalld
systemctl diables firewalld
sed -i '/SELINUX/s/enforcing/disabled/'  /etc/sysconfig/selinux
setenfroce 0

keepalived 只能做到对网络故障和 Keepalived 本身的监控,即当出现网络故障或者 keepalived 本身出现问题时,才会进行切换。但是在工作中,有业务服务停止而 Keepalived 服务器还在工作的情况,这就会导致用户访问的 VIP 无法找到对应的服务。

自定义检测haproxy脚本

cat >> /etc/keepalived/check_ha.sh <<EOF
#!/bin/bash
while true
do
if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
systemctl stop keepalived
fi
sleep 5
done
EOF

自定义监控端口脚本

#!/bin/bash
#keepalived 监控端口脚本
#使用方法:
#在keepalived的配置文件中
#vrrp_script check_port {          #创建一个vrrp_script脚本,检查配置
#    script "/etc/keepalived/check_port.sh 端口号"   #配置监听的端口
#    interval 2 #检查脚本的频率,单位(秒)
#}
CHK_PORT=$1
if [ -n "$CHK_PORT" ];then
        PORT_PROCESS=`ss -lnt|grep $CHK_PORT|wc -l`
        if [ $PORT_PROCESS -eq 0 ];then
                echo "Port $CHK_PORT Is Not Used,End."
                exit 1
        fi
else
        echo "Check Port Cant Be Empty!"
fi

部署keepalived服务

ha1

cat >> /etc/keepalived/keepalived.conf <<EOF
global_defs {
  router_id  ha1            #12行,设置路由ID号(实验需要修改)
    vrrp_iptables           #13行,清除防火墙的拦截规则(实验需要修改,手动添加该行)
}
vrrp_script chk_nginx {
    script "/etc/keepalived/check_ha.sh"
    interval 2
    weight -20
}
vrrp_instance VI_1 {
  state MASTER              #21行,主服务器为MASTER(备服务器需要修改为BACKUP)
  interface eth0            #22行,VIP配在哪个网卡(实验需要修改,不能照抄网卡名)
  virtual_router_id 51      #23行,主备服务器VRID号必须一致
  priority 100              #24行,服务器优先级,优先级高优先获取VIP
  advert_int 1
  nopreempt   #非抢占式 ,当主节点挂了以后,从节点vip飘到从上,主节点恢复以后,不主动飘回主,需要手动重启
  authentication {
    auth_type pass
    auth_pass 1111                       
  }
  track_script {
        chk_nginx
    }
  virtual_ipaddress {       #30~32行,谁是主服务器谁获得该VIP(实验需要修改)
   192.168.1.100/24 
}    
}
EOF

ha2

cat >> /etc/keepalived/keepalived.conf <<EOF
global_defs {
  router_id ha2          #12行,设置路由ID号(实验需要修改)
    vrrp_iptables           #13行,清除防火墙的拦截规则(实验需要修改,手动添加该行)
}
vrrp_script chk_nginx {
    script "/etc/keepalived/check_ha.sh"
    interval 2
    weight -20
}
vrrp_instance VI_1 {
  state BACKUP             #21行,主服务器为MASTER(备服务器需要修改为BACKUP)
  interface eth0            #22行,VIP配在哪个网卡(实验需要修改,不能照抄网卡名)
  virtual_router_id 51      #23行,主备服务器VRID号必须一致
  priority 80             #24行,服务器优先级,优先级高优先获取VIP
  advert_int 1
  nopreempt   #非抢占式 ,当主节点挂了以后,从节点vip飘到从上,主节点恢复以后,不主动飘回主,需要手动重启
  authentication {
    auth_type pass
    auth_pass 1111                       
  }
  track_script {
        chk_nginx
    }
  virtual_ipaddress {       #30~32行,谁是主服务器谁获得该VIP(实验需要修改)
  192.168.1.100/24 
}    
}
EOF

起服

systemctl enable --now keepalived

安装haproxy

两台都需要安装

yum -y install haproxy

修改配置文件

cat >> /etc/haproxy/haproxy.cfg <<EOF
global
 log 127.0.0.1 local2   ##[err warning info debug]
 pidfile /var/run/haproxy.pid ##haproxy的pid存放路径
 user haproxy
 group haproxy
 daemon                    ##以后台进程的方式启动服务
defaults
 mode http                ##默认的模式mode { tcp|http|health } 
option dontlognull      ##不记录健康检查的日志信息
 option httpclose        ##每次请求完毕后主动关闭http通道
 option httplog          ##日志类别http日志格式
 option redispatch      ##当某个服务器挂掉后强制定向到其他健康服务器
 timeout client 300000 ##客户端连接超时,默认毫秒,也可以加时间单位
 timeout server 300000 ##服务器连接超时
 maxconn  3000          ##最大连接数
 retries  3             ##3次连接失败就认为服务不可用,也可以通过后面设置
  
listen  websrv-rewrite 0.0.0.0:80          
   balance roundrobin
   server  web1 192.168.1.40:80 check inter 2000 rise 2 fall 5
   server  web2 192.168.1.50:80 check inter 2000 rise 2 fall 5
#定义集群,listen后面的名称任意,端口为80
#balance指定调度算法为轮询(不能用简写的rr)
#server指定后端真实服务器,web1和web2的名称可以任意
#check代表健康检查,inter设定健康检查的时间间隔,rise定义成功次数,fall定义失败次数
listen stats *:1080        #监听端口
    stats refresh 30s             #统计页面自动刷新时间
    stats uri /stats              #统计页面url
    stats realm Haproxy Manager #进入管理解面查看状态信息
    stats auth admin:admin       #统计页面用户名和密码设置
EOF

起服

systemctl enable --now haproxy

版权声明:本文为weixin_48705916原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。