HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理支持虚拟主机它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中 同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动, 单一进程模型此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务所以没有这些问题。此模型的弊端是在多核系统上这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
代理
Server25.example.com 172.25.45.25
Server26.example.com 172.25.45.26
Realserver
Server27.example.com 172.25.45.27
Server28.example.com 172.25.45.28
####HAproxy的安装配置
Server25和server26
yum install haproxy -y
cd /etc/haproxy/
vim haproxy.cfg
注释 60-86 行然后
87 listen westos 172.25.45.100:80
88 balance roundrobin
89 server web1 172.25.45.27:80 check
90 server web2 172.25.45.28:80 check
netstat -antlp 查看有没有别的服务影响haproxy
/etc/init.d/haproxy start
Server27
yum install httpd
vim /var/www/html/index.html 编辑内容为:
server27.example.com
/etc/init.d/httpd start
Server28:
yum install httpd
vim /var/www/html/index.html 编辑内容为:
server28.example.com
/etc/init.d/httpd start
##########Heartbeat的配置
Server25
yum install *.rpm -y
rpm -q heartbeat -d 查看heartbeat的相关配置文件夹目录
cp /usr/share/doc/heartbeat-3.0.4/{authkeys,ha.cf,haresources} /etc/ha.d
vim /etc/ha.d/ha.cf 修改内容为:
34 logfacility local0##直接往系统日志写入
48 keepalive 2##心跳间隔
56 deadtime 30##心跳无反应被认为服务挂掉的时间
61 warntime 10##心跳无反应警告时间
71 initdead 60##资源初始化
76 udpport 649## UDP 端口 --> 自己设置 <同一个交换机上的端口不能重复>
91 bcast eth0 # Linux##广播
157 auto_failback on##服务自动回切
211 node server25.example.com##主机节点信息前为主后为辅
212 node server26.example.com##被机节点信息
220 ping 172.25.45.250## ping 某个 ip 要求能 ping 通确定网络服务此处 ip 一般为网关地址与fence配合使用来进行断网服务如:server26可以ping通某个ip而server5不行此时fence便会进行断电重启server25
253 respawn hacluster /usr/lib64/heartbeat/ipfail
259 apiauth ipfail gid=haclient uid=hacluster
vim /etc/ha.d/authkeys 修改内容为
23 auth 1
24 1 crc##明文
chmod 600 authkeys
vim /etc/ha.d/haresources 修改内容为:
151 server25.example.com IPaddr::172.25.45.100/24/eth0 haproxy## 此处域名一定为
主机的域名ip为 vip(虚拟ip) haproxy表示需要调用的脚本名称
scp authkeys ha.cf haresources 172.25.45.26:/etc/ha.d
/etc/init.d/heartbeat start
Tail -f /var/log/messages
Ip a s 此时虚拟ip在server25上
Server26
yum install *.rpm -y
/etc/init.d/heartbeat start
测试
当虚拟ip在server25上时在真机测试
此时关掉server25上的heartbeat服务server26便会接管server25上的服务此时虚拟ip在server26上
此时在真机上继续测试,测试结果说明server26接管了server25的服务
########### 查看详细信息 #######
Vim /etc/haproxy/ haproxy.cfg 修改内容为:
/etc/init.d/haproxy reload
@@@检查服务运行测试:在浏览器端输入 172.25.45.100:8080/status 然后在server27和server28关闭httpd服务看颜色的变化
######### 自定义前端和后端 后端的动静分离##########
Server25:
vim /etc/haproxy/haproxy.cfg 修改内容为:
frontend westos 172.25.45.100:80 ##自定义前端
acl url_static path_beg -i /images ##定义url_static 条件:以/images开头
acl url_static path_end -i .jpg .gif ##定义url_static 条件:以.jpg .gif .png 结尾
use_backend static if url_static
default_backend app ###默认使用动态如果符合 url_static就使用静态
backend static
balance roundrobin
server web1 172.25.45.27:80 check ###静态后端
backend app
balance roundrobin
server web2 172.25.45.28:80 check ##动态后端
server27:
cd /var/www/html
mkdir images
cd images 然后往该目录中放入OSI.gif与redhat.jpg
测试:在浏览器中输入 172.25.45.100/images/redhat.jpg 或者 172.25.45.100/images/OSI.gif
此处以/images开头以.gif结尾 (静)
若直接输入172.25.45.100则访问动)
############## 设置访问权限 ##########
Server25
vim /etc/haproxy/haproxy.cfg 修改内容为
block if badhost##不允许访问
测试:真机(172.25.45.250)在浏览器中输入 172.25.15.100会有 403 报错
Yum install httpd -y
vim /etc/httpd/conf/httpd.conf 修改默认端口:
135 #Listen 12.34.56.78:80
136 Listen 8000
vim /var/www/html/index.html 修改内容为:
/etc/init.d/httpd start
继续在server25上操作
vim /etc/haproxy/haproxy.cfg 修改内容为
添加95、96行
真机测试
也可以这样做
vim /etc/haproxy/haproxy.cfg 修改内容为
注释掉95、96行添加106行
测试在真机访问
关掉server28的httpd
[[email protected] Desktop]$ curl 172.25.45.100
网页正在维护中
############### 自动补全全域名 #########
真机:
vim /etc/hosts:
172.25.45.100 server25.example.comwestos.orgwww.westos.org
Server25
vim /etc/haproxy.conf 修改内容为:
添加97-100行注释带年109行
99##在浏览器中输入 westos.org 自动补充成 www.westos.org
100##在浏览器中输入 172.25.30.99 自动补充成 www.westos.org
/etc/init.d/haproxy reload
测试:真机(172.25.45.250)在浏览器中输入 westos.org 或者 172.25.45.100 会自动补齐为www.westos.org
################### 读写分离 ############
Server25:
vim /etc/haproxy.conf 修改内容为
添加100-103行将108、109修改为下图
acl read method GET##定义读取
acl read method HEAD##定义读取
acl write method PUT##定义写入/上传
acl write method POST##定义写入/上传
use_backend app if write##当 写入/上传 时使用app动态后端
default_backend static##默认后端为静态static后端
/etc/init.d/haproxy reload
Server27 和 server28都要做的操作:
cd /var/www/html
cd upload/
mv * ..
cd ..
vim upload_file.php 修改第 4 行内容:
&& ($_FILES["file"]["size"] < 2000000))##此处增大了上传文件指定大小
chmod 777 upload/
/etc/init.d/httpd restart
测试:在真机浏览器中输入 www.westos.org/images 中可以读取
在真机浏览器中输入 www.westos.org 中可以上传文件(文件格式为.jpg .gif .png -->在 /etc/haproxy/haproxy.conf 中可查)