Haproxy搭建Web群集(群集)
Jay&& 2024-08-18 10:03:09 阅读 72
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动**, **单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter和 Tuenti在内的知名网站,及亚马逊网络服务系统都使用了HAProxy。
负载均衡
二层负载均衡(Mac)
用于虚拟mac地址方式,外部对虚拟mac地址请求,负载均衡接收后分配给后端实际的mac地址相应。
三层负载均衡(IP)
一般用于虚拟ip地址的方式,外部对虚拟IP地址请求,负载均衡接收后分配给后端实际的的IP地址相应。
四层负载均衡(Tcp)
在三层负载均衡的基础上,用IP+Port接收请求,再转发到对应的机器上。
七层负载均衡(Http)
根据虚拟的url或者IP,主机名接收请求,再转发到相应的处理服务器上。
实验图:
利用haproxy实现web服务器的代理及高可用,负载均衡;
实验主机:101 102 103 104
101:haproxy服务器
102:web01
103:web02
104:客户端进行测试
首先配置两台web服务器,这里采用源码包的方式进行安装nginx;因为两个网站的步骤大致一样,就是测试文件不一样;
开启同步会话;仅限102 103
安装编译环境及用到的工具;
再创建程序用户并指定登录shell;
将源码包拉到两个服务器开始解压等操作;
cd到解压目录开始配置;
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
然后编译及编译后安装;
命令优化;
然后取消同步会话功能;创建各自的测试文件;
然后关闭两个服务器的防火墙及内核安全机制;
检查配置文件语句是否有错误,然后开启该服务,并进行查询;
开始配置haproxy;
先关闭防护墙及内核安全机制;
安装编译环境;
把压缩包拉进去开始解压及编译;
解压后cd到解压目录开始编译,且编译的时候需要指定内核的版本;
然后编译后安装;make install
建立haproxy的配置文件;
然后创建服务脚本;
给这个系统管理脚本一个执行权;并设置成系统服务;
修改haproxy的配置文件;
把listen模块的删除掉,自己写语句;
补充:里面的单位都是毫秒;1秒等于1000毫秒;
语句解释:
各个语句的解释
global
log 127.0.0.1 local0 \\配置日志记录,local0为日志设备,默认是系统日志
log 127.0.0.1 local1 notice \\日志级别为notice
#log loghost local0 info
maxconn 4096 \\最大连接数
uid 99 \\用户uid
gid 99 \\用户gid
daemon \\以守护进程的方式运行
#debug \\调试模式,输出启动信息到标准输出
#quiet \\安静模式,启动时无输出
defaults
log global \\使用globle中定义的日志
mode http \\模式为http
option httplog \\采用http的格式记录日志
option dontlognull \\保证HAProxy不记录上级负载均衡发送过来的用于检测状态数据的心跳包
retries 3 \\检查节点连接失败的次数,超过3次认为节点不可用
# redispatch \\当负载很高时,自动结束当前队列处理比较久的连接
maxconn 2000 \\最大连接数
contimeout 5000 \\连接超时时间ms
clitimeout 50000 客户端超时时间ms
srvtimeout 50000 服务器超时时间ms
listen webcluster 0.0.0.0:80 \\定义群集和监听的端口号
option httpchk GET /index.html \\检查服务器的index.html文件,心跳检测URL设置
balance roundrobin \\负载均衡的调度算法为轮询
server inst1 192.168.1.61:80 check inter 2000 fall 3 \\定义在线节点
server inst2 192.168.1.62:80 check inter 2000 fall 3
check inter 2000是检测心跳频率(每2000ms检测一次),fall 3是3次失败认为服务器不可用
在新版本中,超时的设置做了调整,具体如下
contimeout 被 timeout connect取代:定义haproxy将客户端请求转发至后端服务器所等待的超时时长
clitimeout 被timeout client取代:客户端非活动状态的超时时长,是 app 连接 haproxy的时间
srvtimeout 被timeout server取代:客户端与服务器端建立连接后,等待服务器端的超时时长,是haproxy 连接后端web服务器的时间.
注释:
haproxy共有八种调度算法
1) balance leastconn 最少连接数
2) balance roundrobin 轮询
3) balance source 根据客户端IP进行哈希的方式
4) static-rr 根据权重
5) uri 根据请求的URI
6) url_param 根据请求的URl参数
7) hdr(name) 根据HTTP请求头来锁定每一次HTTP请求
8) rdp-cookie(name) 根据cookie(name)来锁定并哈希每一次TCP请求
chroot /usr/share/haproxy \\也就是改变程序执行时所参考的根目录位置,如果有此代码,需要创建此目录
关于日志级别
static Level DEBUG
DEBUG Level指出细粒度信息事件对调试应用程序是非常有帮助的。
static Level INFO
INFO level表明 消息在粗粒度级别上突出强调应用程序的运行过程。
static Level WARN
WARN level表明会出现潜在错误的情形。
static Level ERROR
ERROR level指出虽然发生错误事件,但仍然不影响系统的继续运行。
static Level FATAL
FATAL level指出每个严重的错误事件将会导致应用程序的退出。
另外,还有两个可用的特别的日志记录级别:
static Level ALL
ALL Level是最低等级的,用于打开所有日志记录。
static Level OFF
OFF Level是最高等级的,用于关闭所有日志记录。
启动该服务;
再开启另外的客户机进行测试;104
对于haporxy的日志进行设置;
添加lcoal3的语句;
编写haproxy日志文件;
注释:
$ModLoad imudp 采集日志的协议UDP
$UDPServerRun 514 指定日志采集使用的端口号
local3.* /var/log/haproxy.log 指定日志存放位置
最后重启采集日志的服务(rsyslog)及haproxy服务;
再用客户机进行试验;并检查haproxy上的日志文件中有没有采集到信息;
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。