lamp架构

LNMP

一、网站的LNMP架构是什么:

L --- linux系统 注意: a selinux必须关闭 防火墙关闭 b /tmp 1777 mysql服务无法启动

N --- nginx服务部署 作用: 处理用户的静态请求 html jpg txt mp4/avi

P --- php服务部署 作用:

  1. 处理动态的页面请求

  2. 负责和数据库建立关系

M --- mysql服务部署 (yum会很慢 编译安装会报错) mariadb 作用: 存储用户的字符串数据信息

二、网站的LNMP架构部署

nginx服务 --- ansible一键化部署 修改yum源 mysql服务部署: 第一个历程: 安装数据库软件 yum install mariadb-server mariadb -y

补充: 数据库初始化过程 mysql_install_db --basedir=path The path to the MariaDB installation directory. 指定mysql程序目录 --datadir=path The path to the MariaDB data directory. 指定数据信息保存的目录 --user=mysql 让mysql管理数据目录 700

信息输出内容: 创建数据库的密码信息: PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! To do so, start the server, then issue the following commands: /application/mysql/bin/mysqladmin -u root password 'new-password' --- 给本地数据库设置密码 /application/mysql/bin/mysqladmin -u root -h web01 password 'new-password' --- 给远程数据库设置密码

第二个历程: 启动数据库服务 systemctl start mariadb.service systemctl enable mariadb.service

第三个历程: 给mysql数据库服务设置密码 mysqladmin -u root password 'oldboy123' --- 设置密码 mysql -u root -poldboy123

 

PHP服务部署流程:

官网:https://www.php.net/

第一个历程: 更新yum源/卸载系统自带的PHP软件 yum remove php-mysql php php-fpm php-common 更新源 rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

第二个历程: 安装php软件 yum install -y php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb

第三个历程: 编写配置文件 vim /etc/php-fpm.d/www.conf user = www nginx---www group = www PS: 保证nginx进程的管理用户和php服务进程的管理用户保持一致

第四个历程: 启动php服务 systemctl start php-fpm

三、LNMP架构的原理

用户访问网站--->nginx(fastcgi_pass) --FastCGI-->(php-fpm -- wrapper) php (php解析器) ---> mysql(读取或写入)

  1. 实现LNMP之间建立关系

    1. 实现nginx + php 建立关系 第一个历程: 编写nginx文件 在blog.conf编写nginx配置文件 在index添加php文件server_name www.yzh123.stop;

       location  / {
        root /html/blog;
        index index.php index.html;
       }
       location ~ \.php$ {
                root /html/blog;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_pass 127.0.0.1:9000;
                include fastcgi_params;
       }
       
       }

       

重启nginx服务

第二个历程: 编写动态资源文件 [root@web01 conf.d]# cat /html/blog/test_php.php <?php phpinfo(); ?>

第三个历程: 进行访问测试 blog.oldboy.com/test_php.php

四、实现php + mysql 建立关系 (搭建一个博客网站)

