本次使用haproxy仅测试web端的高可用以及负载均衡,存在的问题是haproxy是单点,所以还需要借助keepalived对haproxy高可用,下次说明。 服务器: 10.0.0.152:haproxy 10.0.0.154 10.0.0.155 http
需要掌握的是: 1.高可用和负载均衡; 2.系统日志rsyslog; 3.动静分离 一:haproxy简介: HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代 理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。 HAProxy的优点: 1、HAProxy是支持虚拟主机的,可以工作在4、7层(支持多网段); 2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作; 3、支持url检测后端的服务器; 4、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的; 5、HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS; 6、HAProxy的算法较多,达到8种; 安装: #wget http://fossies.org/linux/misc/haproxy-1.6.9.tar.gz #解压 #tar -zxvf haproxy-1.6.9.tar.gz #cd haproxy-1.6.9 #安装 #make TARGET=linux3100 ARCH=x86_64 PREFIX=/usr/local/haproxy #make install PREFIX=/usr/local/haproxy #groupadd haproxy #useradd -g haproxy haproxy #参数说明 TARGET=linux3100 #内核版本, ARCH=x86_64 #系统位数 PREFIX=/usr/local/haprpxy #/usr/local/haprpxy为haprpxy安装路径 #touch /usr/local/haproxy/conf/haproxy.cfg(此配置文件需要自己手动创建) 补充: 在Unix类操作系统上,rsyslog广泛应用于系统日志。rsyslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog的服务器。接收syslog的服务器可以对多个设备的syslog消息进行统一的存储,或者解析其中的内容做相应的处理。常见的应用场景是网络管理工具、安全管理系统、日志审计系统。 开启UDP的端口,并指定日志记录路径。(/etc/rsyslog.conf)

/etc/sysconfig/rsyslog修改:

然后重启service rsyslog restart 修改haproxy配置文件,原本那是没有的,现在要手动创建。 [root@xipenggang conf]# pwd /usr/local/haproxy/conf [root@xipenggang conf]# cat haproxy.cfg global log 127.0.0.1 local2 maxconn 65536 chroot /usr/local/haproxy pidfile /var/run/haproxy.pid user haproxy group haproxy daemon

defaults mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK log global option dontlognull #不记录健康检查日志信息 option httpclose #每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只能模拟这种模式的实现 retries 3 #三次连接失败就认为是服务器不可用,也可以通过后面设置 maxconn 65536 timeout connect 70000 timeout client 70000 timeout server 70000

listen stats 监控 bind 0.0.0.0:1080 端口 stats uri /admin-status 监控的uri stats auth admin:admin 用户用:密码 mode http option httplog

frontend main bind :8088 acl web hdr(host) -i www.abc.com:8088 #acl后面是规则名称,-i为忽略大小写,后面跟的是要访问的域名,如果访问www.abc.com这个域名,就触发web规则,。 acl img hdr(host) -i img.abc.com:8088 use_backend webserver if web #如果上面定义的web规则被触发,即访问www.abc.com,就将请求分发到webserver这个作用域 use_backend imgserver if img # defaultbackend dynamic #不满足则响应backend的默认页面

backend webserver mode http balance roundrobin server web1 10.0.0.154:80 check inter 2000 fall 3 server web2 10.0.0.155:80 check inter 2000 fall 3 #check inter 2000 是检测心跳频率 fall 3是3次失败认为服务器不可用,weight代表权重

backend imgserver mode http #option httpchk /index.php balance roundrobin server img01 10.0.0.152:80 check inter 2000 fall 3 server img02 10.0.0.152:80 check inter 2000 fall 3

#backend dynamic #  balance roundrobin #  server test1 10.0.0.152:80 check maxconn 2000 #  server test2 10.0.0.155:80 check maxconn 2000

需要在haproxy本机上添加 #echo “10.0.0.152 www.abc.com img.abc.com” >> /etc/hosts 启动命令: /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg 查看监控:(监控可以反应各个节点的状态)

测试: 为了测试,我在154,155两台主机上安装httpd服务,并在测试页面分别填写:Two 10.0.0.154和10.0.0.155;并重启两台。 然后在haproxy上测试:(我前面使用的轮询的算法) 所以就是这种样子 使用权重:

这样就起到负载均衡的作用的; 下来测试一下web的高可用; 手动的把154上面的httpd服务停掉; service httpd stop 在测试: 并不会在去访问154;达到高可用性; 接下来要结合keepalived使用。