实践环境:
linux主机,已安装docker
步骤1:
下载服务器镜像,此处直接选择nginx
docker pull nginx
步骤2:
启动5个容器,分别命名n1~n5,并暴露端口8071 ~ 8075
docker run --name n1 -d -p 8071:80 nginx
docker run --name n2 -d -p 8072:80 nginx
docker run --name n3 -d -p 8073:80 nginx
docker run --name n4 -d -p 8074:80 nginx
docker run --name n5 -d -p 8075:80 nginx
步骤3:
创建新的index.html,替换容器nginx主页,以区分负载均衡的情况
创建
echo n1 > index.html
覆盖
docker cp index.html n5:/usr/share/nginx/html/
其他n2~n5略,此处麻烦的话可以写shell脚本处理。
步骤4:
为先忽略docker容器间通信问题,把负载均衡策略的nginx[以下称为n0
]部署在docker外侧
测试
策略一:轮询
修改nginx.conf,访问n0
地址,多次访问发现结果在n1~n5间切换。
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
upstream tomcat_server{
server 127.0.0.1:8071 weight=10;
server 127.0.0.1:8072 weight=10;
server 127.0.0.1:8073 weight=10;
server 127.0.0.1:8074 weight=10;
server 127.0.0.1:8075 weight=10;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://tomcat_server;
root html;
index index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
策略二:基于权重
只需增加权重即可
server 127.0.0.1:8071 weight=10
;
策略三:ip_hash
只需在upstream尾部增加ip_hash;
即可按ip分配
策略四:fair
按响应时间短分配,需要安装第三方模块
策略五:url_hash
hash $request_uri;
hash_method crc32;
按url分配,需要安装第三方模块