HAProxy+Keepalived 负载均衡高可用配置
拓扑图:
准备工作
两台调度器配置:haproxy+keepalived
两台真实节点服务器配置:HTTP或者nginx或者tomcat
安装haproxy和keepalived
安装Keepalived
yum install -y keepalived
yum install -y haproxy
节点服务器安装nginx和写入网页
yum install -y nginx
cd /usr/share/nginx/html
echo A > ./index.html
systemctl start nginx
配置haproxy
主副调度器haproxy配置可以一样
vim /etc/haproxy/haproxy.cfg
global
user haproxy
group haproxy
daemon
nbproc 2
#cpu-map 1 0
#cpu-map 2 1
maxconn 100000
#chroot /usr/local/haproxy
#pidfile /var/lib/haproxy/haproxy.pid
log 127.0.0.1 local2 info
defaults
log global
option httplog
#option http-server-close
option dontlognull
maxconn 100000
mode http
retries 3
timeout connect 5000
timeout client 50000
timeout server 50000
listen stats
bind 0.0.0.0:8888
log global
mode http
stats enable
stats hide-version
stats realm Haproxy\ Statistics
stats uri /stats
stats refresh 5s
stats auth admin:123
listen WEB_PORT_80
bind 192.168.148.140:80
mode http
option httpchk GET /index.html
balance roundrobin
server web1 192.168.148.141:80 check inter 2000 fall 3 rise 5
server web2 192.168.148.142:80 check inter 2000 fall 3 rise 5
从服务器启动HAProxy的时候可能会启动不了
因为监听了漂移ip 但是备服务器上没漂移ip
解决方法:
vi /etc/sysctl.conf
添加
net.ipv4.ip_nonlocal_bind = 1 # 忽略监听ip的检查
使用命令sysctl -p查看是否添加成功
配置keepalived
主从调度器配置keepalived基本相同
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id HAP1 # 从调度机组名字修改为HAP1
}
vrrp_instance VI_1 {
state MASTER #改成备份使用BACKUP
interface ens33
virtual_router_id 66
priority 120 #备份机优先级为100
advert_int 1
authentication {
auth_type PASS
auth_pass 123
}
virtual_ipaddress {
192.168.148.140
}
}
ip addr查看虚拟地址
主调度器获得虚拟地址
副调度器没有虚拟地址
配置keepalived自动切换脚本
编写主调度器的自动检测脚本
#!/bin/bash
a=`ps -C haproxy --no-header|wc -l`
if [ $a -eq 0 ];then
systemctl start haproxy
echo "haproxy start..."
sleep 3
if [ `ps -C haproxy --no-header|wc -l` -eq 0 ];then
systemctl stop keepalived
echo "haproxy is down"
sleep 3
fi
fi
在主调度器的keepalived.conf文件中添加
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id HAP1
}
vrrp_script check_haproxy { # 自动检测脚本的方案名称
script '/etc/keepalived/check_haproxy.sh' # 脚本的绝对路径
interval 2 # 自动运行的间隔
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 66
priority 120
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.148.140
}
track_script { # 追踪脚本
check_haproxy # 追踪的脚本方案名称
}
}
chmod +x check_haproxy.sh #加执行权限
systemctl enable keepalived --now #立刻重启keepalived
systemctl restart keepalived
编写副调度器的自动检测脚本
#!/bin/bash
a=`ip a | grep 192.168.148.140 | wc -l`
b=`ps -ef | grep haproxy | grep -v grep | awk '{print $2}'`
if [ $a -gt 0 ];then
systemctl start haproxy
else
kill -9 $b
sleep 3600
fi
! Configuration File for keepalived
global_defs {
router_id HAP2
}
vrrp_script check_haproxy {
script '/etc/keepalived/check_haproxy.sh'
interval 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 66
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.188.188
}
track_script {
check_haproxy
}
}
chmod +x check_haproxy.sh
systemctl enable keepalived --now
systemctl restart keepalived
设置HAProxy的日志
查看haproxy的主配置文件
vim /etc/haproxy/haproxy.cfg
在global下面添加有
log 127.0.0.1 local2 info # 这里的local2可以是{1…7之间}
然后下面defaults里面添加有
log global
vim /etc/rsyslog.conf
添加
local2.* /var/log/haproxy.log
将注释取消
$ModLoad imudp
$UDPServerRun 514
保存之后重启服务
systemctl restart haproxy
systemctl restart rsyslog
systemctl status rsyslog
然后就会出现haproxy的日志文件
ls /var/log/haproxy.log
配置NFS服务器:
Yum下载NFS:
yum install -y nfs-utils rpcbind
配置/etc/exports文件:
vim /etc/exports
1.储存机上使用命令showmount -e查看:
将网站代码放入创建的挂载点下:/var/www/html
Unzip hs.zip
关闭防火墙:
Systemctl stop firewalld
然后切换节点服务器:
将http放网站的位置挂载到NFS服务器上:
mount 192.168.24.135:/var/www/html/ /var/www/html/
将网站代码放入NFS储存服务器的挂载点/var/www/html上
2.在节点机上使用命令df -hT查看:
测试
测试负载均衡
打开浏览器
这是真实服务器1的状态界面
这是真实服务器2的状态界面
4.在调度服务器上查看IP地址
主:
打开Windows输入vip地址测试:
关闭主调度器查看从调度器vip:
systemctl stop keepalived(在主调度器上操作,查看VIP切换到从)
副:
打开Windows测试: