用docker容器模拟nginx的负载均衡

1, 

我nginx镜像现成的, 我打算开四个容器,我们先确认下四个未占用的端口。

lsof -i:8001

lsof

-i:8002

lsof

-i:8003

lsof

-i:8004

都是未被占用。


然后我用脚趾头想了一下, 所谓的负载均衡,就是修改下配置文件就行了, 其实我们现在改配置文件都有点原始了,各大运营商都有现成的后台,去点点按钮就搞定的事儿。

所以我们开容器时要映射不同的配置文件,在我的php文件夹里新建了一个conf.d文件夹,里面放配置文件。



docker run -itd  -p 8001:80 -v/Users/guanliyang/php:/usr/share/nginx/html -v /Users/guanliyang/php/conf.d/nginx1.conf:/etc/nginx/nginx.conf  --name nginx1 nginx

这条命令又折腾了好几分钟哈, 主要是想映射报错日志, 日志映射出来的话, nginx没有写宿主机文件的权限,那以后看日志就只能进容器看了,

路径是我在nginx.conf里面自己配置的哈,error_log

/var/log/nginx/error.log;


然后http://localhost:8001/ 访问成功。


这里两个nginx指向的目录, 真实情况下当然是本机的目录, 即线上部署是有多套代码的, 但我这里指向的都是本地目录,docker的挂载功能。-v  




mac上,宿主机是不能访问docker容器的ip的, 但centos上可以。


所以要在vxbox上的centos上折腾了。

run -itd  -p 8001:80 -v /data/www:/usr/share/nginx/html-v /data/www/nginx1.conf:/etc/nginx/nginx.conf  -v /data/www/log:/usr/share/nginx/log  --name nginx1 nginx



两台都可以访问了, 由于访问的同一个文件,看不出区别,我们输出服务器ip

echo  $_SERVER['SERVER_ADDR'] ;


 再开一个容器

docker run -itd  -p 8002:80 -v /data/www:/usr/share/nginx/html-v /data/www/nginx1.conf:/etc/nginx/nginx.conf  -v /data/www/log:/usr/share/nginx/log  --name nginx2 nginx



看到一个是172.17.0.4,

另一个是:172.17.0.5

另一个是:172.17.0.6



给我报 *6 upstream timed out (110: Connection

timed out) while connecting to upstream, client: 192.168.1.4, server: ,

request: "GET / HTTP/1.1", upstream: "http://192.168.0.15:8002/", host: "192.168.1.15"

错误,搞了半天是我刚开始配置ip写错了。


主机nginx配置如下:


http {

    upstream 192.168.1.15{

        server 192.168.1.15:8001;

        server 192.168.1.15:8002;

    }


    include       mime.types;

    default_type  application/octet-stream;


    sendfile        on;

    server {

        listen       80;


        location / {

            proxy_passhttp://192.168.1.15;

            proxy_set_header Host $host;

            proxy_set_header X-Real-IP$remote_addr;

            proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;

        }

    }

}


这里主要配置两个参数:

Upstream 和 proxy_pass必须相同, 其他参数含义自行google。

默认这样配置,服务器会轮回访问,


2、weight(轮询权值)

3、ip_hash 等算法。


自己画的图,画图技术太一半了。

然后两个nginx1, 和nginx2  就各自连自己的代码,代码连数据库这样子。

用docker容器模拟nginx的负载均衡_第1张图片

你可能感兴趣的:(用docker容器模拟nginx的负载均衡)