haproxy的简单配置

一、Haproxy相关知识

nginx : 四层转发、七层代理

lvs :四层转发,内核态,用户态

Haproxy :四层转发,七层转发

Haproxy的作用和使用场景

1.场景:

用于高并发的web场景,可以支持一万个以上的并发请求,是高性能的TCP和HTTP的负载均衡器

工作原理:

提供一个代理地址,访问集群

2.作用:

进行四层和七层转发
支持https
Haproxy本身不自带缓存功能,请求当中添加cookie,使用缓存
支持主备切换(keepalive)
3.特点:

可靠性高,稳定性好
可以同时维护40000-50000个并发,单位时间内可以处理的最大请求数20000个
支持负载均衡算法,虽然不带缓存,但是可以支持会话保持
负载均衡算法:
rr :轮询
wrr :加权轮询
leastconn :最小连接数

二、Haproxy安装和配置

#haproxy安装包存放在/opt
cd /opt
tar -xf haproxy-1.5.19.tar.gz
mv haproxy-1.5.19 haproxy
cd haproxy/
uname -r
#查看本机的内核版本
make TARGET=linux2628 ARCH=x86_64
#TARGET内核版本要低于本机的内核版本,架构是x86_64
make install
mkdir /etc/haproxy
cd examples
cp haproxy.cfg /etc/haproxy

对haproxy配置文件进行设置(使用七层转发)

vim /etc/haproxy/haproxy.cfg

global
#4-5行
	log /dev/log local0 info
	log /dev/log local1 notice
	maxconn 4096
	#最大连接数,推荐使用10240,需要系统内核参数修改最大打开文件数
	#注释下一行
	#chroot /usr/share/haproxy
	nbproc 4
	#Haproxy的并发线程数,设置的数量最好是CPU的2倍或者和CPU保持一致

defaults
#默认参数配置,包括连接配置、监听配置以及代理配置
	option httplog
	#类型 http日志
	retries 3
	#检查节点服务器3次,连续3次失败,就认为节点服务器不可用
	redispatch
	#服务器负载很高时,自动结束当前队列中处理比较久的连接
	maxconn 2000
	#最大连接数,不能超过global设置的maxconn
	#下面三行注释掉,已经不用了
	#contimeout
	#clitimeout
	#srvtimeout
	
	
	timeout http-request 10s
	#http请求的默认超时时间
	timeout queue 1m
	#在队列当中请求的超时时间
	timeout connect 10s
	#连接超时时间
	timeout client 1m
	#客户端超时时间
	timeout server 1m
	#服务端超时时间
	timeout http-keep-alive 10s
	#默认长连接的超时时间(不是会话保持)
	timeout check 10s
	#检查后端服务器的超时时间


#转发请求的设置,既可以是四层,也可以是七层
#四层和七层择其一,不要都写

#七层转发的配置
listen yang1 0.0.0.0:80
	option httpchk GET /index.html
	#设置转发请求的内容,方式GET, 获取内容 index.html
	balance static-rr
	#轮询算法
	server rs01 20.0.0.21:80 check inter 2000 fall 3 weight 2
	server rs02 20.0.0.22:80 check inter 2000 fall 3 weight 2
	#server 指定真实服务器,rs01 自定义后端服务器名称
	#check inter 2000 :启动对后端服务器进行健康检查,检查的间隔时间2000ms
	#fall 3 连续三次检查不到,任务失败

#四层转发的配置
frontend test
#定义服务的名称为test,前端名为test
	bind *:80
	#监听所有网络接口,端口为80
	mode tcp
	#设置负载均衡的模式为TCP
	default_backend test
	#指定默认后端服务名为test

backend test
#定义后端名为test,负责处理前端传递来的请求
	mode tcp
	#前后端模式匹配,都设置为TCP
	balance roundrobin
	#设置负载均衡算法为轮询,即rr
	server rs01 20.0.0.21:80 check inter 2000 fall 3 weight 2
	server rs02 20.0.0.22:80 check inter 2000 fall 3 weight 3

#保存配置

让haproxy命令可以被系统识别到

