##集群套件
工作在7层
haproxy
反向代理
在虚拟机3上配置haproxy服务
cd /etc/haproxy/
vim haproxy.cfg
listen westos *:80
balance roundrobin
server web1 172.25.20.1:80 check
server web2 172.25.20.2:80 check
listen admin *:8080
stats enable
stats uri /status ##监控界面的地址
stats auth admin:westos ##帐号和密码
stats refresh 5s ##刷新频率
更改配置文件,将60-86行全部注释
/etc/init.d/haprixy reload
在server1和2上配置httpd服务
真机访问:
[root@foundation20 ~]# curl 172.25.20.3
server1
[root@foundation20 ~]# curl 172.25.20.3
server2
[root@foundation20 ~]# curl 172.25.20.3
server1
[root@foundation20 ~]# curl 172.25.20.3
server2
打开浏览器访问http://172.25.20.3:8080/status
能够查看到访问图形界面,登陆监控界面
##常见参数及意义
timeout http-request 10s ##载客户端建立连接但不请求数据时关闭客户端连接
timeout queue 1m ##等待最大时长
timeout connect 10s ##定义haproxy将客户端请求转发至后端服务器所等待时长
timeout client 1m ##客户端非活跃状态的超时时长
timeout server 1m ##客户端与服务器端建立连接后,等待服务器端的超时时长
timeout http-keep-alive 10s ##定义保持连接的超时时长
timeout check 10s ##健康状态监测时的超时。过短会误判,过长会消耗资源
maxconn 3000 ##每个server的最大连接数
##设置动静分离
在server3上:
86 listen admin *:8080
87 stats enable
88 stats uri /status
89 stats auth admin:westos
90 stats refresh 5s
91
92
93
94 frontend westos *:80 ##访问80端口时
95 acl url_static path_beg -i /images
96 acl url_static path_end -i .jpg .gif .png
97
98 use_backend static if url_static
99 default_backend app
100
101 backend static ##静态
102 server web2 172.25.20.2:80 check
103 backend app ##设置备机
104 # balance roundrobin
105 server web1 172.25.20.1:80 check
106 server web2 172.25.20.3:8000 check
在server2上:
配置httpd服务,在默认发布目录下新建目录/images
在images里放置一个图片(图片都为静态)
开启httpd服务
打开浏览器访问http://172.25.20.3/
http://172.25.20.3/images/redhat.jpg
清除缓存后再次访问
##访问重定向
302 临时重定向 (盗链别人的网站)
301 永久重定向 搜索引擎抓取
200 OK
在服务器3上:
[root@server3 haproxy]# vim haproxy.cfg
94 frontend westos *:80
95 acl url_static path_beg -i /images
96 acl url_static path_end -i .jpg .gif .png
97
98 acl badhost src 172.25.20.250
99
100 block if badhost
101 errorloc 403 http://172.25.20.3:8000
102 #redirect location http://172.25.20.3:8000 if badhost ##两种方法都可以访问重定向
103
104 use_backend static if url_static
105 default_backend app
106
107 backend static
108 server web2 172.25.20.2:80 check
109 backend app
110 # balance roundrobin
111 server web1 172.25.20.1:80 check
[root@server3 haproxy]# vim /var/www/html/index.html
1 asjdhfjldskjldskjvlk
重启服务
[root@server3 haproxy]# /etc/init.d/httpd restart
Stopping httpd: [ OK ]
Starting httpd: httpd: Could not reliably determine the server’s fully qualified domain name, using 172.25.20.3 for ServerName
[ OK ]
[root@server3 haproxy]# /etc/init.d/haproxy reload
Reloading haproxy:
在浏览器上访问:
http://172.25.20.3:8000/
##页面的重定向
在已经配置好的haproxy环境中:
acl badhost src 172.25.20.250
99 acl westos.org hdr_beg(host) -i westos.org
100 acl 172.25.20.3 hdr(host) -i 172.25.20.3
101 #block if badhost
102 #errorloc 403 http://172.25.20.3:8000
103 #redirect location http://172.25.20.3:8000 if badhost
104 redirect code 301 location http://www.westos.org if westos.org
105 redirect code 301 location http://www.westos.org if 172.25.20.3
[root@server3 haproxy]# /etc/init.d/haproxy reload
Reloading haproxy:
打开server1和server2的httpd服务,在真机中做好本地解析
[root@foundation20 ~]# vim /etc/hosts
172.25.20.3 westos.org www.westos.org
测试:在浏览器中分别访问172.25.20.3,westos.org和www.westos.org
##读写分离
读为静态,写为动态
在server3上:
vim /etc/haproxy/haproxy.conf
98 acl badhost src 172.25.20.250
99 acl westos.org hdr_beg(host) -i westos.org
100 acl 172.25.20.3 hdr(host) -i 172.25.20.3
101 acl read method GET
102 acl read method HEAD
103 acl write method PUT
104 acl write method POST
105 #block if badhost
106 #errorloc 403 http://172.25.20.3:8000
107 #redirect location http://172.25.20.3:8000 if badhost
108 #redirect code 301 location http://www.westos.org if westos.org
109 #redirect code 301 location http://www.westos.org if 172.25.20.3
110
111 use_backend app if write
112 default_backend static
113
114 backend static
115 server web2 172.25.20.2:80 check
116 backend app
117 # balance roundrobin
118 server web1 172.25.20.1:80 check
在server1上配置httpd服务
将upload文件夹scp至server1的默认发布目录
修改upload文件夹的权限为777
将upload文件夹里面的内容移动至默认发布目录
[root@server1 html]# vim upload_file.php
1 <?php
2 if ((( F I L E S [ " f i l e " ] [ " t y p e " ] = = " i m a g e / g i f " ) 3 ∣ ∣ ( _FILES["file"]["type"] == "image/gif") 3 || ( FILES["file"]["type"]=="image/gif")3∣∣(_FILES[“file”][“type”] == “image/jpeg”)
4 || (KaTeX parse error: Expected 'EOF', got '&' at position 47: …e/pjpeg")) 5 &̲& (_FILES[“file”][“size”] < 2000000))
server2做相同的操作,并下载php
在真机中打开浏览器
访问http://172.25.20.3
上传图片发现会上传到server1
然后进入http://172.25.20.3/images
访问图片会看到server2里面的图片