Haproxy搭建web集群
haproxy是一个使用C语言编写的自由开源代码的一个软件,它提供了一个高可用性、负载均衡,以及基于TCP和http
的应用程序代理。haproxy特别适用于那些负载量特别大的web站点,这些站点通常又需要会话保持或七层处理,haproxy运行在当前的硬件上,完全可以支持数以万的并发连接。并且它的运行模式使它可以简单安全的进您当前的架构中,同时可以保护你的web服务器不会暴露在网络上。
haproxy实现了一种事件驱动,单一进程模型,此模型支持很大的并发连接数,多进程或者多线程模型受内存限制
很少能处理千并发连接,事件驱动模型因为在有更好的资源和时间管理和用户空间实现所有这些任务,所以没有这
问题。此模型是在多核系统上,这些程序通常扩展性比较差。这就是为什么它们必须进行优化,使每个cpu时间片做
更多的工作。
负载均衡常用的调度算法
1)RR算法算法是一种最简单最常用的一种算法,即轮询算法,例如A-B-C,第一个用户访问会被指派到A节点,第二个用户访问会被指派到B节点,第三个用户访问会指派到C节点,轮询分配的请求实现了负载均衡效果,根据每个节点的权重分配访问请求。
2)LC算法是一种最小链接数算法,例如A4 B5 C6 第一个用户连接会被派到A上,连接数变为了A5 B5 C6,第二个用户连接分发到A上,连接数变成了A6 B5 C6 第三个连接数又会分派到B 每次将新的请求分派到连接最小的客户端,因此算法相比较RR算法有很大的改进,是目前用的比较多的一种算法
3)SH算法用于一些会话记录在服务端的场景例如有三个节点A B C 第一个用户访问被分派到A 第二个用户访问会被指派到B,当一个用户在次访问它还是会分派到A 当第二个用户访问它还是分派到B,此调度器算法好处实现了会话保持,但某些ip访问量特大的情况下,会引起负载不均衡的效果,影响业务的使用
案例环境:
Haproxy: 192.168.92.150 Web1:192.168.92.151 Web2:192.168.92.152 客户端:windows10
一、配置web1服务器
这边yum install httpd的过程我就不演示了,安装好之后如下:
# service httpd start
正在启动 httpd:httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
[确定]
# echo "httpd1" > /var/www/html/index.html
2)配置web2服务器
# service httpd start
正在启动 httpd:httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
[确定]
# echo "httpd2" > /var/www/html/index.html
客户机分别访问web1&&web2的测试页
注意:如果访问不到请添加防火墙规则或者关闭防火墙
二、配置Haproxy服务器
1.编译安装Haproxy
# yum install gcc gcc-c++ -y && yum install pcre-devel bzip2-devel
Loaded plugins: product-id, refresh-packagekit, security, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
aaa | 3.9 kB 00:00 ...
aaa/primary_db | 3.1 MB 00:00 ...
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package gcc.x86_64 0:4.4.7-4.el6 will be installed
--> Processing Dependency: cpp = 4.4.7-4.el6 for package: gcc-4.4.7-4.el6.x86_64
2.解压编译安装
# tar zxf haproxy-1.4.24.tar.gz
[root@localhost ~]# cd haproxy-1.4.24
[root@localhost haproxy-1.4.24]# ls
CHANGELOG doc examples LICENSE Makefile.bsd README src tests VERDATE
contrib ebtree include Makefile Makefile.osx ROADMAP SUBVERS TODO VERSION
[root@localhost haproxy-1.4.24]# make TARGET=linux26
CHANGELOG doc examples LICENSE Makefile.bsd README src tests VERDATE
contrib ebtree include Makefile Makefile.osx ROADMAP SUBVERS TODO VERSION
[root@localhost haproxy-1.4.24]# make TARGET=linux26
#make install
3.Haproxy服务配置
1)创建配置文件目录,把haproxy.cfg文件复制到配置文件目录
# mkdir /etc/haproxy
# cp examples/haproxy.cfg /etc/haproxy/
2)配置项介绍
haproxy的配置文件分为三个部分,global,defaults,listen。global为全局配置,defaults为默认配置,listen为应用组件配置
# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
log 127.0.0.1 local0 //配置日志记录,local0为日志设备,默认存放到系统日志
log 127.0.0.1 local1 notice //notice为日志级别,通常有24个级别
maxconn 4096 //最大连接数
uid 99 //用户uid
gid 99 //用户gid
defaults
log global //定义日志为global配置中的定义
mode http //模式为http
option httplog //采用http日志格式记录日志
retries 3 //检查节点服务器失败次数,达到三次失败,则节点不可用
maxconn 2000 //最大连接数
contimeout 5000 //连接超时时间
clitimeout 50000 //客户端超时时间
srvtimeout 50000 //服务器超时时间
listen appli2-insert 0.0.0.0:10002 //定义一个appli2-insert应用
option httpchk/index.html //检查服务器index.html文件
balance roundrobin //负载均衡调度器轮询算法
server inst1 192.168.114.56:80 cookie server01 check inter 2000 fall 3 在线节点
server inst2 192.168.114.56:81 cookie server02 check inter 2000 fall 3 备用节点
根据目前的群集环境,修改haproxy.cfg文件内容如下:
# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
uid 99
gid 99
daemon
#debug
#quiet
defaults
log global
mode http
option httplog
option dontlognull
retries 3
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen appli1-rewrite 0.0.0.0:10001
cookie SERVERID rewrite
balance roundrobin
server app1_1 192.168.34.23:8080 cookie app1inst1 check inter 2000 rise 2 fall 5
server app1_2 192.168.34.32:8080 cookie app1inst2 check inter 2000 rise 2 fall 5
server app1_3 192.168.34.27:8080 cookie app1inst3 check inter 2000 rise 2 fall 5
server app1_4 192.168.34.42:8080 cookie app1inst4 check inter 2000 rise 2 fall 5
listen webcluster 0.0.0.0:80
option httpchk GET /index.html
balance roundrobin
server inst1 192.168.92.151:80 check inter 2000 fall 3
server inst2 192.168.92.152:80 check inter 2000 fall 3
#cp ~/haproxy-1.4.24/examples/haproxy.init /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
chmod +x /etc/init.d/haproxy
/etc/init.d/haproxy start
Starting haproxy: [确定]
最后我们测试web集群,验证集群是否正常,一个集群一般具备两个特征,第一个是高性能,第二个是高可用。
1)测试高性能
在客户端使用浏览器输入http://192.168.92.150显示信息如下:
2)测试高可用,现在把92.152停掉再次访问
# service httpd stop
停止 httpd:[确定]
希望对您有所帮助,再见