编写php代码文件 ​ [root@web01 blog]# vim test_mysql.php ​ <?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 root !\n"; ​ }else{ ​ die("Connection failed: " . mysqli_connect_error()); ​ } ​ ?>

  1. 部署搭建网站页面(代码上线) 第一个历程: 获取代码信息(git)---使用开源的网站代码 www网站页面: http://www.dedecms.com/ --管理系统 bbs网站页面: http://www.discuz.net/forum.php --论坛 blog网站页面: https://cn.wordpress.org/ --博客 wecenter网站页面: http://www.wecenter.com/?copyright --知乎

    第二个历程:将压缩包拉到linux, 将代码解压,将解压后信息放入到站点目录中 tar xf wordpress-5.2.1.tar.gz mv wordpress/* blog

 

第三个历程: 修改站点目录权限

chown -R www.www blog

 

第四个历程: 进行网站页面初始化操作 第五个历程: 对数据库服务进行配置 登录数据库:mysql -u root -p123456

创建数据库: create database wordpress;

 

检查: show databases; 创建数据库管理用户: grant all on wordpress.* to 'wordpress'@'localhost' identified by '123456'; 检查: select user,host from mysql.user

第六个历程: 利用blog网站发布博文

补充:

出现错误01:若后台页面错乱在blog.conf server中添加fastcgi_buffers 256 4k;

参考链接:http://blog.sina.com.cn/s/blog_6ab0cbbe0102w6tb.html

出现错误02:上传图片,主题500报错

参考链接:https://blog.csdn.net/peng2hui1314/article/details/105572626

五、疑问:

上传wordpress主题,报413错误,如何解决?

总结: 第一个历程: 修改nginx配置文件 vim blog.conf server { client_max_body_size 50m; --- 指定用户上传数据的大小限制(默认1M) }

第二个历程: 修改php.ini配置文件 vim /etc/php.ini

upload_max_filesize = 50M --- 使PHP接收用户上传的更大的数据(默认2M)

如何让LNMP架构和存储服务器建立关系

第一个历程: 找出图片存储的目录 01方法: 根据图片链接地址获取图片存储位置 http://blog.oldboy.com /wp-content/uploads/2019/05/meinv-1024x1024.jpg url uri 02方法: 先定位数据存放在站点目录中 find /html/blog -type f -mmin -5 inotifywait -mrq /html/blog

第二个历程: 使web服务器和存储服务器建立关系 检查存储服务是否正常 mount -t nfs 172.16.1.31:/data /mnt

编写存储服务配置文件 vim /etc/exports 添加信息

[root@nfs01 ~]# showmount -e 172.16.1.31 --检查 Export list for 172.16.1.31: /data/bbs 172.16.1.0/24 /data/www 172.16.1.0/24 /data/blog 172.16.1.0/24

mkdir /data/{bbs,blog,www}

移出web存储目录文件 mv /html/blog/wp-content/uploads/2021 /tmp

挂载web共享目录 mount -t nfs 172.16.1.31:/data/blog /html/blog/wp-content/uploads/2021

将web服务器blog存储的数据进行迁移 mv /tmp/2021/ /html/blog/wp-content/uploads/

默认存储服务器无法存储数据: 管理用户无法存储: root_squash --- nfsnobody 普通用户无法存储: no_all_squash 解决: 第一个历程: 修改nfs配置文件,定义映射用户为www useradd www -u 2010 chown -R www /data

第二个历程: 使root用户可以上传数据 sed -ri.bak 's#(sync)#\1,anonuid=2010,anongid=2010#g' /etc/exports

如何让LNMP架构和数据库服务器建立关系

第一个历程: 将web服务器本地数据库数据进行备份 web01 mysqldump -uroot -poldboy123 --all-database >/tmp/web_bak.sql

第二个历程: 将备份数据进行迁移 web01 scp -rp /tmp/web_back.sql 172.16.1.51:/tmp

第三个历程: 恢复数据信息 db01 yum install -y mariadb-server mariadb --安装数据库软件

mysqladmin -u root password '123456' --设置数据库密码

mysql -uroot -p123456 </tmp/web_bak.sql --恢复数据库数据

第四个历程: 修改数据库服务器中数据库用户信息 db01 MariaDB [(none)]> select user,host from mysql.user; +-----------+-----------+ | user | host | +-----------+-----------+ | root | 127.0.0.1 | | root | ::1 | | | localhost | | root | localhost | | wordpress | localhost | | | web01 | | root | web01 | +-----------+-----------+ 7 rows in set (0.00 sec)

优化: 删除无用的用户信息 delete from mysql.user where user="" and host="localhost"; delete from mysql.user where user="" and host="web01";

添加: 添加新的用户信息 grant all on wordpress.* to 'wordpress'@'172.16.1.%' identified by 'oldboy123'; flush privileges;

第五个历程: 修改web服务器代码文件信息(web01) vim wp-config.php /** MySQL hostname */ define( 'DB_HOST', '172.16.1.51' );

 

第六个历程: 停止web服务器上数据库服务 systemctl stop mariadb.service systemctl disable mariadb.service --关闭web01数据服务

问题01: 数据库服务没有正确启动: Error establishing a database connection 连接不上3306端口 问题02: PHP服务没有开启,报502错误

  1. web01代码信息迁移到web02服务器,并且修改了网站域名无法正确访问 访问新域名会自动跳转到老的域名 方法一: 修改wordpres后台设置信息,将后台中老的域名改为新的域名 方法二: 修改数据库中的一个表, 在表中修改一个和域名有关的条目信息 (update phpmyadmin)

六、(反向代理)负载均衡的概念说明

什么是集群? 完成相同任务或工作的一组服务器 (web01 web02 web03 -- web集群)

什么是负载均衡?

  1. 实现用户访问请求进行调度分配

  2. 实现用户访问压力分担

