一、Haproxy简介:

  • HAProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
  • HAProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
  • HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
     

haproxy 状态查看_配置文件

二、实验环境(rhel6.5版本)

主机环境:rhel6.5 selinux 和iptables 都必须是disabled状态

各主机信息

主机名

IP

服务

server1

172.25.8.1

Haproxy+http

server2

172.25.8.2

http

server3

172.25.8.3

http

物理机

172.25.8.250

用于测试nginx

三、Haproxy相关配置

 

1、负载均衡

 

配置server1:

 

(1)官网下载haproxy软件包,并解压

haproxy 状态查看_haproxy 状态查看_02

(2)安装编译依赖包,并进行编译

haproxy 状态查看_重启_03

haproxy 状态查看_php_04

#自动生成rpmbuil目录

haproxy 状态查看_重启_05

(3)安装haproxy服务

haproxy 状态查看_重启_06

(4)拷贝配置文件到/etc/haproxy目录下,并进行编辑

#拷贝配置文件

haproxy 状态查看_重启_07

#编辑配置文件

haproxy 状态查看_haproxy 状态查看_08

haproxy 状态查看_php_09

haproxy 状态查看_haproxy 状态查看_10

haproxy 状态查看_配置文件_11

(5)创建haproxy用户和组,实现对haproxy服务的控制

#这里200是由haproxy.cfg该配置文件决定的

haproxy 状态查看_haproxy 状态查看_12

(6)开启haproxy服务

#haproxy服务的监听端口为80,这是由haproxy.cfg该配置文件决定的

haproxy 状态查看_重启_13

server2和server3配置(安装apache,默认发布目录下编写发布文件):

haproxy 状态查看_php_14

haproxy 状态查看_重启_15

haproxy 状态查看_配置文件_16

 

测试:

 

(1)网页输入172.25.8.1/monitoruri,查看haproxy服务的状态

haproxy 状态查看_haproxy 状态查看_17

(2)网页输入172.25.8.1/admin/stats,对haproxy负载均衡的后端服务器进行监控

haproxy 状态查看_重启_18

(3)如何对监控页面进行加密呢?

编辑haproxy配置文件:

haproxy 状态查看_配置文件_19

#在指定行写入

haproxy 状态查看_php_20

#修改完配置文件之后,重启haproxy服务

haproxy 状态查看_php_21

刷新web界面

haproxy 状态查看_haproxy 状态查看_22

第一种情况:server2和server3中任意一端的httpd服务挂掉(这里以关闭server3上的httpd服务为例)

haproxy 状态查看_php_23

haproxy 状态查看_重启_24

haproxy 状态查看_重启_25

第二种情况:server2和server3端的httpd服务都挂掉(因为第一种情况挂掉了server3端的httpd服务,所以这里只需要挂掉server2端的httpd服务就可以了)

haproxy 状态查看_配置文件_26

haproxy 状态查看_haproxy 状态查看_27

haproxy 状态查看_php_28

启动server2和server3端的httpd服务,以免影响后续的实验

 

 

2、修改haproxy日志路径

 

(1)修改日志配置文件(存储位置),并重启rsyslog服务

haproxy 状态查看_配置文件_29

haproxy 状态查看_配置文件_30

#添加local0.none

haproxy 状态查看_配置文件_31

#将日志放在haproxy日志文件

haproxy 状态查看_php_32

haproxy 状态查看_haproxy 状态查看_33

(2)测试:

网页访问server1后查看日志:

haproxy 状态查看_重启_34

3、访问控制

 

访问控制的配置方法一:

 

(1)修改haproxy配置文件,并重载haproxy服务

haproxy 状态查看_php_35

haproxy 状态查看_重启_36

#修改完配置文件之后,重载haproxy服务

haproxy 状态查看_重启_37

(2)server1安装apache,修改端口为8080,编辑默认发布文件,并启动httpd服务

haproxy 状态查看_php_38

haproxy 状态查看_haproxy 状态查看_39

#将默认监听端口80改为8080(因为80端口被haproxy服务占用)

haproxy 状态查看_php_40

haproxy 状态查看_重启_41

haproxy 状态查看_重启_42

(3)测试:

server2端可以访问

haproxy 状态查看_重启_43

