haproxy
HAProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
包括 GitHub、Bitbucket[3]、Stack Overflow[4]、Reddit、Tumblr、Twitter[5][6]和 Tuenti[7]在内的知名网站,及亚马逊网络服务系统都使用了HAProxy。
一,haproxy实现负载均衡
1.解压haproxy压缩包,安装源码编译软件,源码编译haproxy软件
在之前是通过make && make install进行编译,这是因为有Makefile文件(c语言的模块包的安装配置文件),源码编译可以指定我们的配置文件地方,而rpm时红帽官方的安装包,它会有一个默认的配置文件地址,我们可以查看是否有./examples/haproxy.spec,有的话就可以通过rpm的封装使他成为rpm安装包。
我们发现有.spec文件,那么我们就可以将他封装成rpm包,这样就可以指定我们的配置文件安装路径,那么我们得先安装一个rpm封装的软件
因为我们的haproxy时用c语言写的,那么我们在编译时也需要用到gcc
进行封装
显示还需要一个依赖性
再次进行封装
安装haproxy
2.配置haproxy的配置文件
首先我们将之前解压过的tz文件的包中的配置文件模版复制到haproxy的配置文件目录中
3。编辑配置文件
我们在配置文件中可以发现许多的参数都有重复,那么我们完全可以把它们放到默认变量中,这样可以减少我们的书写量
global
maxconn 10000
stats socket /var/run/haproxy.stat mode 600 level admin
log 127.0.0.1 local0
uid 200
gid 200
chroot /var/empty
daemon
defaults
mode http
log global
option httplog
option dontlognull
monitor-uri /monitoruri
maxconn 8000
timeout client 30s
option prefer-last-server
retries 2
option redispatch
timeout connect 5s
timeout server 5s
stats uri /admin/stats
# The public 'www' address in the DMZ
frontend public
bind *:80 name clear ##接收全部的80端口
#bind 192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem
stats uri /admin/stats
#use_backend static if { hdr_beg(host) -i img }
#use_backend static if { path_beg /img /css }
default_backend dynamic ##默认访问dynamic
# the application servers go here
backend dynamic
balance roundrobin ##轮询调度
server web1 172.25.77.2:80 check inter 1000 #后端服务器1
server web2 172.25.77.3:80 check inter 1000 #后端服务器2
4。编辑两个后端服务器server2和server3
5.测试负载均衡
由于之前的配置中我们已经默认的将负载均衡配置完了,那么我们直接进行测试即可
6.我们也可以在浏览器上测试
7.浏览器监控haproxy
记得我们在之前的配置中有这样一行参数
那么我们可以直接访问它
8.我们还有一个参数
他是一个简单的查看后端服务器状态的显示
/monitoruri则一般使用在脚本中,他在浏览器中如果后端服务器时好的会出现一个OK,这样在脚本中就可以通过结果的判断来做一个脚本监控
9.添加监控界面的访问控制
1.密码形式
2.黑名单
acl blacklist src 172.25.25.250 250加入黑名单
http-request deny if blacklist 黑名单的都丢弃
重启服务,然后进行测试
10.进行错误重定向
首先修改httpd的端口为8080,因为haproxy已经占用了80端口,并且修改默认发布内容
然后重启服务进行测试
11.生成日志
首先我们得知道我们的haproxy的日志名称是local0(配置文件中的)
编辑日志系统
vim /etc/rsyslog.conf
打开UDP
填写日志内容和查看路径
图示为显示local0的全部日志
重启日志服务
测试:访问,然后查看日志