目录
一、概述
1.简介
2.核心功能
3.关键特性
4.应用场景
二、使用步骤
1.内核配置
3.建立配置文件
4.添加为系统服务
5.添加3和5运行级别下自启动
6.启动haproxy
三、调度算法
四、配置文件
五、负载均衡
1.七层负载
1.1 配置负载
1.2 配置监控页面
2.四层负载
六、配置syslog日志
七、keepalive+haproxy实现高可用
1.keepalived配置
2.haproxy配置
3.分别重启两个服务
4.测试
高并发要求较高的场合下
注:
如果想要让HAProxy监听1024以下的端口,则需要以root用户来启动
option httpcheck GET /healthCheck.html
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65023
net.ipv4.tcp_max_syn_backlog = 10240
net.ipv4.tcp_max_tw_buckets = 400000
net.ipv4.tcp_max_orphans = 60000
net.ipv4.tcp_synack_retries = 3
net.core.somaxconn = 10000
注:实验环境可有可无
2.编译安装
wget https://www.haproxy.org/download/1.7/src/haproxy-1.7.2.tar.gz
tar -zxf haproxy-1.7.2.tar.gz
cd haproxy-1.7.2/
make PREFIX=/usr/local/haproxy TARGET=linux2628
make install PREFIX=/usr/local/haproxy
注: - linux22 for Linux 2.2
- linux24 for Linux 2.4 and above (default)
- linux24e for Linux 2.4 with support for a working epoll (> 0.21)
- linux26 for Linux 2.6 and above
- linux2628 for Linux 2.6.28, 3.x, and above (enables splice and tproxy)
从haproxy的源码包中的examples下的init.haproxy中获得配置文件的路径“/etc/haproxy/haproxy.cfg”
mkdir /etc/haproxy
touch /etc/haproxy/haproxy.cfg
global #全局属性
daemon #以daemon方式在后台运行
maxconn 256 #最大同时256连接
pidfile /home/ha/haproxy/conf/haproxy.pid #指定保存HAProxy进程号的文件
defaults #默认参数
mode http #http模式
timeout connect 5000ms #连接server端超时5s
timeout client 50000ms #客户端响应超时50s
timeout server 50000ms #server端响应超时50s
frontend http-in #前端服务http-in
bind *:8080 #监听8080端口
default_backend servers #请求转发至名为"servers"的后端服务
backend servers #后端服务servers
server server1 127.0.0.1:8000 maxconn 32 #backend servers中只有一个后端服务,名字叫server1,起在本机的8000端口,HAProxy同时最多向这个服务发起32个连接
cp /root/haproxy-1.7.2/examples/haproxy.init /etc/init.d/haproxyd
vim /etc/init.d/haproxyd
修改: 35行 内容为 BIN=/usr/local/haproxy/sbin/$BASENAME
chmod +x /etc/init.d/haproxyd
chkconfig --add /etc/init.d/haproxyd
chkconfig haproxyd --level 35 on
chkconfig --list
service haproxy start
service haproxy stop
service haproxy restart | reload
systemctl daemon-reload
注:也可以使用systemctl进行启停
global
daemon
maxconn 256
pidfile /var/run/haproxy/haproxy.pid
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-in
bind *:8080
default_backend servers
backend servers
server server1 192.168.42.4:80 maxconn 32
server server2 192.168.42.5:80 maxconn 32
listen stats #定义监控页面
bind *:1080 #绑定端口1080
stats refresh 30s #每30秒更新监控数据
stats uri /stats #访问监控页面的uri
stats realm HAProxy\ Stats #监控页面的认证提示
stats auth admin:admin #监控页面的用户名和密码
配置负载
global
daemon
maxconn 256
pidfile /var/run/haproxy/haproxy.pid
defaults
mode tcp
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-in
bind *:8080
default_backend servers
backend servers
balance roundrobin #轮询
#balance source #保持会话
server server1 127.0.0.1:8000 maxconn 32
server server2 127.0.0.1:8090 maxconn 32
注:不支持监控状态
touch /etc/rsyslog.d/haproxy.conf
$ModLoad imudp
$UDPServerRun 514
$FileCreateMode 0644 #日志文件的权限
$FileOwner root #日志文件的owner
local0.* /var/log/haproxy.log #local0接口对应的日志输出文件
local1.* /var/log/haproxy_warn.log #local1接口对应的日志输出文件
global_defs {
router_id LVS_DEVEL
}
#HAProxy健康检查配置
vrrp_script chk_haproxy {
script "killall -0 haproxy" #使用killall -0检查haproxy实例是否存在,性能高于ps命令
interval 2 #脚本运行周期
weight 2 #每次检查的加权权重值
}
vrrp_instance HA_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.42.200
}
track_script {
chk_haproxy #对应的健康检查配置
}
}
global
daemon
maxconn 256
pidfile /var/run/haproxy/haproxy.pid
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-in
bind *:80
default_backend servers
backend servers
server server1 192.168.42.5:80 maxconn 32
server server2 192.168.42.6:80 maxconn 32
systemctl restart haproxy
systemctl restart keepalived
ip a
主停止服务后去备上测试查看
systemctl stop keepalived