1. HAProxy
开始测试项目的负载均衡之前,先了解下什么是haproxy。
有兴趣的移步:http://www.manongjc.com/article/72156.html
HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。 HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的 并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy通常借助于OS上几种常见的技术来实现性能的最大化。比如使用单进程、事件驱动模型显著降低了上下文切换的开销及内存占用。
2. 开始使用
我们用docker来玩一个flask项目的负载均衡。
一共要使用到三个文件。
- app.py
import os
import socket
from flask import Flask
from redis import Redis
app = Flask(__name__)
redis_conn = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)
@app.route('/')
def hello():
redis_conn.incr('hits')
return 'Hello Container World! I have been seen %s times and my hostname is %s.\n' % (redis_conn.get('hits'),socket.gethostname())
if __name__ == "__main__":
app.run(host="0.0.0.0", port=80, debug=True)
- Dockerfile
FROM python:3
COPY . /app
WORKDIR /app
RUN pip install flask redis
EXPOSE 80
CMD [ "python", "app.py" ]
- docker-compose.yml
version: "3"
services:
webapp:
build: .
environment:
REDIS_HOST: redis
redis:
image: 'redis:alpine'
lb: # 使用负载均衡镜像服务
image: 'dockercloud/haproxy'
links:
- webapp
ports:
- 8080:80
volumes:
- /var/run/docker.sock:/var/run/docker.sock
那么,我们直接运行docker-compose命令,去构建镜像并运行容器服务。注意我们启动时,命令参数需要跟一个 --scale 服务名=n,即启动n个该服务。
docker-compose up --scale webapp=3 -d
最后我们测试下,是否达到了负载均衡的目的。我们看到请求是平均分配到这三个服务上的,目的达到。