8.lnmp架构

1.什么是lnmp

是一套网站架构,L=Linux、N=Nginx、P = PHP、M= MySQL、Mariadb


2.lnmp简单工作流程

客户端发起http请求,访问http://www.test.com/index.php页面,对于nginx而言,它是无法处理这样的动态脚本的,nginx在接收http请求后,通过location规则进行匹配,再将请求通过fastcgi协议传递给后端的PHP服务处理
,然后PHP解析对应目录下的PHP文件,将解析的结果通过fastcgi协议回传给nginx,nginx构造响应报文再回传给客户端,客户端接收到后进行加载渲染

在这里插入图片描述

在这里插入图片描述


3.部署lnmp架构

部署nginx

1.配置nginx官方源
设置 yum 仓库,创建文件 /etc/yum.repos.d/nginx.repo ,写入以下内容

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

2.安装nginx
yum install nginx -y


部署PHP

1.安装php-fpm
( 7.1版本 7.1版本官方没有提供rpm的软件包、第三方有提供 (下载速度可能会很慢,有无法下载成功的情况))

如果有之前有安装旧版本的话,先移除掉
yum remove php-mysql-5.4 php php-fpm php-common


配置源
vim /etc/yum.repos.d/php.repo
[webtatic-php]
name = php Repository
baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64/
gpgcheck = 0

安装
yum -y install 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

查看PHP版本
php -v

如果自己本地有源码包的话,可以本地安装

先解压包
unzip php.zip
 
yum localinstall php/*.rpm 
通过本地方法安装所有的rpm包,如果有依赖的话会自动通过base、epel源下载

systemctl start php-fpm 
启动php-fpm 

systemctl enable php-fpm 
加入开机自启动 

部署数据库

可以选择安装mariadb
yum install mariadb mariadb-server -y

systemctl start mariadb
systemctl enable mariadb


这里我装的是mysql
从官网下的包,传到服务器
https://downloads.mysql.com/archives/community/
在这里插入图片描述

先创建一个文件夹
mkdir mysql-5.7.38

解压包到指定的文件夹mysql-5.7.38
tar xfv mysql-5.7.38-1.el7.x86_64.rpm-bundle.tar -C /opt/mysql-5.7.38
mysql-community-client-5.7.38-1.el7.x86_64.rpm
mysql-community-common-5.7.38-1.el7.x86_64.rpm
mysql-community-devel-5.7.38-1.el7.x86_64.rpm
mysql-community-embedded-5.7.38-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.38-1.el7.x86_64.rpm
mysql-community-embedded-devel-5.7.38-1.el7.x86_64.rpm
mysql-community-libs-5.7.38-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.38-1.el7.x86_64.rpm
mysql-community-server-5.7.38-1.el7.x86_64.rpm
mysql-community-test-5.7.38-1.el7.x86_64.rpm


cd mysql-5.7.38
自动解析本目录下各安装包的依赖关系,并自动按顺序安装:
sudo yum localinstall *.rpm

启动mysql
systemctl start mysqld

加入开机启动
systemctl enable mysqld

查看初始密码
cat /var/log/mysql.log
在这里插入图片描述
登陆
mysql -uroot -p密码

修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '密码';
在这里插入图片描述


4.配置lnmp

nginx+php配置集成

1.用户请求 www.test.com/test.php

2.通过fastcgi协议传递给php服务端 ( nginx并没有告诉php需要php帮其解析哪个目录下的那个文件)

3.nginx可以通过fastcgi_param参数传递需要解析哪个目录下的哪个文件

4.fastcgiparam SCRIPTFILENAME $document_root$fastcgi_script_name;

SCRIPT_FILENAME: PHP需要读取的变量,通过获取变量对应的值知道需要解析哪个目录下的哪个文件,
$document_root: 他等价于 = root指令。如果说root指令等于 /code , document_root就是/code
$fastcgi_script_name 用户请求的uri是,/test.php
两个变量拼接在一起的结果就是 /code/test.php , 将这个路径赋值给 SCRIPT_FILENAME变量。

5.php接收到请求后需要读取SCRIPT_FILENAME变量,读取后的结果为 /code/test.php

6.php就会查找系统中/code/test.php文件进行解析处理,然后将解析的结果回传给nginx

7.nginx构建响应报文,通过http协议回传给浏览器。

1.编写nginx配置文件

vim /etc/nginx/conf.d/php.conf

server{
		listen 80;
		sever_name www.test.com;
		root /html;

location / {
		index index.php index.html;
	}

location ~ \.php$ {  #通过location进行匹配,访问的URI为.php结尾的都走这个location
		fastcgi_pass 127.0.0.1:9000;     #将php结尾的请求文件都传递给本地php服务端处理
    	fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  #为SCRIPT_FILENAME变量设定值(具体要解析的文件路径)
    	include fastcgi_params;

	}

}

2.初始化本地目录文件
cat /html/info.php

 <?php phpinfo(); ?>

3.语法检测,重载nginx

nginx -t
systemctl reload nginx

4.访问www.test.com/info.php
在这里插入图片描述

php+mysql配置集成
php写一份代码,去连接mysql即可
vim /html/mysql.php

<?php
$servername = "localhost";
$username = "root"; #数据库用户名
$password = "Test.123"; #密码

// 创建连接
 $conn = mysqli_connect($servername, $username, $password);
// 检测连接
if (!$conn) {
       die("Connection failed: " . mysqli_connect_error()); # 这里.的作用是将前后两段代码拼接
 }
       echo "php连接MySQL数据库成功";
?>

2.语法检测,重载nginx

nginx -t
systemctl reload nginx

3.访问测试
访问www.test.com/mysql.php
在这里插入图片描述

故意将mysql.php中的密码修改错误,查看失败的效果
在这里插入图片描述


5.拆分数据库,独立部署

例:
192.168.10.10nginx+php
192.168.10.20 mariadb

1.在192.168.10.10上将数据库备份下来(带-A参数表示导出全部数据库)
 mysqldump -uroot -pTest.123 -A > /opt/alldatabases.sql 
 
然后推送到192.168.10.20
 scp /opt/alldatabases.sql root@192.168.10.20:/opt


2.在192.168.10.20上安装数据库,然后倒入 192.168.10.10推送过来的数据库备份文件
yum install mariadb mariadb-server -y 
systemctl start mariadb 
systemctl enable mariadb 
mysql < /root/all_databases.sql #导入数据

systemctl restart mariadb #重启
mysql -uroot -pTest.123 #使用之前的密码就可以登陆192.168.10.20的数据库 
show databases;查看数据库

3.配置一个数据库的远程用户,允许别人连接192.168.10.20的数据库。
授权
grant all privileges on *.* to 'new'@'%' identified by 'Test.12345';
刷新
flush privileges;

4.关闭192.168.10.10上面的数据库。
systemctl stop mariadb
systemctl disable mariadb 


5.将192.168.10.10 上的程序,原先连接的是本地数据库,修改为连接远程192.168.10.20的数据库即可。
程序割接:
vim /code/wordpress/wp-config.php 

define( 'DB_NAME', 'wordpress' ); #WordPress数据库的名称 
define( 'DB_USER', 'new' ); # MySQL数据库用户名 ,使用远程的用户名称
define( 'DB_PASSWORD', 'Test.12345' ); # MySQL数据库密码 ,使用远程的用户密码
define( 'DB_HOST', '192.168.10.20' ); #MySQL主机,填写远程数据库的IP地址

/** 创建数据表时默认的文字编码 */ define( 'DB_CHARSET', 'utf8mb4' );



