前面章节简要介绍了HAProxy支持的几种负载均衡算法,比如轮换和根据ip等。
光说不练假把式,我们今天就通过实战来了解一下常见的几种算法。
本章节服务器用到的是Tomcat,为了快速部署多台服务器,我们使用了docker。
安装docker
docker的安装和使用不是我们这节的重点,所以这里我们简要介绍一下。
1. 列举可安装的docker安装包:# yum list | grep docker
cockpit-docker.x86_64 195.6-1.el7.centos extras
docker.x86_64 2:1.13.1-162.git64e9980.el7.centos
docker-client.x86_64 2:1.13.1-162.git64e9980.el7.centos
docker-client-latest.x86_64 1.13.1-58.git87f2fab.el7.centos
docker-common.x86_64 2:1.13.1-162.git64e9980.el7.centos
docker-distribution.x86_64 2.6.2-2.git48294d9.el7 extras
docker-latest.x86_64 1.13.1-58.git87f2fab.el7.centos
这里我们就要第二个。
2. 安装docker:# yum install -y docker
看到以下日志,表明安装成功了。
Installed:
docker.x86_64 2:1.13.1-162.git64e9980.el7.centosDependency Installed:
...
Complete!
3. 查看docker版本:# docker version
我们这里安装的是1.13.1,因为不是测试docker,虽然版本旧了点但问题不大。
安装部署tomcat
接下来我们用docker安装Tomcat
1. 启动docker服务:# service docker start
2. 查找tomcat镜像:# docker search tomcat
3. 拉取Tomcat镜像:# docker pull docker.io/tomcat
注意国内下载可能会非常慢,半天pull不下来。我们可以配置国内的镜像地址
编辑vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
重新加载:# systemctl daemon-reload
重启docker:# systemctl restart docker
再重新pull,飞一般的速度。。。
4. 查看我们下载下来的image:# docker images | grep tomcat
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/tomcat latest 2ae23eb477aa 4 days ago 647 MB
5. 在/root目录下新建三个文件夹test1、test2、test3,里面分别新建一个文件index.html
内容分别是"<h1>Server 1</h1>"、"<h1>Server 3</h1>"、"<h1>Server 3</h1>"
6. 用docker启动3个tomcat容器:
# docker run --name tomcat1 -p 8081:8080 -v /root/test1:/usr/local/tomcat/webapps/ROOT -d tomcat
# docker run --name tomcat2 -p 8082:8080 -v /root/test2:/usr/local/tomcat/webapps/ROOT -d tomcat
# docker run --name tomcat3 -p 8083:8080 -v /root/test3:/usr/local/tomcat/webapps/ROOT -d tomcat
7. 访问测试:分别访问localhost:8081\localhost:8082\localhost:8083,就看到对应的Server N了!
到这里,3台Tomcat服务器搭建完成。
用docker部署应用是不是非常简便呢。
配置HAProxy
前面的3台tomcat是相互独立的,要访问只能切换端口访问。接下来我们利用HAProxy,将他们联系起来。
1. 配置haproxy的配置文件,默认是:/etc/haproxy/haproxy.cfg
2. 修改backend部分,服务器列表中将我们3台tomcat加上。
global
daemon
maxconn 256
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-in
bind *:80
default_backend servers
backend servers
server tomcat1 127.0.0.1:8081
server tomcat2 127.0.0.1:8082
server tomcat3 127.0.0.1:8083
3. 重启haproxy:# systemctl restart haproxy
4. 访问测试
现在我们通过haproxy监听的80端口访问,http://localhost. 访问的结果如下:
- 第一次刷新:打印Server 1
- 第二次刷新:打印Server 2
- 第三次刷新:打印Server 3
- 第四次刷新:打印Server 1
- 第五次刷新:打印Server 2
- 。。。。。。
3台Tomcat轮流处理我们的请求,这也印证了前面章节说的:HAProxy默认使用了轮询的负载均衡策略。
到这里,我们负载均衡测试环境搭建完毕,同时也校验了HAProxy默认的轮询策略。
接下来的章节,会继续使用当前环境,对HAProxy的负载均衡进行更深入的探索和学习。