cd /haproxy/example
cp haproxy.init /etc/init.d/haproxy
chmod 777 /etc/init.d/haproxy
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin

启动haproxy服务

systemctl start haproxy

三、练习

实现keepalive + haproxy的高可用

VIP 20.0.0.100 虚拟地址

test2 :haproxy1 20.0.0.20 主

test3 :haproxy2 20.0.0.30 备

nginx1 :RS01 20.0.0.21 真实服务器1

nginx2 :RS02 20.0.0.22 真实服务器2

test1 :客户机

工作原理:

haproxy就像LVS的调度器,高可用即实现两台haproxy服务器一主一备。

在test2和test3上分别安装haproxy和keepalived

使用keepalive配置test2为 主haproxy服务器,test3为 备haproxy服务器,两台服务器都能对两台nginx服务器(即真实服务器)实现轮询

通过检测服务器上的haproxy服务状态实现主备切换,即VIP的漂移,注意:VIP是两台主备haproxy服务器的虚拟地址

3.1 test2和test3上安装haproxy

源码安装haproxy:

Haproxy安装

#haproxy安装包存放在/opt
cd /opt
tar -xf haproxy-1.5.19.tar.gz
mv haproxy-1.5.19 haproxy
cd haproxy/
uname -r
#查看本机的内核版本
make TARGET=linux2628 ARCH=x86_64
#TARGET内核版本要低于本机的内核版本,架构是x86_64
make install
mkdir /etc/haproxy
cd examples
cp haproxy.cfg /etc/haproxy

对haproxy配置文件进行设置

vim /etc/haproxy/haproxy.cfg

global
#4-5行
	log /dev/log local0 info
	log /dev/log local1 notice
	maxconn 4096
	#最大连接数,推荐使用10240,需要系统内核参数修改最大打开文件数
	#注释下一行
	#chroot /usr/share/haproxy
	
	#添加下一行
	nbproc 4
	#Haproxy的并发线程数,设置的数量最好是CPU的2倍或者和CPU保持一致

defaults
#默认参数配置,包括连接配置、监听配置以及代理配置
	option httplog
	#类型 http日志
	retries 3
	#检查节点服务器3次,连续3次失败,就认为节点服务器不可用
	redispatch
	#服务器负载很高时,自动结束当前队列中处理比较久的连接
	maxconn 2000
	#最大连接数,不能超过global设置的maxconn
	#下面三行注释掉,已经不用了
	#contimeout
	#clitimeout
	#srvtimeout
	
	
	timeout http-request 10s
	#http请求的默认超时时间
	timeout queue 1m
	#在队列当中请求的超时时间
	timeout connect 10s
	#连接超时时间
	timeout client 1m
	#客户端超时时间
	timeout server 1m
	#服务端超时时间
	timeout http-keep-alive 10s
	#默认长连接的超时时间(不是会话保持)
	timeout check 10s
	#检查后端服务器的超时时间


#转发请求的设置,既可以是四层,也可以是七层
#四层和七层择其一,不要都写

#七层转发的配置
listen yang1 0.0.0.0:80
	option httpchk GET /index.html
	#设置转发请求的内容,方式GET, 获取内容 index.html
	balance static-rr
	#轮询算法
	server rs01 20.0.0.21:80 check inter 2000 fall 3 weight 2
	server rs02 20.0.0.22:80 check inter 2000 fall 3 weight 2
	#server 指定真实服务器,rs01 自定义后端服务器名称
	#check inter 2000 :启动对后端服务器进行健康检查,检查的间隔时间2000ms
	#fall 3 连续三次检查不到,任务失败

想做四层转发的话以用下面的配置

#四层转发的配置
frontend test
#定义服务的名称为test,前端名为test
	bind *:80
	#监听所有网络接口,端口为80
	mode tcp
	#设置负载均衡的模式为TCP
	default_backend test
	#指定默认后端服务名为test

