haproxy负载均衡记录

jopen 10年前

haproxy是一款轻量级的高可用、支持负载均衡和反向代理的软件,我们可以用它实现很多功能

haproxy的安装很简单,但是前提是你的linux有gcc环境,简单记录一下

wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.8.tar.gz  tar zxvf haproxy-1.4.8.tar.gz  cd haproxy-1.4.8  make TARGET=linux26 PREFIX=/usr/local/haproxy  make install PREFIX=/usr/local/haproxy

这里要注意的是自己的linux版本,使用uname -a命令可以查看

安装好之后的路径是在

/usr/local/haproxy

接下来是配置文件

  

global         log 127.0.0.1 local0         maxconn 4096         user root         group root         daemon    defaults         log global         mode tcp         option tcplog         option dontlognull         retries 3         option redispatch         maxconn 2000         contimeout 4000         clitimeout 50000         srvtimeout 30000         stats enable         stats scope .    frontend mysql_cluster         bind *:3306         default_backend mysql_cluster_back    backend mysql_cluster_back         mode tcp         option tcpka         option mysql-check         balance roundrobin         server db01_1.1.1.1 192.168.50.1:3306 weight 1 check port 3306          server db02_2.2.2.2 192.168.50.130:3306 weight 100 check port 3306      listen stats 0.0.0.0:8899         mode http         option httpclose         balance roundrobin         stats uri /admin-status         stats realm Haproxy\ Statistics         stats auth admin:admin

 这是一个简单的配置文件,global和defaults基本都可以不变,重要的是frontend 和backend

 关于frontend,我是这样理解的,相当于声明了一个名为:mysql_cluster的函数,这个函数监听了运行haproxy机器的3306端口,然后将这个端口的请求交给了backend名为mysql_cluster_back的模块来处理,这里要申明代理的协议tcp,我这里是需要做mysql的集群,所以是tcp,如果是webserver的集群,那么可以写成http

balance 是负载均衡的策略,对应的策略可以google

 server db01_1.1.1.1 192.168.50.1:3306 weight 1 check port 3306    server db02_2.2.2.2 192.168.50.130:3306 weight 100 check port 3306

这两句是定义实际的mysql服务器信息,我这边是两台,可以定义权重,check port 3306是对两台服务器mysql的端口进行健康检查,还有其他参数,不详解。

listen stats 0.0.0.0:8899         mode http         option httpclose         balance roundrobin         stats uri /admin-status         stats realm Haproxy\ Statistics         stats auth admin:admin

这个模块主要是定义了haproxy的一个监控界面信息,绑定8899端口,通过浏览器可以访问haproxy的监控界面

在上面两台机器上开启mysql服务,然后在本机保存配置文件到安装目录下

haproxy的执行命令是

 

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

然后可以在浏览器中输入:

http://192.168.50.129:8899/admin-status

查看机器情况,如果一切正常,则都是绿色

这个时候,连接mysql节点

mysql -h192.168.50.129 -utest-ptest -P3306

注意两个真实的mysql服务器必须具有相同的用户名和密码,才能达到负载均衡的效果

然后你会发现,haproxy会轮的在两台真实服务器之间转换,注意192.168.50.129 这台机器并没有安装mysql


总得来说,haproxy可以对http以及tcp请求进行反向代理和负载均衡,对于webserver、数据库都可以用很低的代价实现最大的效果,但是实际的生产环境中,要负载很多,可以和keepalived一起使用,使用虚拟ip的方式,来避免单点故障。

 

来自:http://my.oschina.net/u/123965/blog/188577