• 十.nginx反向代理负载均衡服务实践部署


    期中集群架构-第十章-nginx反向代理负载均衡章节章节
    ======================================================================

    01. LNMP架构迁移数据库说明

    02. LNMP架构数据迁移到NFS存储说明

    03. nginx反向代理负载均衡功能

     

    01. LNMP架构迁移数据库说明
    迁移数据库:利用数据库备份命令(mysql mysqladmin mysqldump)
    1) 备份数据库数据库信息

    mysqldump命令要全路径或者把命令链接到/usr/bin下

    ln -s /application/mysql/bin/mysqldump /usr/bin
       mysqldump -uroot -poldboy123 --all-databases >/tmp/bak.sql
       ll /tmp/bak.sql -h 检查文件

       -rw-r--r-- 1 root root 1.2M May 20 21:54 /tmp/bak.sql
       scp /tmp/bak.sql 172.16.1.51:/tmp/ 备份到MySQL服务器

    2) 恢复数据库数据库信息
       ##db01
       mysql -uroot -poldboy123 </tmp/bak.sql

       登陆数据库查看恢复,WordPress已恢复

       测试web01的网站数据远程连接到db01上

       报错不允许连接

       查看哪些用户可以连接到数据库 SQL语句 select user,host from mysql.user;

       显示wordpress 用户只能以本地方式连接 

     ###db01添加新的用户

       允许那个网段可以连接我设置好密码
       grant all on wordpress.* to wordpress@'172.16.1.0/255.255.255.0' identified by 'oldboy123';

    测试web01连接它没问题了,数据迁移完毕

       flush privileges;刷新权限语句
       

    3) 数据库迁移完毕,修改网站连接数据库的配置文件
      mysql -uwordpress -poldboy123 -h 172.16.1.51   <-- 修改配置文件之前,先测试网站web服务器与迁移后的数据库连通性
      vim wp-config.php                                                     <-- 修改wordpress上的数据库连接参数信息

      进入站点目录bolg  ---cd /application/nginx/html/blog/

      修改wp-config.php文件,这里设置的是localhost本地主机

      修改为我们创建的MySQL数据库服务器地址172.16.1.51

      

      

      /** MySQL主机 */
      define('DB_HOST','172.16.1.51')                            <-- 修改连接的主机信息,将localhost修改为172.16.1.51
    说明:web服务器数据库此时可以关闭了

    4)停止nginx服务器上MySQL服务
    /etc/init.d/mysql stop

    02. LNMP架构数据迁移到NFS存储说明
    01:先将原有目录中数据移出

    右键网站中的图片看到他在站点目录中的存储位置,blog.etiantian.org/wp-content/uploads/2018/05/

    进入此目录,在/tmp/下创建备份目录 把uploads下所有文件迁移过去
       cd /application/nginx/html/blog/wp-content/uploads
       mkdir /tmp/wordpress_backup -p
       mv ./* /tmp/wordpress_backup/

    数据存储到本地什么位置,获取方法
       ①. 通过网站页面右键点击,获取资源地址信息
       ②. find命令利用-mmin 5
       ③. 利用inotify服务监控目录数据变化

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

    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

       把nfs共享目录挂载到uploads下,在把数据移动过去此时相当于移动到了nfs下的data共享目录

       此时站点的数据就存储到了nfs存储服务器上了,存储服务器上的数据会再次备份到备份服务器上
       mount -t nfs 172.16.1.31:/data/ ./uploads/
       mv /tmp/wordpress_backup/* ./

    03. nginx反向代理负载均衡功能

     

       客户端====代理服务器===web服务器
       客户端看到的服务端==代理服务器
       代理服务器====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

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

     -H  host:****** 10.0.0.7/oldboy.html
    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反向代理配置文件

       cd /application/nginx/conf/

       egrep -v "#|^$" nginx.conf.default >nginx.conf

       或grep -Ev "#|^$" nginx.conf.default >nginx.conf

    upstream模块
    官方链接:http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream

    官方模块 指令说明
       Syntax: upstream name { ... }
       Default: —
       Context: http  ---只能配置到hhtp 区块
    eg:
    upstream oldboy {
    server 10.0.0.7:80;
    server 10.0.0.8:80;
    server 10.0.0.9:80;
    }
    说明:upstream模块就类似定一个一个地址池或者说定一个web服务器组

                 组里面的属于成员

    proxy_pass模块
    官方链接: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; 指定调度的集群组名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解析 地址不能是web地址 应该是负载服务器地址10.0.0.5

        10.0.0.5 www.etiantian.org  bbs.etiantian.org  blog.etiantian.org
        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

    04.Nginx反向代理负载均衡模块功能详述

       upstream模块  ngx_http_upstream_module

    模块常用功能说明:

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

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

       }

       2)实现权重值负载访问功能-weight 性能好的可以多分配权重

             测试结果权重值高的访问中web1几率更高

       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 超过次数就不予以分配

       不赋值默认为1次,设置结果为超过三次就交由下一个web服务器以此类推

       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  超过三次不分配交由其他web过超时时间后再次尝试

       upstream oldboy {

              server 10.0.0.7:80 weight=3 max_fails=3 tail_timeout=10s;
              server 10.0.0.8:80 weight=1 max_fails=3 tail_timeout=10s;
              server 10.0.0.9:80 weight=1 max_fails=3 tail_timeout=10s;

        }

       5)定义后端服务的热备节点-backup(负载节点服务器都挂了,使用备份)

       只要7和8不出现问题就不会启用9

       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     

              用户在访问时的IP地址通过ip_hash算法生成hash值分配给web服务器,

              下次在访问时对比值分配给相同的服务器 提升用户的体验

       upstream oldboy {

              ip_hash;

              server 10.0.0.7:80;
              server 10.0.0.8:80;
              server 10.0.0.9:80;

        }

        说明:配置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;

        }

       proxy 模块  ngx_http_proxy_module

       proxy_set_header  ---设置反向代理服务器到web服务器的http请求报文中的头部信息

       bbs.etiantian.org/oldboy.html

       本地主机在向代理服务器请求时头部是bbs.etiantian.org 代理服务器向web服务器请求时

       变为了www.etiantian.org 这时需要设置proxy_set_header模块指点头部信息为本地$host请求信息

         

       通过查看web服务器的日志信息显示访问的用户全是代理服务器的地址,不能真实的呈现来访的信息

       tail /application/nginx/logs/access.log

        说明:实现用户访问反向代理服务,让web服务器日志中记录真实用户的ip地址信息

       

  • 相关阅读:
    关于enum ,调用webservice,用户控件与主页面之间的交互,datsource属性,net面试题,反射类生成sql语句,URl重写一个小实例
    一个很简单的图片上传后立即显示在页面的控件(c#)
    委托之实现异步调用
    跟我学Linq
    w3c关于sql sever的基础操作
    join操作基础
    表操作基础
    javascript理论篇(详情见地址)
    android universal-image-loader的使用
    json相关类库,java对象与json相互转换
  • 原文地址:https://www.cnblogs.com/cqzhou/p/8964698.html
Copyright © 2020-2023  润新知