什么是反向代理? 反向代理: 外网 ---> (eth0外网) 代理服务器 (eth1内网) ---> 公司网站服务器web(内网) 外网用户(客户端) --- 代理服务器 (服务端) 代理服务器(客户端) --- web服务器(服务端) 正向代理: 内网(局域网主机) --- (内网)代理服务器(外网) --- 互联网 --- web服务器(日本) FQ的操作

七、准备负载均衡的环境

集群服务器部署: PS: 集群中每天服务器的配置一模一样 企业中:

  1. 先部署好一台LNMP服务器,上传代码信息

  2. 进行访问测试

  3. 批量部署多台web服务器

  4. 将nginx配置文件进行分发

  5. 将站点目录分发给所有主机 教学中:

  6. 将web01作为模板主机克隆 sed -i 's#.7#.8#g' /etc/sysconfig/network-scripts/ifcfg-eth[01] hostnamectl set-hostname web02 systemctl restart network 利用手动方式实现负载均衡: mount -t nfs 172.16.1.31:/data/blog /html/blog/wp-content/uploads/

修改hosts主机地址和域名映射文件

负载均衡服务器部署: 第一个历程: 安装部署nginx软件 ....

第二个历程: 编写nginx负载服务配置文件 ngx_http_upstream_module --- upstream 负载均衡 OK ngx_http_proxy_module --- proxy_pass 反向代理

cp nginx.conf{,.bak}

grep -Ev '^$|#' nginx.conf.bak >nginx.conf --美化配置文件

useradd www -u 2010 --创建www用户

vim /etc/nginx/nginx.conf --更改user

vim /etc/nginx/conf.d/lb.conf

 upstream oldboy {
    server 10.0.0.7:80;
    server 10.0.0.8:80; --定义可以将请求分配给哪些web服务器
    server 10.0.0.9:80;
 }
 server {
    listen       80;
    server_name www.oldboy.com;
    location / {
        proxy_pass http://oldboy;     --将请求分配给指定的集群
    }
 }

useradd www -u 2010 --创建www用户

第三个历程: 实现负载功能测试 搭建集群测试环境: for name in www bbs blog;do echo "$name 10.0.0.7">/html/$name/wenwen.html;done for name in www bbs blog;do echo "$name 10.0.0.8">/html/$name/wenwen.html;done for name in www bbs blog;do echo "$name 10.0.0.9">/html/$name/wenwen.html;done 修改windows解析文件 10.0.0.5 www.oldboy.com blog.oldboy.com bbs.oldboy.com

负载均衡访问网站异常排错思路: 第一步: 负载均衡 测试后端web节点服务器是否能够正常访问 [root@lb01 conf.d]# curl -H host:www.oldboy.com 10.0.0.7/wenwen.html www 10.0.0.7 [root@lb01 conf.d]# curl -H host:www.oldboy.com 10.0.0.8/wenwen.html www 10.0.0.8 [root@lb01 conf.d]# curl -H host:www.oldboy.com 10.0.0.9/wenwen.html www 10.0.0.9

第二步: 负载均衡 利用curl命令访问负载均衡服务器 查看两个配置文件

第三步: 打开一个xshell连接 ping www.oldboy.com 第四步: 配置文件编写不正确

 

八、负载均衡配置模块详细说明

ngx_http_upstream_module --- upstream 实现不同调度功能

  1. 轮询分配请求(平均)

  2. 权重分配请求(能力越强责任越重) 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; }

  3. 实现热备功能(备胎功能) upstream oldboy { server 10.0.0.7:80; server 10.0.0.8:80; server 10.0.0.9:80 backup; }

  4. 定义最大失败次数 健康检查参数 max_fails=5

  5. 定义失败之后重发的间隔时间 健康检查参数 fail_timeout=10s 会给失败的服务器一次机会

实现不同调度算法

  1. rr 轮询调度算法

  2. wrr 权重调度算法

  3. ip_hash 算法 (出现反复登录的时候)

  4. least_conn 根据服务器连接数分配资源

ngx_http_proxy_module --- proxy_pass

  1. 访问不同的网站地址,不能显示不同的网站页面 (面试题) proxy_set_header Host $host;

  2. 访问网站用户地址信息无法进行分析统计 (面试题) proxy_set_header X-Forwarded-For $remote_addr;

  3. 访问负载均衡会出现错误页面,影响用户体验(其中一个web服务器数据缺失) proxy_next_upstream error timeout http_404 http_502 http_403;

 

posted @ 2022-01-08 16:53  Yusir-SRE  阅读(279)  评论(0编辑  收藏  举报