Haproxy 虽然带着ha,但它做的确是负载均衡。haproxy是工作在四层之上的,这也就意味着它可以代理的服务要比nginx更广泛,性能比nginx也要更高一些。相比较lvs,可配置性又比较好,需要的机器没有lvs那么多。因此haproxy在一定需求下使用还是不错的。比如使用haproxy来对mysql的从节点进行负载均衡。下面我们就来简单的使用haproxy来进行MySQL的负载均衡。

 

环境准备

 

IP地址

职能

192.168.111.100

负载均衡服务器

192.168.111.101

MySQL服务器

192.168.111.102

MySQL服务器

 

我们这里假设两台节点的MySQL服务器都已经安装完毕了。而且进行了如下配置

 

1.MySQL的端口都为3306

2.服务器开启了 3306 端口

3.创建MySQL用户 test ,密码 test ,可被 192.168.111.* 下的主机访问

4.为了显示负载到两个不同的机器,在一个机器中创建一个不同于另一个机器的数据库,用以区分。一个是MySQL1,一个是MySQL2

 

下面主要针对的是负载均衡节点的安装以及配置,也就是本笔记的核心。

 

先来下载haproxy,下载地址

 

http://www.haproxy.org/

 

解压

 

tar -zxvf haproxy-1.7.8.tar.gz

 

安装(编译的时候需要指定内核的版本,安装的时候需要指定安装的路径)

 

make TARGET=linux26
make install PREFIX=/usr/local/haproxy

 

在make的过程中需要指定linux的内核版本,可以通过下面的命令来查看内核版本

cat /proc/version

haproxy 本机 端口占用 haproxy默认端口号 是多少_haproxy 本机 端口占用

 

安装成功信息(下面的安装信息是不指定PREFIX的情况下的)

[root@m007 haproxy-1.7.8]# make install
install -d "/usr/local/sbin"
install haproxy  "/usr/local/sbin"
install -d "/usr/local/share/man"/man1
install -m 644 doc/haproxy.1 "/usr/local/share/man"/man1
install -d "/usr/local/doc/haproxy"
for x in 51Degrees-device-detection architecture close-options configuration cookie-options DeviceAtlas-device-detection intro linux-syn-cookies lua management netscaler-client-ip-insertion-protocol network-namespaces proxy-protocol SPOE WURFL-device-detection; do \
        install -m 644 doc/$x.txt "/usr/local/doc/haproxy" ; \
    done

在这里,我先说说我的目录结构的规划,我在学习的过程中,感觉在目录结构上遇到了很多坑。在这里把我的目录结构列出来,我的haproxy是放到usr/local/haproxy下的

 

/usr/local/haproxy

     sbin    这里放的是可执行文件,就是haproxy (安装的过程中创建的)

          haproxy

     logs     这里放的是记录的日志(自己创建的)

          haproxy.log

     conf     这里放置的是配置文件(自己创建的)

          haproxy.cnf

          haproxy.pid

     doc     我还没用到过,看名字应该是存放的文档(安装过程中创建的)

          haproxy

     share     这个我也没用到过也是在安装过程中创建的

          man

也就是说,我们这里要自己创建两个文件夹,一个是logs,一个是conf。在这两个文件夹下,要创建一个log文件,一个cnf主配置文件和一个pid文件。

 

安装成功之后就是要进行配置,配置的过程还是比较麻烦的。首先1.7.8这个版本我并没有找到它提供的配置文件。我确实找了examples下的配置文件,没有找到。于是我在网上找到的一些配置进行的拼凑出来的。下面列出haproxy最简单的配置信息。这个配置的内容是放到/usr/local/haproxy/conf/haproxy.cnf文件中的。其中这里用到了pid文件,我在pid中就保存了一个1.

global
        daemon               # 后台方式运行
        nbproc 1
        pidfile /usr/local/haproxy/conf/haproxy.pid


defaults
        mode tcp               #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
        retries 2               #两次连接失败就认为是服务器不可用,也可以通过后面设置
        option redispatch       #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
        option abortonclose     #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
        maxconn 4096            #默认的最大连接数
        timeout connect 5000ms  #连接超时
        timeout client 30000ms  #客户端超时
        timeout server 30000ms  #服务器超时
        #timeout check 2000      #=心跳检测超时
        log 127.0.0.1 local0 err #[err warning info debug]


########test1配置#################
listen test1                         #这里是配置负载均衡,test1是名字,可以任意
        bind 0.0.0.0:3306            #这里是监听的IP地址和端口,端口号可以在0-65535之间,要避免端口冲突
        mode tcp                     #连接的协议,这里是tcp协议
        #maxconn 4086
        #log 127.0.0.1 local0 debug
        server s1 192.168.111.101:3306 #负载的机器
        server s2 192.168.111.102:3306 #负载的机器,负载的机器可以有多个,往下排列即可

这样就配置好了。下面来启动haproxy

./usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cnf

-f 是指定我们的配置文件的路径。

 

启动过程中没有任何日志信息打印,安静到让你怀疑没有启动成功,然后本都的你去查看日志,发现日志里没有任何信息,不知道是你的日志没有配置正确还是系统启动没有问题,茫茫然的感觉,不知该从哪里下手。但作为程序员的你思维还是敏捷的,咱先测测能不能负载均衡啊,于是使用MySQL的客户端工具,输入本地机器的ip,加上监听的端口号,发现连上了,然后再退出重新连,发现连了另外的一台机器,到这里,我们发现这个实验已经成功了。但作为程序员的你仍心有不甘,我们要监控,我们还要查看日志。下面来继续

 

配置监控

haproxy带有监控功能,而且配置简单,直接在主配置文件中加入一下配置即可,格式就是这么缩进的,非拷贝出现问题。这个配置中可以看到,项目的名称使用的是haproxy,访问的时候在浏览器中输入本机的IP地址加端口加上uri就可以了。例如:http://192.168.111.100:8888/haproxy

listen  admin_stats
        bind 0.0.0.0:8888 
        mode  http 
        stats uri   /haproxy
        stats realm     Global\ statistics 
        stats auth  admin:admin

haproxy 本机 端口占用 haproxy默认端口号 是多少_负载均衡_02

 

 

下面配置日志

 

日志暂时没还搞定(跟着网上的步骤在做,但始终就是不给我记录,我也没辙啊,研究完再单独写一个记录日志的吧)

 

端口检测

haproxy可以检测我们的服务是否宕机,检测的方式就是通过指定检测端口。配置非常简单

listen test1
        bind 0.0.0.0:3306
        mode tcp
        #maxconn 4086
        #log 127.0.0.1 local0 debug
        server s1 192.168.111.101:3306 check port 3306
        server s2 192.168.111.102:3306 check port 3306

当我们停止一个服务的时候,监控视图如下(很快把我们关掉的机器就标记为红色了)

 

haproxy 本机 端口占用 haproxy默认端口号 是多少_启动haproxy_03

 

查看haproxy的进程状态

ps -ef | grep haproxy

杀掉haproxy进程

kill -9 pid