HAProxy提供高可用性、负载均衡以及基于TCPHTTP应用的代理支持虚拟主机它是免费、快速并且可靠的一种解决方案。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的安装配置

Server25server26

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

wKioL1jP5I_jQIPuAACQyysEF94736.png-wh_50 

 

yum install *.rpm -y

 

rpm -q heartbeat -d  查看heartbeat的相关配置文件夹目录

 

heartbeat+haproxy_第1张图片 

 

 

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通某个ipserver5不行此时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## 此处域名一定为

 

主机的域名ipvip(虚拟ip)  haproxy表示需要调用的脚本名称

scp authkeys ha.cf haresources 172.25.45.26:/etc/ha.d

/etc/init.d/heartbeat start

wKiom1jP5KnT3k4kAABzA73ynWE617.png-wh_50 

 

Tail  -f  /var/log/messages

Ip  a  s 此时虚拟ipserver25

 

Server26

 

wKioL1jP5LTBIgHAAACQyysEF94210.png-wh_50 

 

yum install *.rpm -y

/etc/init.d/heartbeat start

 

测试

当虚拟ipserver25上时在真机测试

 wKioL1jP5NSwpmbtAACGkLXdN_A398.png-wh_50

 

此时关掉server25上的heartbeat服务server26便会接管server25上的服务此时虚拟ipserver26

wKioL1jP5OHD-eorAACBI8CiBsg234.png-wh_50 

 

此时在真机上继续测试,测试结果说明server26接管了server25的服务

 

 

wKiom1jP5O6htn7QAACGkLXdN_A875.png-wh_50 

 

 

########### 查看详细信息 #######

 Vim  /etc/haproxy/ haproxy.cfg 修改内容为:

 

heartbeat+haproxy_第2张图片 

 

 /etc/init.d/haproxy reload

 

@@@检查服务运行测试:在浏览器端输入 172.25.45.100:8080/status 然后在server27server28关闭httpd服务看颜色的变化

heartbeat+haproxy_第3张图片 

 

######### 自定义前端和后端 后端的动静分离##########

Server25:

vim /etc/haproxy/haproxy.cfg 修改内容为:

heartbeat+haproxy_第4张图片 

 

frontend westos 172.25.45.100:80        ##自定义前端

acl url_static       path_beg       -i /p_w_picpaths   ##定义url_static 条件:/p_w_picpaths开头

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 p_w_picpaths

cd p_w_picpaths 然后往该目录中放入OSI.gifredhat.jpg

 

 

测试:在浏览器中输入  172.25.45.100/p_w_picpaths/redhat.jpg 或者 172.25.45.100/p_w_picpaths/OSI.gif

此处以/p_w_picpaths开头以.gif结尾 ()

heartbeat+haproxy_第5张图片 

 

若直接输入172.25.45.100则访问动)

wKiom1jP5SjgFJDaAAAeu0kDe3E360.png-wh_50 

 

 

 

 

 

 

############## 设置访问权限 ##########

 

Server25

vim /etc/haproxy/haproxy.cfg 修改内容为

 

wKiom1jP5TXxO5WDAABVBvPkpQQ899.png-wh_50 

 

block if badhost##不允许访问

 

 

测试:真机(172.25.45.250)在浏览器中输入  172.25.15.100会有 403 报错

heartbeat+haproxy_第6张图片 

 

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 修改内容为:

wKiom1jP5UngRBftAAAetyBdZ4c346.png-wh_50 

 

/etc/init.d/httpd start

 

继续在server25上操作

vim /etc/haproxy/haproxy.cfg 修改内容为

 

添加9596

 

 heartbeat+haproxy_第7张图片

真机测试

 wKiom1jP5mSg1JEnAAAc7UZVHBs075.png-wh_50

 

 

也可以这样做

 

vim /etc/haproxy/haproxy.cfg 修改内容为

 

注释掉9596行添加106

wKioL1jP5njyf2_UAABbH-Sh684469.png-wh_50 

 

测试在真机访问

关掉server28httpd

 

[kiosk@foundation45 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

heartbeat+haproxy_第8张图片 

 

 

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

 

wKiom1jP5prRnbkyAAAY2pRmOss529.png-wh_50 

 

################### 读写分离 ############

 

Server25:

vim /etc/haproxy.conf 修改内容为

 

添加100-103行将108109修改为下图

heartbeat+haproxy_第9张图片 

 

 

 

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/p_w_picpaths 中可以读取

在真机浏览器中输入 www.westos.org 中可以上传文件(文件格式为.jpg .gif .png -->/etc/haproxy/haproxy.conf 中可查)