Haproxy安装和动态配置更改测试

      本文主要描述haproxy的安装及简单配置过程。并且应用这个简单的配置做mysql的负载均衡,同时haproxy的配置文件发生变化时我们如何重新启动haproxy程序,并且确定haproxy程序重新启动后对原来已经进行的连接回话的影响情况。

0. 准备工作

为了进行本文的研究,我们需要3台vmware的虚拟机,在每一台虚拟机上,安装centos程序,安装mysql程序, 每一台机器都安装mysql程序。如下图:

wps_clip_image-13893

m1:192.168.65.81   m2:192.168.65.82    m3:192.168.65.83

1. Haproxy程序的安装

下载并解压缩

wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.9.tar.gz

tar xzvf haproxy-1.4.9.tar.gz

进入解压缩目录,编译并安装程序

make TARGET=linux26 PREFIX=/work/apps/haproxy install

创建配置文件

cd /work/apps/haproxy

mkdir conf

vi conf/haproxy.cfg

编辑文件内容如下:

global

    log 127.0.0.1 local0 info #[err warning info debug]

    maxconn 4096

    user haproxy

    group haproxy

    daemon

    nbproc 1

    pidfile /work/apps/haproxy/logs/haproxy.pid

defaults

    maxconn 2000

    contimeout 5000

    clitimeout 30000

    srvtimeout 30000

frontend db_read

    bind :3307

    default_backend cluster_db_read

backend cluster_db_read

    mode tcp

    balance roundrobin

    server db01_slave 192.168.65.81:3306 

    server db02_slave 192.168.65.82:3306 

    server db03_slave 192.168.65.83:3306

listen admin_stats

    bind 0.0.0.0:1080

    mode http

    log 127.0.0.1 local0 err

    stats uri /admin?stats

创建日志目录

mkdir logs

启动haproxy

cd /work/apps/haproxy/sbin

./haproxy -f ../conf/haproxy.conf

启动后, 通过netstat -ntlp 查看3307端口是否已经启动了。

2. 启动mysql程序,创建数据库

登陆m1服务器,执行下面命令

mysql -h localhost -u root -p

用下面命令创建数据库

create database my81

创建用户并授权:grant all privileges on *.* to mq@'%' identified by 'mq' WITH GRANT OPTION;FLUSH PRIVILEGES;

登陆m2服务器, 执行如下命令

mysql -h localhost -u root -p

用下面命令创建数据库

create database my82

创建用户并授权:grant all privileges on *.* to mq@'%' identified by 'mq' WITH GRANT OPTION;FLUSH PRIVILEGES;

登陆m3服务器, 执行如下命令

mysql -h localhost -u root -p

用下面命令创建数据库

create database my83

创建用户并授权:grant all privileges on *.* to mq@'%' identified by 'mq' WITH GRANT OPTION;FLUSH PRIVILEGES;

这样,我们在3个服务器上有了不同的数据库, 我们仅仅需要 show databases命令,我们就可以知道我们连接的是哪个数据库了。

3. 通过haproxy连接mysql数据库

执行如下命令, 连接数据库

mysql -h 192.168.65.83 --port 3307 -u mq -p

然后输入相关密码,最后我们输入:show databases命令,查看相关情况

wps_clip_image-10520

通过数据库我们了解到,我们连接的是具有my82的数据库

重复上面命令,如下:

wps_clip_image-17099

在重复上面命令

wps_clip_image-32345

过10分钟后在重新测试,发现如下

wps_clip_image-21551

发现数据库连接已经断开了,经过阅读haproxy文档

http://haproxy.1wt.eu/download/1.4/doc/configuration.txt

最后确定是,配置文件中超时时间造成,haproxy的超时。

因此修改相关配置为如下:

defaults

    maxconn 2000

    contimeout 5000000

    clitimeout 3000000

    srvtimeout 3000000

  重新启动haproxy程序,重复上面操作。 过10分钟后,发现mysql的数据库连接还在继续连接没有中断。

结论:通过haproxy,实现了通过一个ip地址,自动连接到多个数据库服务器,简化了相关配置。

4. 修改配置文件

修改配置文件为如下:

backend cluster_db_read

    mode tcp

    balance roundrobin

    option httpchk

    server db01_slave 192.168.65.81:3306 

    server db02_slave 192.168.65.82:3306 

#    server db03_slave 192.168.65.83:3306

其余的配置文件不变情况

重新启动haproxy程序

./haproxy -f ../conf/haproxy.cfg  -sf $(cat /work/apps/haproxy/logs/haproxy.pid)

结论:在重新配置完成haproxy后,可以通过上述命令,重新启动haproxy连接, 对原有的工作无影响

5. 检查重启haproxy后原来连接的有效与否

wps_clip_image-4576

通过检查发现原来的连接还在,没有中断tcp连接

wps_clip_image-20766

类似检查其他的连接都是连接的,没有中断的现象。

6. 通过haproxy重新连接数据库

我们重新开始全新的控制台程序,

mysql -h 192.168.65.83 --port 3307 -u mq -p

然后输入相关密码,最后我们输入:show databases命令,查看相关情况

wps_clip_image-18592

wps_clip_image-10202

重复上面命令, 有如下结果

wps_clip_image-18589

通过上图,我们可以确定, 我们配置文件中只存在两个服务器了, 因此请求被分配到同一台机器。

通过以上,我们可以了解到,在合适的配置下, haproxy可以提供mysql的负载均衡,并且支持动态配置修改,并且可以热启动, 启动过程中, 原来的相关连接继续保持连接状态知道超时等。

发表评论