HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件。也是是一种高效、可靠、免费的高可用及负载均衡解决方案,非常适合于高负载站点的七层数据请求。客户端通过HAProxy代理服务器获得站点页面,而代理服务器收到客户请求后根据负载均衡的规则将请求数据转发给后端真实服务器。
同一客户端访问服务器,HAProxy保持回话的三种方案:
1 HAProxy将客户端ip进行Hash计算并保存,由此确保相同IP访问时被转发到同一真实服务器上。
2 HAProxy依靠真实服务器发送给客户端的cookie信息进行回话保持。
3 HAProxy保存真实服务器的session及服务器标识,实现会话保持功能。
安装包:
haproxy-1.6.11.tar.gz
实验环境:
server1 server2 是集群节点
server3 server4是服务后端
如果是新的环境
需要下载gcc,openssl-devel
[root@server1 ~]# yum install rpm-build-4.8.0-37.el6.x86_64 -y
[root@server1 ~]# yum install pcre-devel -y
[root@server1 ~]# rpmbuild -tb haproxy-1.6.11.tar.gz
[root@server1 ~]# cd rpmbuild/RPMS/
[root@server1 RPMS]# ls
[root@server1 RPMS]# cd x86_64/
[root@server1 x86_64]# rpm -qpl haproxy-1.6.11-1.x86_64.rpm
[root@server1 x86_64]# ls
haproxy-1.6.11-1.x86_64.rpm
[root@server1 x86_64]# rpm -ivh haproxy-1.6.11-1.x86_64.rpm
[root@server1 x86_64]# ls
haproxy-1.6.11-1.x86_64.rpm
[root@server1 x86_64]# cd
[root@server1 ~]# ls
[root@server1 ~]# tar zxf haproxy-1.6.11.tar.gz
[root@server1 ~]# ls
[root@server1 ~]# cd haproxy-1.6.11
[root@server1 haproxy-1.6.11]# ls
[root@server1 haproxy-1.6.11]# cd examples/
[root@server1 examples]# ls
[root@server1 examples]# cd /etc/haproxy/
[root@server1 examples]# cp content-sw-sample.cfg /etc/haproxy/haproxy.cfg
[root@server1 haproxy]# ls
haproxy.cfg
[root@server1 haproxy]# grep 200 /etc/haproxy/
[root@server1 haproxy]# groupadd -g 200 haproxy ##建立组
[root@server1 haproxy]# useradd -u 200 -g 200 -M haproxy ##建立用户
[root@server1 haproxy]# id haproxy
uid=200(haproxy) gid=200(haproxy) groups=200(haproxy)
[root@server1 haproxy]# vim /etc/security/limits.conf
[root@server1 haproxy]# vim haproxy.cfg
[root@server1 haproxy]# /etc/init.d/haproxy start
测试网页访问:
https://172.25.41.1
http://172.25.41.1/monitoruri
http://172.25.41.1/admin/stats
如果将后端服务器server2和server3中httpd关闭
[root@server1 haproxy]# cd /etc/haproxy/
[root@server1 haproxy]# vim /etc/rsyslog.conf ##第一次修改
[root@server1 haproxy]# /etc/init.d/rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
[root@server1 haproxy]# cd /var/log/
[root@server1 log]# cat haproxy.log ##查看日至
网页访问后日志就有了
[root@server1 log]# cat haproxy.log ##再次查看日志
Aug 4 03:01:09 localhost haproxy[1883]: 172.25.41.250:36726 [04/Aug/2018:03:01:09.483] public public/ 0/0/0/0/0 200 14899 - - LR-- 1/1/0/0/0 0/0 "GET /admin/stats HTTP/1.1"
[root@server1 log]# cd /etc/haproxy/
[root@server1 haproxy]# vim haproxy.cfg ##第二次修改
[root@server1 haproxy]# /etc/init.d/haproxy reload
网页测试:只有server2的内容
在 /etc/rsyslog.conf 文件中:
在haproxy.cfg文件中第一次更改:
在haproxy.cfg文件中第二次更改:
测试:
网页访问只有server2内容
在server3中下载php
[root@server3 ~]# yum install php -y
[root@server3 ~]# vim /var/www/html/index.php
[root@server3 ~]# /etc/init.d/httpd restart
[root@server1 haproxy]# vim haproxy.cfg
[root@server1 haproxy]# /etc/init.d/haproxy reload
[root@server1 haproxy]# vim haproxy.cfg ##修改内容
[root@server1 haproxy]# /etc/init.d/haproxy reload
[root@server1 haproxy]# yum install -y httpd
[root@server1 haproxy]# vim /etc/httpd/conf/httpd.conf ##更改端口
[root@server1 haproxy]# /etc/init.d/httpd start
[root@server1 haproxy]# vim /var/www/html/index.html
[root@server1 haproxy]# cat /var/www/html/index.html
网站正在维护.....
[root@server1 haproxy]# /etc/init.d/haproxy reload
[root@server1 haproxy]# vim haproxy.cfg
[root@server1 haproxy]# /etc/init.d/haproxy reload
[root@server4 ~]# curl 172.25.41.1 ##可以看到内容
[root@server1 haproxy]# vim haproxy.cfg
[root@server1 haproxy]# /etc/init.d/haproxy reload
[root@server4 ~]# curl 172.25.41.1 ##看不到内容
[root@server1 haproxy]# vim haproxy.cfg
[root@server1 haproxy]# /etc/init.d/haproxy reload
配置文件:
测试:
输入server1的ip会跳转到百度界面
需要上传一张图片(物理机到server2)
[root@server1 haproxy]# vim haproxy.cfg
[root@server1 haproxy]# /etc/init.d/haproxy reload
[root@server2 ~]# cd /var/www/html
[root@server2 html]# mkdir images
[root@server2 html]# cd
[root@server2 ~]# mv redhat.jpg /var/www/html/images/
[root@foundation41 Desktop]# scp -r upload/ [email protected]:/root
[root@foundation41 Desktop]# scp -r upload/ [email protected]:/root
[root@server2 ~]# ls
anaconda-ks.cfg install.log install.log.syslog upload
[root@server2 ~]# cd upload/
[root@server2 upload]# mv * /var/www/html/
[root@server2 upload]# cd ..
[root@server2 ~]# mv upload/ /var/www/html/
[root@server2 ~]# cd /var/www/html/
[root@server2 html]# vim upload_file.php
[root@server2 html]# /etc/init.d/httpd restart
server2和server3同样的做法