一步一步搭建Nginx集群并实现均衡负载

一、入门案例

新建项目目录,新建docker-compose.yml文件

version: '3.1'
services:
  nginx:
    restart: always
    image: daocloud.io/library/nginx:latest
    container_name: nginx
    ports:
      - port:port(默认80)
  • 将服务器端口80进行放行
    一步一步搭建Nginx集群并实现均衡负载_第1张图片
  • 浏览器访问主机ip看到上图即安装成功
  • 查看redis容器的配置文件,进入容器后:
1、/etc/nginx/nginx.conf
2、/conf.d/default.conf
  • 二、使用数据卷的方式,实现自定义主页

  • down掉上一个docker容器
  • 1、更改docker-compose为:
version: '3.1'
services:
  nginx:
    restart: always
    image: daocloud.io/library/nginx:latest
    container_name: nginx
    ports:
      - 80:80
    volumes:  # 为了方便写个配置文件  使用数据卷 做映射
      - /opt/install/nginx/conf.d/:/etc/nginx/conf.d   # 配置文件
      - /opt/install/nginx/static/:/usr/share/nginx/html  #静态资源
  • 左边为映射的本地数据卷,: 右边为nginx的容器内部文件目录,创建容器后,nginx自动访问对应的数据卷目录

  • 2、新建conf.d/default.conf,里面是nginx的配置信息

server{
        # 监听端口
        listen 80;
        server_name 10.9.48.122;

        location / {
                # 资源路径
                root /usr/share/nginx/html;
                # 主页
                index index.html index.htm;
        }
}
  • 注意空格
    · 新建static目录,这里创建一个index.html文件(和主页名称对应)。
  • 重启docker-compose restart
  • 在这里插入图片描述
  • conf.d下的为监听、动态、静态资源路径设置、主页的设置,static则为数据卷的静态资源放置路径。

反向代理,通过nginx访问tomcat

类似于梯子,则是正向代理,配置到客户端的代理服务器。
反向代理则是配置到服务端,用于代理服务器,隐藏真实服务器地址,调配服务器压力、

  • 先启动一个tomcat
  • down掉上一个nginx
  • -修改conf.d为
server{ #服务器
  listen 80;#监听的端口
  server_name x.x.x.x;	#监听的ip / 虚拟机ip
    # 基于反向代理访问到Tomcat服务器
  location / {
      # proxy_pass 代理访问
   	  proxy_pass http://10.9.48.xx:8080/; 
  }
}
  • up -d 重新建立nginx,输入服务器ip,不用带端口,可以看到tomcat首页代表成功。
    一步一步搭建Nginx集群并实现均衡负载_第2张图片

创建多台tomcat

通过数据卷的方式实现,集群中有多少台tomcat就要创建多少个“tomcat/ROOT/”目录
在这里插入图片描述

  • 集群中有多少个tomcat服务器就要在docker-compose.yml中复制多少份,改:tomcat服务器名称、容器名称、端口、数据卷的映射路径
version: '3.1'
services:
  tomcat1:
    restart: always
    image: daocloud.io/library/tomcat:8.5.15-jre8
    container_name: tomcat1
    ports:
      - 8081:8080
    volumes:
     - /opt/install/package/nginx_proxy_tomcat/t1:/usr/local/tomcat/webapps
  • 冒号右侧为tomcat容器,左侧为数据卷的映射路径

搭建好tomcat集群后,即可让Nginx进行代理并实现负载均衡了,Nginx提供4种负载均衡策略。

负载均衡-轮询策略

轮询方式实现的是nginx对于tomcat集群的均衡分配,采取轮询方式进行任务分配。

  • tomcat服务器已经是启动状态
  • 进入到nginx的目录下,修改conf.d
# 配置tomcat的负载均衡-轮询
upstream servers{
                # tomcat的开放端口,有几台放几个
                server 10.9.48.122:8081;
        }


server{
        # nginx监听的位置
        listen 80;
        server_name 10.9.48.122;

        location / {
                proxy_pass http://servers;
        }
}

在这里插入图片描述

  • 通过访问服务器地址,即可查看效果

负载均衡-权重策略

设置权重策略可手动干预nginx对于tomcat集群的工作负载分配,适用于需要灵活分配负载或者集群性能不一致等场景。

# 配置tomcat的负载均衡
upstream servers{
                # tomcat的开放端口
                server 10.9.48.122:8081 weight=4;
                server 10.9.48.122:8082 weight=3;
                server 10.9.48.122:8083 weight=3;
                server 10.9.48.122:8084 weight=1;
        }


server{
        # 监听的位置
        listen 80;
        server_name 10.9.48.122;

        location / {
                # 资源路径
                #root /usr/share/nginx/html;
                # 主页
                #index index.html index.htm;
                #需要代理的ip 与 端口
                #proxy_pass http://10.9.48.122:8080;
                # 负载均衡
                proxy_pass http://servers;
        }
}
  • restart 容器即可看到效果

负载均衡-IPHash策略

通过对请求的客户端的ip进行hash,实现同一个ip只能访问某一个固定的一个服务器场景,可与权重策略同时使用。

upstream servers{
				#加入一段ip_hash;即可
                ip_hash;
                # tomcat的开放端口
                server 10.9.48.122:8081 weight=4;
                server 10.9.48.122:8082 weight=3;
                server 10.9.48.122:8083 weight=3;
                server 10.9.48.122:8084 weight=1;
        }
  • restart 容器即可看到效果

负载均衡-最小连接数策略

将请求分配到当前连接数量最少的服务器。不可与其他策略混用

upstream servers{
				#加入least_conn;
                least_conn;
                ....省略
                }

小记:

  • 不添加默认轮询策略,添加weight实现指定权重,添加ip_hash实现IPHash策略,least_conn实现优先最小连接数策略。
  • 先启动tomcat集群,尝试使用容器端口直接可访问,再启动Nginx,使用服务器ip访问。
  • 若拒绝访问连接,查看日志排查。可尝试主机开放集群中tomcat的端口。(已踩坑)
firewall-cmd --permanent --add-port=port/tcp
firewall-cmd --load

你可能感兴趣的:(工具,笔记,nginx,docker)