美文网首页
nginx3-网站架构(LNMP)/负载均衡/高可用

nginx3-网站架构(LNMP)/负载均衡/高可用

作者: mrwangjian | 来源:发表于2020-02-12 16:30 被阅读0次

    老男孩教育61期--week16--网站架构(LNMP)/负载均衡/高可用

    01. 课程介绍部分:

    1. LNMP架构配置过程
    2. LNMP架构代码上线
    3. LNMP架构优化部署
       a 数据库数据信息迁移
       b 将数据信息共享存储
    4. LNMP架构安全访问  
    5. LNMP网页伪静态访问  
    6. 负载均衡服务(nginx)
       如何进行配置
    7. 负载均衡指令模块
    8. 实现架构动静分离
    9. 实现不同客户端显示不同页面
    

    02. 知识重点回顾:

    1. nginx网站服务状态监控功能
    2. nginx网站日志信息配置
    3. nginx网站页面跳转功能      rewrite  url -- url  uri -- uri 伪静态
       四种跳转方式:  last break  redirect permanent
    4. nginx网站地址匹配功能      =(匹配uri精确路径信息)     ~ ~* ^~ //  /
                                  = /  = /路径/文件信息.jpg
    5. nginx网站页面安全访问      HTTPS 私钥(openssl)-->csr--->CA申请   
    6. 网站特殊架构LNMP架构       实现访问动态资源
    

    03. LNMP架构配置过程

    01. 配置nginx文件 (nginx--php建立连接)  
    vim blog.conf
    [root@web01 conf.d]# cat blog.conf 
    server {
        listen       80;
        server_name  blog.oldboy.com;
        location / {
            root   /html/blog;
            index  index.php index.html index.htm;
        }
        location ~ \.php$ {
            root   /html/blog;
            fastcgi_index index.php;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;   --- fastcgi内置变量记录文件
        }
    }
    
    nginx -- /html/blog/test_info.php    --- /html/blog/test_info.php   --- php
    
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    
    编写动态页面:
    cd /html/blog
    echo "<?php phpinfo(); ?>" > /html/blog/test_info.php
    
    02. PHP -- mysql
    <?php
     $servername = "localhost";
     $username = "root";
     $password = "oldboy123";
     //$link_id=mysql_connect('主机名','用户','密码');
     //mysql -u用户 -p密码 -h 主机
     $conn = mysqli_connect($servername, $username, $password);
     if ($conn) {
           echo "mysql successful by oldboy !\n";
        }else{
           die("Connection failed: " . mysqli_connect_error());
        }
    ?>  
    
    mysqladmin -uroot password "oldboy123"   --- 给数据库设置密码
    mysql -uroot -poldboy123
    
    
    03. 实现代码上线
    第一个历程: 获取代码信息
    第二个历程: 将代码解压放置站点目录中
    第三个历程: 调整站点目录数据权限
    chown -R www.www blog/    --- 属主为nginx worker进程用户
    vim /etc/php-fpm.d/www.conf
    user = www
    group = www
    第四个历程: 进行网站页面初始化配置
    创建数据库:
    show databases;             --- 查看数据库信息
    create database wordpress;  --- 创建数据库 
    
    创建数据管理用户:
    grant all on wordpress.* to 'wordpress'@'localhost' identified by 'oldboy123';
    select user,host from mysql.user;
    
    413 Request Entity Too Large  --- 上传的数据大于程序默认大小
    client_max_body_size 5m;      --- 设置请求主体最大尺寸
    

    04. 数据库如何进行迁移

    第一个历程: 备份数据库
    mysqldump -uroot -poldboy123 -A >/tmp/backup.sql
    第二个历程: 将数据进行传输
    scp -rp /tmp/backup.sql  172.16.1.51:/tmp
    第三个历程: 恢复数据
    mysql -uroot -poldboy123 </tmp/backup.sql
    第四个历程: 检查网站页面
    grant all on wordpress.* to 'wordpress'@'172.16.1.%' identified by 'oldboy123';
    修改代码文件链接指定数据库
    vim blog/wp-config.php
    define('DB_HOST', '172.16.1.51');
    
    补充: 数据库密码忘记破解方法
    https://www.cnblogs.com/LBeautiful/p/10552941.html
    MySQL忘记密码破解密码的方法
    1、打开mysql配置文件/etc/my.cnf在【mysqld】下面添加一行代码:skip-grant-tables。这行代码意思就是跳过跳过授权表,即是可以跳过密码验证直接进入数据库。
    2、service mysqld restart //重启mysql数据库。假如不重启的话,不会生效。
    3、mysql -uroot -p  //此时直接回车,既可以进入数据库。
       出现mysql>就说明你已经进入到mysql数据库里了。
    4、进数据库后,use mysql   //选择mysql这个库,因为mysql的root密码存放在这个数据库里。
    5、show tables  //查看下mysql库里有哪些表,我们需要操作的用户名密码都在user表里。
    6、desc user  //查看下user表有哪些字段。
    7、update user set password=password('123456') where user="root";  //用户选root,可以随便更改成任意密码,我这里设置的123456,password()是mysql密码加密的一个函数。
       有些数据要执行update user set authentication_string=password('coship') where user="root";才行
    8、flush privileges;   //刷新下密码,使更改的生效。
    9、exit  //退出数据库。
    

    10、退出数据库,重新登录
    mysql -uroot -p //回车输入刚刚更改的密码,就能进去了。
    然后再次进入配置文件vi /etc/my.cnf 把skip-grant-tables去掉。

    05. 如何实现数据共享存储

    第一个历程: 确认数据本地存储位置
    方式一: 复制图片地址
    http://blog.oldboy.com/wp-content/uploads/2019/07/1_oldboy01-300x300.jpg
    方式二: 利用命令操作
    inotify + rsync --> 脚本
    inotify + rsync --> sersync 实时同步
    inotifywait  -mrq  /html/blog
    find /html/blog/ -type f -name "oldboy02*"  -mmin -3
    
    本地存储目录--blog
    /html/blog/wp-content/uploads/   --- 存储服务挂载点 
    
    第二个历程: 将本地存储数据进行移动备份
    mv /html/blog/wp-content/uploads/*  /tmp/blog_backup/
    
    第三个历程: 实现存储目录挂载操作
    mount -t nfs 172.16.1.31:/data/blog /html/blog/wp-content/uploads
    
    第四个历程: 还原原来数据
    mv   /tmp/blog_backup/*  /html/blog/wp-content/uploads/
    
    第五个历程: 检查测试
    

    06. LNMP架构安全访问:

    第一个历程: 创建私钥和证书信息
    第二个历程: 编写配置文件  blog.conf 
    # cat /etc/nginx/conf.d/blog.conf 
    server {
        listen 80;
        server_name blog.oldboy.com;
        rewrite ^(.*) https://$server_name$1 redirect;
        }
    server {
        listen       443 ssl;
        server_name  blog.oldboy.com;
        client_max_body_size 5m;
        ssl_certificate     /etc/nginx/server.crt;
        ssl_certificate_key /etc/nginx/server.key;
        location / {
            root   /html/blog;
            index  index.php index.html index.htm;
        }
        location ~ \.php$ {
            root   /html/blog;
            fastcgi_index index.php;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }
    

    07. 实现blog网站伪静态配置

    第一个历程: 修改网站后台设置
    设置---固定链接---自定义结构
    /%post_id%.html
    
    第二个历程: 编写nginx配置文件
    [root@web01 html]# cat /etc/nginx/conf.d/blog.conf 
    server {
        listen 80;
        server_name blog.oldboy.com;
        rewrite ^(.*) https://$server_name$1 redirect;
        }
    server {
        listen       443 ssl;
        server_name  blog.oldboy.com;
        client_max_body_size 5m;
        ssl_certificate     /etc/nginx/server.crt;
        ssl_certificate_key /etc/nginx/server.key;
        rewrite /wp-admin$ $scheme://$host$uri/ permanent;    --- 伪静态地址信息重写
        location / {
            root   /html/blog;
            index  index.php index.html index.htm;
            try_files $uri $uri/ /index.php?$args==$uri;      --- 访问伪静态页面
        }
        location ~ \.php$ {
            root   /html/blog;
            fastcgi_index index.php;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }
    

    08. 反向代理负载均衡服务概述

    集群: 一群完成相同工作的服务器   服务软件相同  配置文件信息相同
          作用: 1. 提高服务器处理能力  2. 价格有保证  3. 冗余能力
          分类: 1. 负载均衡集群--lb    2. 高可用集群  3. 高性能运算集群 (沈阳飞机 南京地质勘探)
    负载均衡:
          1. 实现用户访问请求进行调度处理
          2. 实现访问压力负载分担
    反向代理(中介):  lvs 负载均衡 数据转发(外包)
          用户  -- 负载均衡 --- web服务器           反向代理    外网主机  --- 互联网 --- 主机(中介) --- 内网服务器
                <--         <--
          用户  -- 正向代理 --- 网站服务器(google)  正向代理    内网主机  --- 互联网 --- 主机(中介) --- 外网服务器   翻墙
    

    09. 反向代理负载均衡配置过程

    环境准备
    lb01   负载均衡服务器    10.0.0.5
    web01  web集群服务器     10.0.0.7
    web02  web集群服务器     10.0.0.8 
    web03  web集群服务器     10.0.0.9
    
    第一个历程: web服务器进行环境配置
    配置文件内容: www.conf    
    server {
        listen       80;
        server_name  www.oldboy.com;
        location / {
           root /html/www/;
           index index.html;
        }
    }
    #web01 
    mkdir /html/www/ -p
    echo "web01 www.oldboy.com" >/html/www/oldboy.html
    #web02 
    mkdir /html/www/ -p
    echo "web02 www.oldboy.com" >/html/www/oldboy.html  
    #web03
    mkdir /html/www/ -p
    echo "web02 www.oldboy.com" >/html/www/oldboy.html      
    
    第二个历程: 在负载均衡服务器上进行测试
    [root@lb01 ~]# curl -H host:www.oldboy.com  10.0.0.7/oldboy.html
    web01 www.oldboy.com
    [root@lb01 ~]# curl -H host:www.oldboy.com  10.0.0.8/oldboy.html
    web02 www.oldboy.com
    [root@lb01 ~]# curl -H host:www.oldboy.com  10.0.0.9/oldboy.html
    web03 www.oldboy.com
    
    第三个历程: 负载均衡配置部署
    upstream     --- 负载均衡模块
    proxy_pass   --- 反向代理模块
    
    [root@lb01 nginx]# cat nginx.conf
    user  www;
    worker_processes  2;
    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;
        keepalive_timeout  0;
        upstream oldboy {              --- 定义可以进行负载的web节点信息           
            server  10.0.0.7:80;            
            server  10.0.0.8:80;            
            server  10.0.0.9:80;            
        } 
        server {
           listen         80;
           server_name    localhost;
           location / {
            proxy_pass http://oldboy;  --- 反向代理将请求发送给指定集群
           }
        }
    }
    
    第四个历程: 进行访问测试
    DNS解析
    10.0.0.5  www.oldboy.com
    

    10. 负载均衡模块详细说明: upstream 负载均衡模块

    Syntax:     upstream name { ... }
    Default:    —
    Context:    http
    
    upstream backend {
       server backend1.example.com weight=5;
       server 127.0.0.1:8080       max_fails=3 fail_timeout=30s;
       server unix:/tmp/backend3;
       
       server backup1.example.com  backup;
    }
    
    upstream模块功能参数:
    1) weight:   权重参数
       可以实现权重轮训分配资源, 默认是轮训分配资源
       upstream oldboy {
        server  10.0.0.7:80 weight=3;
        server  10.0.0.8:80 weight=2;
        server  10.0.0.9:80 weight=1;
       }
       
    2) least_conn: 按照节点连接数分配资源
       upstream oldboy {
        least_conn;
        server  10.0.0.7:80;
        server  10.0.0.8:80;
        server  10.0.0.9:80;
       }
    
    3) ip_hash: 确保一个用户多次访问, 负载均衡都会分配给相同web节点 了解
       用户01(100人):   10.0.0.1    ---  001     web01 
       用户02:          11.0.0.1    ---  011     web02 
       用户03:          12.0.0.1    ---  112     web03 
       
       000 ~ 150 
       000 ~ 050   -->  web01   100
       051 ~ 100   -->  web02
       101 ~ 150   -->  web03
       负载不均情况
       
       优选:
       用户01              --> web01(缓存客户端 memcache-php)   用户01登录信息
       用户02    ---> lb01 --> web02(缓存客户端 memcache-php)   用户02登录信息  -->  缓存服务器 memcached (会话记录)
       用户03              --> web03(缓存客户端 memcache-php)   用户03登录信息       session会话共享服务器
    
       upstream oldboy {
        ip_hash;
        server  10.0.0.7:80;
        server  10.0.0.8:80;
        server  10.0.0.9:80;
       }
    
    4) 负载均衡节点健康检查
       max_fails=3        --- 最大的失败次数   lb01  --- http请求 --- web02
       fail_timeout=30s   --- 失败超时时间
       
       请求   ---  web01  1次失败  2次失败  3次失败   1次失败  30s 
       请求   ---  web02  1次成功
        upstream oldboy {
           server  10.0.0.7:80 max_fails=10 fail_timeout=60s;
           server  10.0.0.8:80;
           server  10.0.0.9:80;
        }
    5) 节点备份功能
        upstream oldboy {
          server  10.0.0.7:80;
          server  10.0.0.8:80;
          server  10.0.0.9:80 backup;
        } 
    

    11. 反向代理模块详细说明: proxy 反向代理模块

    proxy_pass:       反向代理指令
    proxy_set_header: 设置请求头信息  
    01. 访问负载均衡可以显示不同网站页面
    proxy_set_header Host $host;
    02. 使网站节点日志可以记录真实IP地址
    proxy_set_header X-Forwarded-For $remote_addr;
    03. 检查网站页面是否正确
    proxy_next_upstream error timeout http_404;
    location / {
        proxy_pass http://oldboy;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_next_upstream error timeout http_404;
    }
    

    12. 反向代理负载均衡企业应用

    1) 网站服务动静分离
    上传集群   upload   10.0.0.7 web01  uri==upload  index.html  upload page 
    静态集群   static   10.0.0.8 web02  uri==static  index.html  static page 
    默认集群   default  10.0.0.9 web03  uri          index.html  default page 
    
    第一个历程: 部署web集群服务
    #web01:
    mkdir /html/www/upload/
    echo "upload page" >/html/www/upload/index.html
    #web02
    mkdir /html/www/static/
    echo "static page" >/html/www/static/index.html
    #web03
    echo "default page" >/html/www/index.html
    
    第二个历程: 编写负载均衡配置
    [root@lb01 nginx]# cat nginx.conf
    user  www;
    worker_processes  2;
    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;
        keepalive_timeout  0;
        upstream upload {
            server  10.0.0.7:80;
        }  
        upstream static {
            server  10.0.0.8:80;
        }  
        upstream default {
            server  10.0.0.9:80;
        }  
        server {
           listen         80;
           server_name    localhost;
           location / {
              proxy_pass http://default;
              proxy_set_header Host $host;
              proxy_set_header X-Forwarded-For $remote_addr;
              proxy_next_upstream error timeout http_404;
           }
           location /upload/ {
              proxy_pass http://upload;
              proxy_set_header Host $host;
              proxy_set_header X-Forwarded-For $remote_addr;
              proxy_next_upstream error timeout http_404;
           }
           location /static/ {
              proxy_pass http://static;
              proxy_set_header Host $host;
              proxy_set_header X-Forwarded-For $remote_addr;
              proxy_next_upstream error timeout http_404;
           }
        }
    }
    
    
    2) 网站服务根据客户端显示不同页面
       iphone   -->  wap集群      web01    index.html   iphone page 
       Chrome   -->  web集群      web02    index.html   chrome page 
       other    -->  default 集群 web03    index.html   default page     
    
    第一个历程: 部署web集群服务
    web01:
    echo iphone page > /html/www/index.html
    web02:
    echo chrome page > /html/www/index.html
    web03:
    echo "default page" >/html/www/index.html
       
    第二个历程: 修改负载均衡配置文件
    [root@lb01 nginx]# cat nginx.conf
    user  www;
    worker_processes  2;
    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;
        keepalive_timeout  0;
        upstream iphone {
            server  10.0.0.7:80;
        }  
        upstream chrome {
            server  10.0.0.8:80;
        }  
        upstream default {
            server  10.0.0.9:80;
        }  
        server {
           listen         80;
           server_name    localhost;
           location / {
              proxy_pass http://default;
              proxy_set_header Host $host;
              proxy_set_header X-Forwarded-For $remote_addr;
              proxy_next_upstream error timeout http_404;
              if ($http_user_agent ~* iphone) {
                  proxy_pass http://iphone;
              }
              if ($http_user_agent ~* Chrome) {
                 proxy_pass http://chrome;
              }
           }
        }
    }
    

    13. 课程知识总结

    1. LNMP架构部署配置: 
       a nginx-php建立关系
       b php-mysql建立关系 代码
    2. LNMP架构代码上线 
       a 下载代码文件, 上传到站点目录
       b 对代码数据信息进行授权
       c 进行网站页面初始化 
       d 创建网站数据 登录数据库用户/密码
    3. 数据库迁移过程
    4. 数据共享存储   
       01. 本地存储目录信息
       02. 和存储目录进行挂载
    5. 网站页面安全访问 HTTPS 
    6. 网站页面伪静态配置     开发人员配合
    7. 网站负载均衡功能       集群  负载均衡  反向代理 
    8. 负载均衡服务部署  lvs haproxy
       upstream   负载均衡模块  详细说明
       proxy      反向代理模块  详细说明  
    9. 负载均衡服务企业应用
       a 企业架构动静分离
       b 根据用户客户端显示不同页面
    

    作业:

    1. 部署好LNMP架构 部署好负载均衡
      访问wordpress --- 负载均衡(https信息) --- web01/web02/web03 服务端口80
      http访问 --- https访问
    2. 如何部署www网站 bbs网站 zhihu网站
    3. 高可用服务 zabbix/防火墙

    相关文章

      网友评论

          本文标题:nginx3-网站架构(LNMP)/负载均衡/高可用

          本文链接:https://www.haomeiwen.com/subject/ynjcfhtx.html