• Nginx 通过upstream服务器组实现轮询式负载均衡及我所遇到的问题 【关闭selinux服务】


    十年河东,十年河西,莫欺少年穷

    学无止境,精益求精

    在进行本篇主题之前,先介绍下Nginx关键字proxy_pass 和 proxy_redirect 的语法

    proxy_pass 后面是被代理的服务器域名 或 Ip ,例如:proxy_pass  http://www.jd.com  proxy_pass  http://www.121.226.246.3/

    proxy_pass  被代理服务器Ip/域名

    proxy_redirect 是为了解决防止暴露真实服务器而使用的,他的语法为: proxy_redirect  被代理服务器域名/Ip  Nginx服务器Ip/域名 ,例如:proxy_pass  http://www.jd.com  http://192.168.136.135 

    proxy_redirect  被代理服务器Ip/域名  Nginx服务器Ip/域名

     查看Nginx 各路径

    rpm -ql nginx

     进入正题:Nginx 负载均衡 

     1、准备工作:

    准备2台虚拟机,分别命名为nginxserver 、 webserver

    分别在nginxserver 和 webserver做如下准备

    开通centos7网络模块,可参考:linux centos 7 无法上网,ping 指令不通的问题

    更新yum源为阿里云,可参考:Linux Centos7 修改Yum源  

    安装nginx,并设置为自启动,可参考:CentOS 7中安装Nginx 并设置自启动

    2、开通端口

    在nginxserver 开通 80端口

    在webserver 开通 80、81、82、83端口,其中81  82  83 三个端口用来模拟三个内容相同的 web站点

    [root@localhost nginx]# sudo firewall-cmd --add-port=80/tcp --permanent
    success
    [root@localhost nginx]# sudo firewall-cmd --add-port=81/tcp --permanent
    success
    [root@localhost nginx]# sudo firewall-cmd --add-port=82/tcp --permanent
    success
    [root@localhost nginx]# sudo firewall-cmd --add-port=83/tcp --permanent

    3、修改webserver服务器Nginx配置文件,模拟4个相同web站点

     server {
            listen       80;
            default_type       text/html;
    
            server_name  localhost;
            location / {
            return 200 '<h1> this is 80 server </h1>';
            }
    
        }
    
            server {
            listen       81;
            default_type       text/html;
    
            server_name  localhost;
            location / {
            return 200 '<h1> this is 81  server </h1>';
            }
    
        }
    
            server {
            listen       82;
            default_type       text/html;
    
            server_name  localhost;
            location / {
            return 200 '<h1> this is 82 server </h1>';
            }
    
        }
    
            server {
            listen       83;
            default_type       text/html;
    
            server_name  localhost;
            location / {
            return 200 '<h1> this is 83 server </h1>';
                   }
    }

    5、重新加载Nginx配置文件

    nginx -s reload

    6、尝试访问81端口服务器

     端口开了,但无法访问,什么原因呢?

    7、尝试重启Nginx

    systemctl restart nginx

    报错

     输入提示的命令,获取答案

    systemctl status nginx.service

     journalctl -xe

     原来是 SELinux 阻止了端口的访问

    8、selinux服务关闭

    setenforce 0
    sed -i.bak s/'^SELINUX=enforcing$'/'SELINUX=disabled'/g /etc/selinux/config
    

    8.1 查看selinux服务状态

    getenforce    --- 确认selinux服务是否开启或是关闭
    [root@server ~]# getenforce 
    Enforcing

    8.2 临时关闭selinux服务

    setenforce [1|0]    --- 1表示临时开启Enforcing,0表示临时关闭Permissive
    getenforce    --- 关闭后确认
    [root@server ~]# setenforce 0
    [root@server ~]# getenforce 
    Permissive

    8.3 永久关闭selinux服务

    修改/etc/selinux/config文件

    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #     enforcing - SELinux security policy is enforced.    --- 服务处于正常开启状态
    #     permissive - SELinux prints warnings instead of enforcing.    --- 服务被临时关闭了
    #     disabled - No SELinux policy is loaded.    --- 服务被永久关闭
    SELINUX=enforcing

    第一步:修改配置文件

    [root@server ~]# vi /etc/selinux/config 
    SELINUX=disabled

    第二步:系统重启生效配置

    [root@server ~]# reboot

    第三步:确认服务状态

    [root@server ~]# getenforce 
    Disabled

    9、关闭后,重启Nginx,并访问81服务器

    systemctl restart nginx

     ok,截止到这儿,我们的四个web站点就可以访问了

    10、配置nginx服务器nginx.conf 文件

       upstream backend {
       server 192.168.136.136;
       server 192.168.136.136:81;
       server 192.168.136.136:82;
       server 192.168.136.136:83;
       }    
       
        server {
            listen       80;
            server_name  localhost;
    
            location / {
                proxy_pass  http://backend;
            }
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
        }

    这里需要注意的是:upstream 后的名称为:服务器组的名称,必须要和nginx侦听端口location中的保持一致。

    此时我们访问服务器http://192.168.136.135/,输出如下:

     

     他会通过轮询的模式选择服务器

    因为服务器的配置不尽相同,针对配置好的服务器我们可以多量指向,那么通过加上权重,实现有选择性的访问

    11、加权轮询访问

     upstream backend {
       server 192.168.136.136 weight=1;
       server 192.168.136.136:81 weight=2;
       server 192.168.136.136:82 weight=3;
       server 192.168.136.136:83 weight=4;
       }    
       
        server {
            listen       80;
            server_name  localhost;
    
            location / {
                proxy_pass  http://backend;
            }
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
        }

     权重最大的会被优先访问

    nginx 负载均衡案例

    案例1、

     案例2、

     案例3、

     案列4、【域名要解析到nginx服务器对应的IP】

     案例5、

    @天才卧龙的博客

  • 相关阅读:
    MySQL 和 Oracle 在 MyBatis 使用中的区别
    nodeppt:网页版 PPT
    在 sql 语句出现 warning 之后,立刻执行 `show warnings;` 就可以看到 warning 提示信息
    MySQL 列,可选择的数据类型(通过sql命令查看:`help create table;`)
    create table 推荐规则
    MySQL 中的变量:系统变量(包括:会话变量、全局变量)、用户变量(包括:局部变量、用户变量)
    MySQL 有用的查询语句
    MySQL 遇到错误集锦
    VARCHAR(N)类型,utf8编码,则N最大值为多少,n表示什么?
    MySQL 的严格模式
  • 原文地址:https://www.cnblogs.com/chenwolong/p/upstream.html
Copyright © 2020-2023  润新知