使用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
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
深入解析阿里 PouchContainer 如何实现容器原地升级
作者:仔仁 PouchContainer 是阿里巴巴集团开源的高效、轻量级企业级富容器引擎技术,拥有隔离性强、可移植性高、资源占用少等特性。可以帮助企业快速实现存量业务容器化,同时提高超大规模下数据中心的物理资源利用率。已助力阿里巴巴集团实现在线业务 100% 容器化,双 11 容器规模达到百万级。 背景 阿里巴巴集团内部,容器使用方式有很大一部分是富容器模式,像这种基于传统虚拟机运维模式下的富容器,其中也有一定数量容器仍然是有状态的。有状态服务的更新和升级是企业内部频率很高的一个日常操作,对于以镜像为交付的容器技术来说,服务的更新和升级,对应的容器操作实际上是两步:旧镜像容器的删除,以及新镜像容器的创建。而有状态服务的升级,则要求保证新容器必须继承旧容器所有的资源,比如网络、存储等信息。下面给出两个实际的业务案例来直观阐述富容器业务发
- 下一篇
JHipster生成微服务架构的应用栈(一)- 准备工作
本系列文章演示如何用JHipster生成一个微服务架构风格的应用栈。 环境需求:安装好JHipster开发环境的CentOS 7.4(参考这里) 应用栈名称:appstack 认证微服务: uaa 业务微服务:microservice1 网关微服务:gateway 实体名:role 主机IP:192.168.220.120 微服务体系规划 本系列文章会说明如何生成uaa(即图中的JHipster UAA),microservice1,gateway这3个微服务。 JHipster Console是现有的轮子,比较复杂,会有单独文章来介绍。 JHipster Registry也是现有的轮子,这里直接下载一个镜像来使用。 安装Docker 推荐版本:17.06 完整安装说明,请参考这里 启动一个JHipster Registry 在命令行,任意目录下,启动一个JHipster Registry容器;如果本地没有jhipster/jhipster-registry:v4.0.0的镜像,容器启动时会自动去docker store下载镜像。 docker container run --name...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS8编译安装MySQL8.0.19
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Mario游戏-低调大师作品
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果