• Linux三阶段之十:nginx反向代理负载均衡


    十、nginx反向代理负载均衡

    (一)LNMP架构迁移数据库说明

    迁移数据库:利用数据库备份命令(mysql mysqladmin mysqldump)

    1) 备份数据库数据库信息

     mysqldump -uroot -poldboy123 --all-databases >/tmp/bak.sql
     ll /tmp/bak.sql -h
     scp /tmp/bak.sql 172.16.1.51:/tmp/
    

    2) 恢复数据库数据库信

     ##db01 
     mysql -uroot -poldboy123 </tmp/bak.sql
     ###db01添加新的用户
     grant all on wordpress.* to wordpress@'172.16.1.0/255.255.255.0' identified by 'oldboy123';
     flush privileges;
     mysql -uwordpress -poldboy123 -h 172.16.1.51
    

    3) 数据库迁移完毕,修改网站连接数据库的配置文件

    mysql -uwordpress -poldboy123 -h 172.16.1.51       <-- 修改配置文件之前,先测试网站web服务器与迁移后的数据库连通性	
    vim wp-config.php                                  <-- 修改wordpress上的数据库连接参数信息
    /** MySQL主机 */
    define('DB_HOST','172.16.1.51')                    <-- 修改连接的主机信息,将localhost修改为172.16.1.51
    说明:web服务器数据库此时可以关闭了
    

    4)停止nginx服务器上MySQL服务

    /etc/init.d/mysql stop
    
    

    (二)LNMP架构数据迁移到NFS存储说明

    01:先将原有目录中数据移出

     cd /application/nginx/html/blog/wp-content/uploads
     mkdir /tmp/wordpress_backup -p
     mv ./* /tmp/wordpress_backup/
     
     数据存储到本地什么位置,获取方法
     ①. 通过网站页面右键点击,获取资源地址信息
     ②. find命令利用-mmin 5 
     ③. 利用inotify服务监控目录数据变化
    

    02:NFS服务器上配置创建共享目录

     vim /etc/exports
     /data 172.16.1.0/24(rw,sync,all_squash)
     showmount -e 172.16.1.31
     mount -t nfs 172.16.1.31:/data /mnt/
     
     showmount -e 172.16.1.31
     mount -t nfs 172.16.1.31:/data/ ./uploads/
     mv /tmp/wordpress_backup/* ./ 
    

    (三)nginx反向代理负载均衡功能

    客户端====代理服务器===web服务器	
    客户端看到的服务端==代理服务器	
    代理服务器====web服务器
    反向代理功能架构
    3台web服务器,组建出web服务器集群
    web01  10.0.0.7   172.16.1.7
    web02  10.0.0.8   172.16.1.8
    web03  10.0.0.9   172.16.1.9
    1台负载均衡服务器
    lb01   10.0.0.5   172.16.1.5	
    
    

    ①. 部署web服务器

    第一个里程:安装部署nginx软件

    mkdir /server/tools -p
    cd /server/tools
    wget http://nginx.org/download/nginx-1.12.2.tar.gz
    tar xf nginx-1.12.2.tar.gz
    yum install -y pcre-devel openssl-devel
    useradd -M -s /sbin/nologin www
    cd nginx-1.12.2
    ./configure --prefix=/application/nginx-1.12.2 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module
    make && make install
    ln -s /application/nginx-1.12.2 /application/nginx
    /application/nginx/sbin/nginx
    netstat -lntup|grep nginx
    

    第二个里程:编辑nginx配置文件

    server {
        listen       80;
        server_name  www.etiantian.org;
        root   html/www;
        index  index.html index.htm;
    }
    server {
        listen       80;
        server_name  bbs.etiantian.org;
        root   html/bbs;
        index  index.html index.htm;
    }
    scp -rp /application/nginx/conf/nginx.conf 172.16.1.8:/application/nginx/conf/
    scp -rp /application/nginx/conf/nginx.conf 172.16.1.9:/application/nginx/conf/
    

    第三里程:创建模拟测试环境

    mkdir /application/nginx/html/{www,bbs} -p
    for name in www bbs;do echo "$(hostname) $name.etiantian.org" >/application/nginx/html/$name/oldboy.html;done
    for name in www bbs;do cat /application/nginx/html/$name/oldboy.html;done	   
    

    第四里程:在负载均衡服务器上,进行测试访问

     curl -H host:www.etiantian.org 10.0.0.7/oldboy.html
     web01 www.etiantian.org
     curl -H host:bbs.etiantian.org 10.0.0.7/oldboy.html
     web01 bbs.etiantian.org
     curl -H host:www.etiantian.org 10.0.0.8/oldboy.html
     web02 www.etiantian.org
     curl -H host:bbs.etiantian.org 10.0.0.8/oldboy.html
     web02 bbs.etiantian.org
     curl -H host:www.etiantian.org 10.0.0.9/oldboy.html
     web03 www.etiantian.org
     curl -H host:bbs.etiantian.org 10.0.0.9/oldboy.html
     web03 bbs.etiantian.org
    
    

    ②. 部署负载均衡服务器

    第一个里程:安装部署nginx软件

    mkdir /server/tools -p
    cd /server/tools
    wget http://nginx.org/download/nginx-1.12.2.tar.gz
    tar xf nginx-1.12.2.tar.gz
    yum install -y pcre-devel openssl-devel
    useradd -M -s /sbin/nologin www
    cd nginx-1.12.2
    ./configure --prefix=/application/nginx-1.12.2 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module
    make && make install
    ln -s /application/nginx-1.12.2 /application/nginx
    /application/nginx/sbin/nginx
    netstat -lntup|grep nginx
    

    第二个里程:编写nginx反向代理配置文件

    grep -Ev "#|^$" nginx.conf.default >nginx.conf
    
    官方链接:http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream
    Syntax:	upstream name { ... }
    Default:	—
    Context:	http
    eg:
    upstream oldboy {
       server 10.0.0.7:80;
       server 10.0.0.8:80;
       server 10.0.0.9:80;
    }
    说明:upstream模块就类似定一个一个地址池或者说定一个web服务器组
    
    官方链接:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass
    Syntax:	proxy_pass URL;
     Default:	—
     Context:	location, if in location, limit_except
    eg:
    location / {
       proxy_pass http://oldboy;
    }
     说明:proxy_pass主要用于进行抛送用户访问请求给upstream模块中的相应节点服务器
    
    worker_processes  1;
     events {
         worker_connections  1024;
     }
     http {
         include       mime.types;
         default_type  application/octet-stream;
         sendfile        on;
         keepalive_timeout  65;
         upstream oldboy {
             server 10.0.0.7:80;
             server 10.0.0.8:80;
             server 10.0.0.9:80;
         }
         server {
             listen       80;
             server_name  localhost;
             root   html;
             index  index.html index.htm;
           location / {
             proxy_pass http://oldboy;
            }   
         }
     }
    
    /application/nginx/sbin/nginx -t
    /application/nginx/sbin/nginx -s reload
    

    第三个里程:进行访问负载均衡服务器测试

    1)利用浏览器进行测试
       进行hosts解析
       http://www.etiantian.org/oldboy.html  <--利用ctrl+F5刷新测试,检查是否进行负载调度
     2)利用curl命令进行测试
        [root@lb01 conf]# curl -H host:www.etiantian.org 10.0.0.5/oldboy.html
        web01 www.etiantian.org
        [root@lb01 conf]# curl -H host:www.etiantian.org 10.0.0.5/oldboy.html
        web02 www.etiantian.org
        [root@lb01 conf]# curl -H host:www.etiantian.org 10.0.0.5/oldboy.html
        web03 www.etiantian.org
    
    

    (四)Nginx反向代理负载均衡模块功能详述

    ngx_http_upstream_module
    http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream
    

    ①模块常用功能说明:

    1)定义后端集群web节点信息,定义一个地址的池子

    upstream oldboy {
    server 10.0.0.7:80;
    server 10.0.0.8:80;
    server 10.0.0.9:80;
    }
    

    2)实现权重值负载访问功能

    upstream oldboy {
    server 10.0.0.7:80 weight=3;
    server 10.0.0.8:80 weight=1;
    server 10.0.0.9:80 weight=1;
    }
    

    3)定义后端访问的失败次数-max_fails

    upstream oldboy {
    server 10.0.0.7:80 weight=3 max_fails=3;
    server 10.0.0.8:80 weight=1 max_fails=3;
    server 10.0.0.9:80 weight=1 max_fails=3;
    }
    

    4)定义后端失败重试的间隔-fail_timeout

    upstream oldboy {
    server 10.0.0.7:80 weight=3 max_fails=3 fail_timeout=10s;
    server 10.0.0.8:80 weight=1 max_fails=3;
    server 10.0.0.9:80 weight=1 max_fails=3;
    }
    	说明:在尝试多次失败后,在超时时间过去之后,会再给相应节点一次机会
    

    5)定义后端服务的热备节点-backup

    upstream oldboy {
    server 10.0.0.7:80;
    server 10.0.0.8:80;
    server 10.0.0.9:80 backup;
    }
    

    ②模块常用调度算法:

    1)定义轮询调度算法-rr-默认调度算法
    采取平均分配
    
    2)定义权重调度算法-wrr
    能者多劳
    
    3)定义静态调度算法-ip_hash
    upstream oldboy {
    ip_hash;
    server 10.0.0.7:80;
    server 10.0.0.8:80;
    server 10.0.0.9:80 backup;
    }
    说明:配置ip_hash时,一定不能和backup与weight参数同时出现
    
    4)定义最小的连接数-least_conn
    upstream oldboy {
    least_conn;
    server 10.0.0.7:80;
    server 10.0.0.8:80;
    server 10.0.0.9:80 backup;
    }
    

    ③模块常用功能(ngx_http_proxy_module)

    proxy_set_header 	--- 设置反向代理服务器到web服务器的HTTP请求报文中的头部信息
    server {
    listen       80;
    server_name  www.etiantian.org;
    root   html;
    index  index.html index.htm;
    location / {
    proxy_pass http://oldboy;
    proxy_set_header host $host;
    }
    }
    server {
    listen       80;
    server_name  bbs.etiantian.org;
    proxy_set_header host $host;
    root   html;
    index  index.html index.htm;
    location / {
    proxy_pass http://oldboy;
    proxy_set_header host $host;
    }
    }
    说明:通过以上配置,可以实现访问负载均衡看到不同虚拟主机页面信息(oldboy,相当于使用ip地址访问虚拟主机,默认访问的是第一个server)
    
    server {
    listen       80;
    server_name  www.etiantian.org;
    root   html;
    index  index.html index.htm;
    location / {
    proxy_pass http://oldboy;
    proxy_set_header host $host;
    proxy_set_header X-Forwarded-For $remote_addr;
    } 
    }
    server {
    listen       80;
    server_name  bbs.etiantian.org;
    root   html;
    index  index.html index.htm;
    location / {
    proxy_pass http://oldboy;
    proxy_set_header X-Forwarded-For $remote_addr;
    } 
    }
    说明:实现用户访问反向代理服务,让web服务器日志中记录真实用户IP地址信息
    

    (五)案例:

    先进行企业案例需求梳理:
    当用户请求www.etiantian.org/upload/xx 地址时,实现由upload上传服务器池处理请求。
    当用户请求www.etiantian.org/static/xx 地址时,实现由静态服务器池处理请求。
    除此以外,对于其他访问请求,全都由默认的动态服务器池处理请求。
        用户请求(URI)	  处理请求服务器	  站点目录	         功能
        /upload	           10.0.0.8:80	     html/www/upload	 upload服务器
        /static	           10.0.0.7:80	     html/www/static	 static静态服务器
        /	               10.0.0.9:80	     html/www	         默认
    

    解题方法:

    1)完成nginx网站服务器配置

    第一个里程:创建测试环境

    # 10.0.0.8 主机上创建upload目录,然后生成网站测试页面文件
    cd /application/nginx/html/www/
    mkdir upload
    cp oldboy.html upload/
    
    # 10.0.0.7 主机上创建static目录,然后生成网站测试页面文件
    cd /application/nginx/html/www/
    mkdir static
    cp oldboy.html static/	
    
    # 10.0.0.9 主机上创建默认测试页面文件即可
    

    第二个里程:利用lb01进行访问测试

    # 测试10.0.0.8访问是否正常
    curl -H host:www.etiantian.org 10.0.0.8/upload/oldboy.html
    web02 www.etiantian.org
    
    # 测试10.0.0.7访问是否正常
    curl -H host:www.etiantian.org 10.0.0.7/static/oldboy.html
    web01 www.etiantian.org
    
    # 测试10.0.0.9访问是否正常
    curl -H host:www.etiantian.org 10.0.0.9/oldboy.html
    web03 www.etiantian.org
    

    2)完成nginx反向代理服务器配置

    第一个里程:配置upstream模块信息

    upstream upload {
    server 10.0.0.8:80;
    }
    upstream static {
    server 10.0.0.7:80;
    }
    upstream default {
    server 10.0.0.9:80;
    }   
    

    第二个里程:配置proxy_pass模块信息

    server {
    listen       80;
    server_name  www.etiantian.org;
    root   html; 
    index  index.html index.htm;
    location / {
    proxy_pass http://default;
    proxy_set_header host $host;
    proxy_set_header X-Forwarded-For $remote_addr;
    }
    location /upload {
    proxy_pass http://upload;
    proxy_set_header host $host;
    proxy_set_header X-Forwarded-For $remote_addr;
    }
    location /static {
    proxy_pass http://static;
    proxy_set_header host $host;
    proxy_set_header X-Forwarded-For $remote_addr;
    }
    }
    

    例题2:

    根据用户请求客户端软件,显示不同页面信息

    解决方法:
    1)nginx网站服务器配置
    第一个里程:创建测试环境

    # 10.0.0.8 主机上创建upload目录,然后生成网站测试页面文件
    cd /application/nginx/html/www/
    cat oldboy.html
    
    # 10.0.0.7 主机上创建static目录,然后生成网站测试页面文件
    cd /application/nginx/html/www/
    cat oldboy.html 
    
    # 10.0.0.9 主机上创建默认测试页面文件即可
    cd /application/nginx/html/www/
    cat oldboy.html 
    
    测试访问:
    [root@lb01 conf]# curl -H host:www.etiantian.org 10.0.0.7/oldboy.html
    web01 www.etiantian.org
    [root@lb01 conf]# curl -H host:www.etiantian.org 10.0.0.8/oldboy.html
    web02 www.etiantian.org
    [root@lb01 conf]# curl -H host:www.etiantian.org 10.0.0.9/oldboy.html
    web03 www.etiantian.org
    

    2)nginx反向代理服务器配置

    第一个里程:配置upstream模块信息

    upstream iphone {
    server 10.0.0.8:80;
    }
    upstream android {
    server 10.0.0.7:80;
    }
    upstream pc {
    server 10.0.0.9:80;
    }   
    

    第二个里程:配置proxy_pass模块信息

    server {
    listen       80;
    server_name  www.etiantian.org;
    root   html;
    index  index.html index.htm;
    location / {
    if ($http_user_agent ~* "iphone") {
    proxy_pass http://iphone;
    }
    if ($http_user_agent ~* "android") {
    proxy_pass http://android;
    }
    proxy_pass http://pc;
    proxy_set_header host $host;
    proxy_set_header X-Forwarded-For $remote_addr;
    }
    }
    
  • 相关阅读:
    使用VisualVM进行性能分析及调优(转)
    Eclipse插件开发中对于Jar包和类文件引用的处理(彻底解决插件开发中的NoClassDefFoundError问题)(转)
    Adapter 代码中启动报错
    Myeclipse安装SVN插件(转)
    用java程序调用批处理文件
    内存泄露及常见的解决办法(转)
    Adapter 启动时报错——2
    开启Win7系统管理员Administrator账户
    C盘更改文件夹权限
    Adapter 启动时报错
  • 原文地址:https://www.cnblogs.com/cuiyongchao007/p/12820345.html
Copyright © 2020-2023  润新知