server3端可以访问

haproxy 状态查看_重启_44

物理机不能访问(访问的必须是172.25.8.1:8080,输入172.25.8.1没有任何输出)

haproxy 状态查看_haproxy 状态查看_45

网页输入172.25.8.1,自动跳转到172.25.8.1:8080的页面

haproxy 状态查看_重启_46

 

访问控制的配置方法二:

 

(1)修改haproxy配置文件,并重载haproxy服务

haproxy 状态查看_php_47

haproxy 状态查看_php_48

haproxy 状态查看_重启_49

(2)server1安装apache,修改端口为8080,编辑默认发布文件,并启动httpd服务——上面一经做过,这里不需要再做

(3)测试:

server2端可以访问

haproxy 状态查看_重启_43

server3端可以访问

haproxy 状态查看_重启_44

物理机不能访问(访问的必须是172.25.83.1:8080,输入172.25.83.1是403报错的默认输出)

haproxy 状态查看_haproxy 状态查看_52

总结:这两种方法所起的作用是相同的,都是禁止172.25.8.250这个主机访问172.25.8.1。差别就在172.25.8.250主机访问172.25.8.1时的访问方法,以及结果。

 

4、动静分离

 

(1)在server2中编辑默认发布目录下的index.html文件——前面一经做过这一步,这里不需要再做

 

配置完之后,web界面进行测试,以确保配置的是成功的

haproxy 状态查看_haproxy 状态查看_53

(2)在server3上编辑默认发布目录下的index.php文件,并安装php,安装完php之后要重启httpd服务

haproxy 状态查看_haproxy 状态查看_54

haproxy 状态查看_php_55

haproxy 状态查看_php_56

配置完之后,web界面进行测试,以确保配置的是成功的

haproxy 状态查看_haproxy 状态查看_57

 

(3)server1上haproxy配置文件中添加动静分离配置,并重载haproxy服务

haproxy 状态查看_配置文件_58

#将之前编写的访问控制的内容,进行注释(因为之前访问控制设置的是172.25.8.250主机不能访问,而我们现在的测试需要在172.25.8.250主机上进行测试)

haproxy 状态查看_php_59

haproxy 状态查看_haproxy 状态查看_60

haproxy 状态查看_php_61

#修改完配置文件之后,重载haproxy服务

haproxy 状态查看_配置文件_62

 

(4)测试:

网页访问,静态访问到server2的页面内容

haproxy 状态查看_php_63

动态访问到server3的php动态页面(配置文件中设定的以.php结尾的访问是动态访问)

haproxy 状态查看_配置文件_64

 

5、读写分离

 

(1)编辑haproxy配置文件,并重载haproxy服务

haproxy 状态查看_haproxy 状态查看_65

haproxy 状态查看_haproxy 状态查看_66

haproxy 状态查看_haproxy 状态查看_67

(2)在server2端和server3端的httpd默认发布目录,放进去两个文件

  1. index.php(选择图片的静态页面)
  2. upload_file.php(上传图片的动态页面)

#为了安全,应使index.php文件和upload_file.php文件的权限为644

haproxy 状态查看_php_68

(3)在server2端和server3端的httpd的默认发布目录下建立upload目录,并修改该目录的权限为777,该目录用来存放上传图片

haproxy 状态查看_配置文件_69

(4)在server2端和server3端修改上传的大小限制(以免产生因大小受限所导致的错误)

haproxy 状态查看_配置文件_70

haproxy 状态查看_重启_71

(5)在server2端安装php软件(以使得其支持php语言),安装完该软件之后重启httpd服务

haproxy 状态查看_重启_72

#安装完php软件之后重启httpd服务

haproxy 状态查看_php_73

(6)测试:

浏览器输入:172.25.8.1/index.php

haproxy 状态查看_haproxy 状态查看_74

点击Browse,选择上传的图片(我这里选择的图片是之前在网上下载好的redhat.jpg图片),在点击Submit提交

haproxy 状态查看_haproxy 状态查看_75

haproxy 状态查看_php_76

haproxy 状态查看_重启_77

查看,上传图片保存在server3上的/var/www/html/upload目录下,server2没有

haproxy 状态查看_haproxy 状态查看_78

haproxy 状态查看_php_79