HAProxy
HAProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,haproxy特别适用于那些负载特别大的web站点,这些站点通常又需要会话保持或七层处理。
keepalived
keepalived是集群管理中保证集群高可用的一个服务软件,用来集群防止单点故障。在此,Keepalived的作用是检测HAProxy服务器的状态,将有故障的服务器剔除,并使用正常HAProxy服务器代替,当服务器工作正常后Keepalived自动将服务器加入到服务器群中。
------------------------------------------------------------------------
测试环境准备:四台centos7服务器+五个ip
HAProxy+Keepalived(主):192.168.10.10
HAProxy+Keepalived(备):192.168.10.20
nginx_web1:192.168.10.30
nginx_web2:192.168.10.40
虚拟负载vip:192.168.10.50
一、配置后端web服务
在两台nginx_web服务器上都安装nginx服务,并创建测试网页index.html,内容:
this is server 192.168.10.30
this is server 192.168.10.40
二、配置haproxy (haproxy在两台服务器上的配置相同)
1.安装haproxy
yum -y install haproxy
2.配置haproxy
配置文件路径为/etc/haproxy/haproxy.cfg,内容如下(先备份):
------------------------------------
global
log 127.0.0.1 local3 info
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
defaults
mode http
log global
option httplog
option dontlognull
#option http-server-close
retries 3
timeout connect 10s
timeout client 1m
timeout server 1m
maxconn 3000
listen nginxserver
bind 192.168.10.10:80
mode http
default_backend nginx
backend nginx
balance roundrobin
option httpchk GET /index.html
server nginx1 192.168.10.30:80 check inter 2000 rise 3 fall 3 weight 30
server nginx2 192.168.10.40:80 check inter 2000 rise 3 fall 3 weight 30
listen stats
bind 192.168.10.10:8080
mode http
option httplog
maxconn 10
stats enable
stats refresh 30s
stats uri /stats
stats realm Haproxy\ Statistics
stats auth admin:admin
stats hide-version
--------------------------------------
3.重启服务,设置开机启动
systemctl restart haproxy
systemctl enable haproxy
4.关闭防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
5.浏览器中访问haproxy服务器的ip 192.168.10.10/20 测试,验证haproxy代理
刷新轮流显示
this is server 192.168.10.30
this is server 192.168.10.40
则成功
三、配置keepalived
1.安装并启动服务
yum -y install keepalived
systemctl start keepalived
systemctl enable keepalived
2.配置keepalived主服务器
vi /etc/keepalived/keepalived.conf
-----------------------------------
! Configuration File for keepalived
global_defs {
router_id LVS_01
}
vrrp_script chk_haproxy {
script "/etc/keepalived/chk_haproxy.sh"
interval 1
weight -10
}
vrrp_instance VI_1 {
state MASTER
interface ens192
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
track_script {
chk_haproxy
}
virtual_ipaddress {
192.168.10.50
}
}
---------------------------
3.配置keepalived从服务器
vi /etc/keepalived/keepalived.conf
---------------------------
! Configuration File for keepalived
global_defs {
router_id LVS_02
}
vrrp_script chk_haproxy {
script "/etc/keepalived/chk_haproxy.sh"
interval 1
weight -10
}
vrrp_instance VI_1 {
state BACKUP
interface ens192
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
track_script {
chk_haproxy
}
virtual_ipaddress {
192.168.10.50
}
}
----------------------------
4.配置健康检查脚本(主从都需要配置)
vi /etc/keepalived/chk_haproxy.sh
----------------------------
#!/bin/bash
A=`ps -C haproxy --no-header |wc -l`
if [ $A -ea 0 ];
then
haproxy -f /etc/haproxy/haproxy.cfg
sleep 3
if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];
then
/etc/init.d/keepalived stop
fi
fi
------------------------------
四、验证并测试
1.修改主从服务器的haproxy配置文件
vi /etc/haproxy/haproxy.cfg
将
listen nginxserver
bind 192.168.10.10:80
中服务器ip改为虚拟负载vip 192.168.10.50
2.主从服务器全部重启haproxy服务和keepalived服务
systemctl restart haproxy
systemctl restart keepalived
3.主服务器上执行 ip a 查看网卡ens192上是否有虚拟负载vip 192.168.10.50
4.在浏览器中访问 192.168.10.50
刷新轮流显示
this is server 192.168.10.30
this is server 192.168.10.40
则成功
5.测试高可用
关闭主服务器keepalived服务
systemctl stop keepalived
从服务上执行 ip a 查看网卡ens192上是否有虚拟负载vip 192.168.10.50
在浏览器中访问 192.168.10.50
刷新轮流显示
this is server 192.168.10.30
this is server 192.168.10.40
则成功
五、配置文件解析
1.haproxy配置文件
----------------------------
#全局配置
global
log 127.0.0.1 local3 info #定义全局性的日志
chroot /var/lib/haproxy #修改haproxy的工作目录,可以注释掉
pidfile /var/run/haproxy.pid #pid文件目录,可以注释掉
maxconn 5000 #haproxy最大并发数
user haproxy #运行haproxy的用户
group haproxy #运行haproxy的组
daemon #用守护进程的方式运行haproxy
#代理设置
defaults #用户提供默认参数的配置
mode http #模式http
log global #日志使用global全局定义
option httplog #采用http格式记录日志
option dontlognull
#option http-server-close #主动关闭http请求选项
retries 3 #重试次数,用于对群集节点的检查
timeout connect 10s #转发后端超时时间
timeout client 1m #客户端超时时间
timeout server 1m #服务端响应超时时间
maxconn 5000 #最大连接数
listen nginxserver #监听的服务名称
bind 192.168.10.10:80 #绑定的负载地址和端口
mode http #定义运行模式
default_backend nginx #设定代理对应的后端
backend nginx #代理后端服务器的配置
balance roundrobin #负载调度算法为轮询
option httpchk GET /index.html #检查网站根目录index.html文件
server nginx1 192.168.10.30:80 check inter 2000 rise 3 fall 3 weight 30
server nginx2 192.168.10.40:80 check inter 2000 rise 3 fall 3 weight 30
#代理的后端服务及健康检查
listen stats #统计页面设置
bind 192.168.10.10:8080 #统计页面地址和端口
mode http
option httplog
maxconn 10
stats enable
stats refresh 30s
stats uri /stats #统计页面url目录
stats realm Haproxy\ Statistics
stats auth admin:admin #统计页面用户名和密码,可以设置多个
stats hide-version #隐藏haproxy版本
----------------------------
2.keepalived配置文件
----------------------------
! Configuration File for keepalived
global_defs {
router_id LVS_01 #服务器名称,主从分别为01 02
}
vrrp_script chk_haproxy { #定义调度服务检查脚本
script "/etc/keepalived/chk_haproxy.sh" #检查脚本路径
interval 1 #每隔1秒探测一次
weight -10 #脚本生效时优先级降10
}
vrrp_instance VI_1 {
state MASTER #MASTER为主 BACKUP为从
interface ens192 #网卡名称
virtual_router_id 51
priority 100 #优先级,主服务器要大于从服务器
advert_int 1 #检查时间为1秒
authentication {
auth_type PASS
auth_pass 1234
}
track_script { #脚本追踪
chk_haproxy #名称和上面一致
}
virtual_ipaddress {
172.16.99.43 #定义负载虚拟ip
}
}