1.原理与简介
1.HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上
2.HAProxy实现了一种事件驱动**, **单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter和 Tuenti在内的知名网站,及亚马逊网络服务系统都使用了HAProxy
2.脚本部署服务
以下实验环境均为 CentOS7.9,需要三台如下:
一台Haproxy 两台web服务器
脚本如下:
#!/bin/bash
#function: Haproxy一键搭建web集群
#author: tommypeng 20230912
#####root判断#####
if
[ "$USER" != "root" ]
then
echo "错误:非root用户,权限不足!"
exit 0
fi
############防火墙与高级权限##########
systemctl stop firewalld && systemctl disable firewalld && echo "防火墙已经关闭"
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config && echo "关闭selinux"
echo "运行之前请先确保是否部署两台web服务器,是否符合条件"
read -ep "是否符合以上条件请输入(yes/no):" niuma
case $niuma in
yes)
echo "滴滴 帅哥通行证,符合条件,继续执行..."
;;
no)
echo "帅哥通行证不符合条件,请先部署两台web服务器"
exit 0
;;
*)
echo "不符合,即将退出脚本"
exit 1
esac
read -ep "请输入第一台web服务器IP地址:" web1
read -ep "请输入第二台web服务器IP地址:" web2
############安装依赖包############
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
##########上传安装包#################
cd /opt/
bao_path="haproxy-1.5.19.tar.gz"
if [ -e "$bao_path" ]; then
echo "帅哥通行卡已存在,继续执行喽!!!"
else
echo "帅哥通行卡不存在,安装个毛线"
if [ $? -eq 0 ]; then
echo "兄弟请上传安装包到/opt/"
exit 1
fi
fi
##########解压包#######
tar zxvf haproxy-1.5.19.tar.gz && cd haproxy-1.5.19/
##########编译安装########
make TARGET=linux2628 ARCH=x86_64
if [ $? -eq 0 ]; then
make install
if [ $? -eq 0 ]; then
echo "滴滴,帅哥通信证通过!!!"
fi
else
echo "帅哥通信证失效喽,自己慢慢排查吧!!!"
exit 1
fi
##############创建配置文件存放目录#########
mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/
cd /etc/haproxy/ && cp haproxy.cfg haproxy.bak
##########编辑配置文件###########
cat > /etc/haproxy/haproxy.cfg << EOF
# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
log /dev/log local0 info
log /dev/log local0 notice
#log loghost local0 info
maxconn 4096
#chroot /usr/share/haproxy
uid 99
gid 99
daemon
#debug
#quiet
defaults
log global
mode http
option httplog
option dontlognull
retries 3
redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webcluster 0.0.0.0:80
option httpchk GET /index.html
balance roundrobin
server inst1 $web1:80 check inter 2000 fall 3
server inst2 $web2:80 check inter 2000 fall 3
EOF
#######复制文件####
cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
cd /etc/init.d/
####添加执行权限###
chmod +x haproxy
#######将haproxy服务加入到chkconfig管理#########
chkconfig --add /etc/init.d/haproxy
##########添加软连接######
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
#########启动Haproxy服务#########
service haproxy start
测试实验如下:
使用Haproxy服务的本机IP进行访问,刷新网页可以进行轮询
nginx脚本参考链接如下:
测试实验如下:
部署完两台nginx之后,要在nginx插入网页内容如下:
echo web1 > /usr/local/nginx/html/index.html ##192.168.75.154 nginx 1
echo web2 > /usr/local/nginx/html/index.html ##192.168.75.186 nginx 2
使用Haproxy服务的本机IP进行访问,刷新网页可以进行轮询
实验也就完成了,觉得不错的可以关注(●'◡'●) !!!