使用nginx做负载均衡(docker实现)

概述

使用nginx做负载均衡就是修改一个配置文件的事情,网上大部分教程都是在本机去安装nginx做的,但是为什么不能使用docker更加方便的去做这件事情呢,今天我的想法就是用docker跑nginx然后来做一个负载均衡的实验

使用环境介绍

其实这个环境很简单,就是四台centos机器,然后都安装上了docker,也就是下面这三台机器

  • docker-master:192.168.1.231
  • docker-slave1:192.168.1.232
  • docker-slave2:192.168.1.233
  • docker-slave3:192.168.1.234

注意最好安装上ansible,因为这样最集群的操作就比较方便起来了

之后集体pullnginx镜像

ansible docker -m shell -a "docker pull nginx:1.15.1-alpine"

我使用docker-master节点上的nginx做负载均衡

docker-slave的所有节点都是网页服务器

docker-master节点部分

首先编写nginx的配置文件

docker run -d nginx:1.15.1-alpine

把镜像里面的配置文件复制出来

docker cp e08247c36eac:/etc/nginx/nginx.conf .

之后修改成下面这个样子

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}



http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    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;

    keepalive_timeout  65;

    #gzip  on;
    upstream 192.168.1.231
    {
        server 192.168.1.232:8080;
        server 192.168.1.233:8080;
        server 192.168.1.234:8080;
    }

    server
    {
        listen 80;
        server_name 192.168.1.231;

        location /{
	    proxy_pass http://192.168.1.231;
	    proxy_set_header Host		$host;
	    proxy_set_header X-Real-IP 		$remote_addr;
	    proxy_set_header X-Forwarded-For	$proxy_add_x_forwarded_for;
	}
    }

    include /etc/nginx/conf.d/*.conf;
}

其实就是加上了upstream和server这两段

之后新建一个dockerfile,加入

FROM nginx:1.15.1-alpine
COPY nginx.conf /etc/nginx

其实就是把配置文件拷贝到容器里面去

之后新建一个docker-compose文件

加入

version: "3"
services:
  nginx:
    container_name: "nginx"
    build: .
    ports:
      - "80:80"
    networks: 
      app_net:
        ipv4_address: "172.16.11.11"
    restart: "always"

networks: 
  app_net:
    driver: "bridge"
    ipam:
      driver: "default"
      config:
        - subnet: "172.16.11.11/24"

这个不多解释了

最后启动起来

docker-compose -f docker-compose.yml up -d

此时如果你访问231服务器会报502错误说明几乎成功一半了

web服务器部分

首先编写compose文件

version: "3"
services:
  nginx:
    container_name: nginx
    image: nginx:1.15.1-alpine
    volumes:
      - "/home/docker/nginx/html:/usr/share/nginx/html"
    ports:
      - "8080:80"
    networks:
      app_net:
        ipv4_address: "172.16.11.11"

networks:
  app_net:
    driver: "bridge"
    ipam:
      driver: "default"
      config:
        - subnet: "172.16.11.11/24"

使用ansible分发文件

ansible docker-slave -m copy -a "src=/root/docker-compose.yml dest=/root/docker-compose.yml"

分发docker-compose这个命令

ansible docker-slave -m copy -a "src=/usr/local/bin/docker-compose dest=/usr/local/bin/docker-compose"

ansible docker-slave -m shell -a "chmod +x /usr/local/bin/docker-compose"

之后在所有节点启动容器

ansible docker-slave -m shell -a "docker-compose -f /root/docker-compose.yml up -d"

之后编写一个index.html文件,里面随便写点什么比如hello slave-1,然后分发给192.168.1.232,其他的也都一样

ansible slave-1 -m copy -a "src=/root/index.html dest=/home/docker/nginx/html/index.html"

验证

最后的验证就是输入192.168.1.231的ip不断的刷新,里面会不断重复hello slave-1或者hello slave-2或者hello slave-3

欢迎关注Bboysoul的博客www.bboysoul.com Have Fun

转载于:https://my.oschina.net/u/3778921/blog/1859420

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值