backend test
#定义后端名为test,负责处理前端传递来的请求
	mode tcp
	#前后端模式匹配,都设置为TCP
	balance roundrobin
	#设置负载均衡算法为轮询,即rr
	server rs01 20.0.0.21:80 check inter 2000 fall 3 weight 2
	server rs02 20.0.0.22:80 check inter 2000 fall 3 weight 3

#保存配置

让haproxy命令可以被系统识别到

cd /haproxy/example
cp haproxy.init /etc/init.d/haproxy
chmod 777 /etc/init.d/haproxy
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin

启动haproxy服务

systemctl start haproxy

3.2 在test2和test3上安装keepalived

安装keepalived

yum -y install keeplived

对test2的keepalive进行配置

编辑检查haproxy状态的脚本

vim /opt/check_haproxy.sh
#内容如下
#!/bin/bash
/usr/bin/curl -I http://localhost &>/dev/null
#指定curl命令的路径调用curl命令
#curl -I 仅查看http响应头部信息,而不用下载页面内容,常用于状态检查
if [ $? -ne 0 ]
then
 systemctl stop keepalived
fi

vim /etc/keepalived/keepalived.conf
#在global_defs模块中
#修改下两行
smtp_server 127.0.0.1
router_id LVS_02
#route_id 后面的名称不能相同!
#添加以下行
vrrp_iptables

#添加vrrp脚本模块
vrrp_script check_haproxy {
        script "/opt/check_haproxy.sh"
        interval 5
}

#修改vrrp_instance VI_1 模块的内容
state MASTER
interface ens33
priority 120
virtual_ipaddress {
        20.0.0.100
}
#在该模块中添加脚本追踪组,执行check_haproxy里的脚本
track_script {
        check_haproxy
}

#删除下面的所有模块,保存

对test3的keepalive进行配置

基本和test2的配置一样,区别在于

  • 不用添加vrrp_script check_haproxy脚本模块和track_script脚本追踪组

  • 全局模块global_defs中设置

    router_id LVS_01

vrrp_instance VI_1 模块中,设置

state BACKUP
priority 100(不用修改,默认就100)

重启keepalived服务

systemctl restart keepalived

3.3 测试和验证

可以先查看test2和test3的haproxy服务是否正常

curl test2和test3,观察是否能实现对两台真实服务器(Nginx1和2)的轮询,如果能轮询,则haproxy服务正常

再检查主备工作是否正常

可以查看test2和test3的IP地址

ip addr

观察到VIP现在在主服务器test2上

然后 curl 20.0.0.100 ,即访问VIP地址,能否正常获取服务,如果正常轮询,说明keepalive正常,此时是主服务器test2在通过haproxy提供服务

然后停止test2主服务器的haproxy服务

systemctl stop haproxy

过5s,再查看test2和test3的IP地址 ip addr

观察到VIP现在在备服务器test3上,VIP漂移

再 curl 20.0.0.100 ,查看能否正常获取页面服务,如果正常轮询,说明keepalive正常,此时是备服务器test3在通过haproxy提供服务

相关推荐
耗同学一米八34 分钟前
2024 年河北省职业院校技能大赛网络建设与运维赛项样题四
运维·网络
速盾cdn1 小时前
速盾:CDN缓存的工作原理是什么?
网络·安全·web安全
网络安全-杰克2 小时前
网络安全概论
网络·web安全·php
怀澈1222 小时前
高性能服务器模型之Reactor(单线程版本)
linux·服务器·网络·c++
耗同学一米八3 小时前
2024 年河北省职业院校技能大赛网络建设与运维赛项样题二
运维·网络·mariadb
skywalk81633 小时前
树莓派2 安装raspberry os 并修改成固定ip
linux·服务器·网络·debian·树莓派·raspberry
C++忠实粉丝3 小时前
计算机网络socket编程(3)_UDP网络编程实现简单聊天室
linux·网络·c++·网络协议·计算机网络·udp
黑客Ela3 小时前
网络安全中常用浏览器插件、拓展
网络·安全·web安全·网络安全·php
qdprobot4 小时前
ESP32桌面天气摆件加文心一言AI大模型对话Mixly图形化编程STEAM创客教育
网络·人工智能·百度·文心一言·arduino