6.扩展多台节点

提供相同业务环境的服务,称为集群
现状:只有一台web服务器 192.168.10.10
目标:扩展成多台web服务器,让配置一摸一样192.18.10.10、192.168.10.11

1.部署nginx

1.1、配置nginx官方源
设置 yum 仓库,创建文件 /etc/yum.repos.d/nginx.repo ,写入以下内容

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

1.2、安装nginx
yum install nginx -y


2.部署PHP

配置源
vim /etc/yum.repos.d/php.repo
[webtatic-php]
name = php Repository
baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64/
gpgcheck = 0

安装
yum -y install 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

查看PHP版本
php -v

systemctl start php-fpm 
启动php-fpm 

systemctl enable php-fpm 
加入开机自启动 

3.拷贝192.18.10.10服务器上的所有程序代码给192.168.10.11 (php文件也都包括在该路径下)
scp -rp /code/ root@192.168.10.11:/code

4.拷贝192.18.10.10服务器上的nginx配置文件给192.168.10.11
scp /etc/nginx/conf.d/nginx.conf root@192.168.10.11:/etc/nginx/conf.d/

5.语法检测,重载nginx

nginx -t
systemctl reload nginx

然后就可以访问新的web站点了
但是web1上传的图片等在web2上是看不到的,俩个节点的静态资源不是共享的


7.节点之间静态资源共享

思路:
1.先找到web应用存放静态资源的路径
2.部署一台NFS服务器,提供一个共享的目录
3.各个节点下,web应用存放静态资源的路径,将NFS都挂载上

找一个静态资源查看其路径
http://www.test.com/wp-content/uploads/2020/06/11.jpg
其实完整的路径是:/code/wordpress/wp-content/uploads/2020/06/11.jpg
  
所以存放静态资源的路径是: /code/wordpress/wp-content/uploads/
  
  
  1. 准备一台nfs 地址为192.168.10.30
   yum install nfs-utils -y
  
  2.配置nfs共享
  vim /etc/exports
  /data/wp 192.168.10.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
 
  创建用户
   groupadd -g 666 www
   useradd -u666 -g666 www
  
  创建目录、授权、重启nfs
  mkdir /data/wp
  chown -R www.www /data/
  systemctl restart nfs
  
 3.在每台web节点上进行挂载,将/code/wordpress/wp-content/uploads/ 作为nfs存储的入口
  mount -t nfs 192.168.10.30:/data/wp /code/wordpress/wp-content/uploads/
  
  df -h
  文件系统                   容量  已用  可用 已用% 挂载点
  192.168.10.30:/data/wp    17G  4.4G   13G   26% /code/wordpress/wp-content/uploads
  
 最后记得加入开机自动挂载
 vim /etc/fstab
  
192.168.10.30:/data/wp	/code/wordpress/wp-content/uploads		nfs	defaults	0 0

然后就实现静态资源共享了

8.多节点如何访问
  • 1.DNS轮询

    • 1.要求所有的web节点都具备公网IP地址
    • 2.问题:
      • 1.公网独立IP要花钱,
      • 2.带宽买多大是不是问题?
      • 3.所有的web服务器拥有公网IP对外,不安全
      • 4.DNS轮询他没有健康检查机制。web节点出现问题时,不会把问题节点踢出集群,
        发现不了节点故障了,用户的请求还继续发往问题节点,导致用户访问失败,大大降低用户体验
  • 2.负载均衡 ( 硬件设备、软件 )

    • 1.所有的web节点不需要有公网IP地址。
      • 成本降低、
      • 安全可靠
    • 2.负载均衡能够对后端的web节点进行健康检查机制
    • 3.负载均衡拥有多种调度算法来满足企业的不同需求(根据节点不同的处理能力,分配不同的工作量给他们)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值