haproxy负载均衡记录
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