2019独角兽企业重金招聘Python工程师标准>>>
一、准备Demo
新增Dockerfile文件,编辑内容:
FROM java:8
MAINTAINER yuantx
ADD demo.jar /usr/local/demo.jar
EXPOSE 8083
ENTRYPOINT ["java","-jar","/usr/local/demo.jar"]
生成Demo镜像:
docker build -t demo .
启动8083和8084容器:
docker run -d -p 8083:8083 --name compose_demo_1 demo:latest
docker run -d -p 8083:8084 --name compose_demo_2 demo:latest
二、配置Nginx default.conf
upstream demo_server{
server 192.168.0.10:8083 weight=1;
server 192.168.0.10:8084 weight=2;
}
server {
listen 80;
server_name 192.168.0.10;
location /index{
proxy_pass http://demo_server;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect default;
proxy_connect_timeout 6s;
}
location /ytx{
proxy_pass http://demo_server;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect default;
proxy_connect_timeout 6s;
}
location /qyh{
proxy_pass http://demo_server;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect default;
proxy_connect_timeout 6s;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
upstream demo_server{}几种负载均衡策略:
1.轮询
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream demo_server {
server 192.168.0.10;
server 192.168.0.11;
}
2.weight:权重
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况,权重越高,在被访问的概率越大。
upstream demo_server {
server 192.168.0.10:8083 weight=1;
server 192.168.0.10:8084 weight=2;
}
3.ip_hash:根据IP分配
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream demo_server {
ip_hash;
server 192.168.0.10:8083;
server 192.168.0.11:8084;
}
4.fair(第三方):根据响应时间
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream demo_server {
server server1;
server server2;
fair;
}
5.url_hash(第三方):根据URL分配
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream demo_server {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
三、将default.conf拷贝到/etc/nginx/conf.d/
先进入nginx容器,删除默认的default.conf
docker exec -it compose_nginx_1 /bin/bash
rm -f default.conf
拷贝刚才准备的nginx配置default.conf:
docker cp default.conf compose_nginx_1:/etc/nginx/conf.d/
四、重启Nginx
docker restart compose_nginx_1
五、测试
六、遇到的问题
解决方案:
关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service (禁止开机启动)