一 Haproxy实现负载均衡
1. 安装Haproxy: 首先要准备haproxy压缩包。
安装rpm-bulid服务(第2行),使用rpmbuild命令将haproxy的压缩包进行二进制处理(第5行),在这个过程中可能会出现软件的依赖性问题比如依赖包prce-devel,安装这个依赖包解决依赖性问题(第8行)。解决之后重新进行二进制处理。
处理之后会在/root/rpmbuild/RPMS/x86_64目录下生成haproxy-1.6.11-1.x86_64.rpm的安装包,rpm -ivh安装这个包(第10行)
安装之后将原来的压缩包解压(第11行)解压之后进入haproxy-1.6.11/example目录,在这个目录里将content-sw-sample.cfg文件复制为/etc/haproxy/haproxy.cfg文件(13行)
至于为什么要复制到这个路径,是因为haproxy的配置文件中指定了路径:
这样haproxy就装好了。
2. 由于在配置文件中指定了用户的uid为200,gid为200,所以先要新建用户组和用户:
groupadd -g 200 haproxy #新建用户组
useradd -u 200 -g 200 -M haproxy #新建用户
另外在配置文件中有对haproxy服务用户的限制,所以需要在/etc/security/limit.conf文件中写入限制:
之后编辑配置文件/etc/haproxy/haproxy.conf:
绑定端口为172.25.17.5(haproxy端)的80端口,并设定工作模式为static(静态),负载均衡模式为roundrobin(轮询机制),指定两个后端服务器172.25.17.2和172.25.17.3
3.配置文件编辑完成之后开启服务,并在后端服务器172.25.17.2和172.25.17.3端开启httpd服务,配置好默认发布目录的Iindex.html文件之后重启httpd服务,在浏览器里解析172.25.17.5主机就可以查看到负载均衡。
4. 前端负载均衡服务健康检查:
访问172.25.17.5/monitoruri,看到解析结果为200k说明前端服务器服务正常
后端服务器健康检查:
访问172.25.17.5/admin/stats就可以查看到后端服务器的工作状态。红色表示工作不正常,绿色表示工作正常。
haproxy服务的日志保存
在/etc/rsyslog.conf文件中,配置haproxy服务的日志保存路径:
首先打开UDP传输协议:
再在配置文件的42行指定来自local0设备(haproxy服务的设备)的日志,不保存在/var/log/message文件中。
在62行编辑来自local0设备的日志保存在/var/log/haproxy.log文件中。
日志配置文件编辑完成之后保存退出,/etc/init.d/rsyslog restart重启日志服务,再次解析172,25,17,5端进行负载均衡验证名就可以在/var/log/haproxy.log文件中查看到负载均衡的相关日志。
二 haproxy的动态解析
1. 在server3端安装php,并在httpd服务的默认发布目录/var/www/html下写入php文件index.php:
2 在haproxy的配置文件中指定当在浏览器中的url是以.php结尾时,将定向到后端服务器的static组,也就是172.25.17.2端的httpd服务。编辑完成之后保存退出,/etc/init.d/haproxy reload重新加载haproxy服务。
3 测试:
在浏览器中访问172.25.17.5/index.php将定向到172.25.17.3端,看到php页面:
三 haproxy的重定向
错误重定向:
在haproxy的配置文件中,将来自172.25.17.250主机的请求加入源地址名单blacklist(40行),如果请求来自与balcklist名单中的ip,将直接拒绝(41行),并将403的报错(请求被拒绝)重定向到172.25.17.5的8080端口。可以在172.25.17.5主机安装httpd服务并将端口改为8080然后开启服务,在默认发布目录/var/www/html目录里新建index.html文件写入本网站正在维护的信息,之后重启httpd服务。
在172.25.17.250端解析172.25.17.5,将解析到172.25.17.5端的httpd服务:
直接重定向:
将来自172.25.17.250的请求直接转向172.25.17.5的httpd服务,或者转向www.baidu.com,这样172.25.17.250端在访问时将直接访问到百度。
四 haproxy的读写分离
在server2端建立目录/var/www/html/images,将要读的图片放在这个目录,编辑配置文件:
当进行读操作时默认访问static1组即172.25.17.2端,当进行写操作时访问static2组即172.25.17.3端
在server3和server2端安装php,准备一个目录upload,里面有着关于上传图片的配置脚本:
将这个目录放在server3和server2端的/var/www/html目录下,进入这个目录,将里面的所有内容移动到上层目录即/var/www/html目录,之后chmod 777 upload给upload目录满权限任何人可写。编辑upload_file.php脚本文件,将可上传的图片大小限制改为2M。在server2端执行同样的操作
保存之后重启haproxy和httpd服务,访问172.25.17.5/images/reahat.jpg服务转到172.25.17.2主机上读到图片:
访问172.25.17.5/upload_file.php或者直接访问172.25.17.5,会出现上传图片的界面:
选择图片进行上传之后,可以查看到上传的相关信息存储在upload目录里:
上传之后发现在server2端的upload目录为空,server3端的uoload目录里有vim.jpg文件,而读的文件在server2端的images目录里,这样就实现了读写分离。