LNMP架构搭建
Posted 徐中祥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LNMP架构搭建相关的知识,希望对你有一定的参考价值。
LNMP架构
一、LNMP架构介绍
1、简介
LNMP是一套技术的组合,L=Linux、N=nginx、M~=mysql、P~=php
不仅仅只有这些服务,还有很多
redis\\elasticsearch\\kibana\\logstash\\zabbix\\git\\jenkins\\kafka\\hbase\\hadoop\\spark\\flink
2、LNMP架构工作方式
首先Nginx服务是不能处理动态请求,那么当用户发起动态请求时。
Nginx又是如何进行处理的:
1.静态请求:请求的内容是静态文件就是静态请求
# 静态文件:文件上传到服务器,永远不会改变的文件就是静态文件
# html就是一个标准的静态文件
2.动态请求:请求的内容是动态的就是动态请求
# 不是真实存在服务器上的内容,是通过数据库或者其他服务拼凑成的数据
当用户发起http请求,请求会被Nginx处理,如果是静态资源请求Nginx则直接返回,如果是动态请求Nginx则通过fastcgi协议转交给后端的PHP程序处理,具体如下图所示
3、LNMP架构访问流程
1.浏览器输入域名,浏览器会拿着域名去DNS服务器解析
2.DNS服务器会将域名解析成IP
3.浏览器会去与IP对应服务器建立TCP\\IP连接
4.连接建立完成,会向服务器发起请求,请求nginx
5.nginx会判断请求是动态的还是静态的
#静态请求
location \\.jpg$ {
root /code;
}
#动态请求
location \\.php$ {
fastcgi_pass 127.0.0.1:9000;
... ...
}
6.如果是静态请求,nginx去code目录获取,直接返回
7.如果是动态请求,nginx会通过fastcgi协议连接PHP服务的php-fpm管理进程
8.php-fpm管理进程会下发工作给 wrapper工作进程
9.wrapper工作进程判断是不是简单的php内容
10.如果只是php内容则使用php解析器解析后直接返回
11.如果还需要读取数据库,wrapper工作进程会去数据库读取数据,再返回数据
12.数据流转过程:
# 请求:浏览器 > 负载均衡 > nginx > php-fpm > wrapper > mysql
# 响应:mysql > wrapper > php-fpm > nginx > 负载均衡 > 浏览器
二、LNMP架构搭建wordpress
主机 | IP | 服务 |
---|---|---|
web01 | 10.0.0.7,172.16.1.7 | Nginx+php |
db01 | 10.0.0.51,172.16.1.51 | MySQL |
1、安装Nginx
# 配置官方源
[root@web01 ~]# vim /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
# 安装nginx
[root@web01 ~]# yum install -y nginx
# 配置nginx
[root@web01 ~]# vim /etc/nginx/nginx.conf
user www;
# 创建用户
[root@web01 ~]# groupadd www -g 666 && useradd www -u 666 -g 666 -s /sbin/nologin -M
[root@web01 ~]# id www
uid=666(www) gid=666(www) 组=666(www)
# 启动nginx
[root@web01 ~]# systemctl start nginx && systemctl enable nginx
# 验证启动
[root@web01 ~]# ps -ef | grep nginx
root 9953 1 0 11:17 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
www 9954 9953 0 11:17 ? 00:00:00 nginx: worker process
2、安装PHP
# 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
[root@nginx ~]# yum remove php-mysql-5.4 php php-fpm php-common
#配置第三方源
[root@nginx ~]# vim /etc/yum.repos.d/php.repo
[php-webtatic]
name = PHP Repository
baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64/
gpgcheck = 0
[root@nginx ~]# 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
[root@web01 ~]# vim /etc/php-fpm.d/www.conf
user = www
group = www
# 启动服务
[root@web01 ~]# systemctl start php-fpm && systemctl enable php-fpm
# 验证启动
[root@web01 ~]# ps -ef | grep php-fpm
3、db01安装MySQL
# 清理历史环境
rpm -qa | grep mariadb
yum remove mariadb-libs -y
# 创建mysql用户
useradd mysql -s /sbin/nologin -M
# 创建相关目录
mkdir -p /service/ /data/3306
# 安装依赖
yum install -y ncurses-devel libaio-devel gcc gcc-c++ glibc cmake autoconf
# 上传二进制包并解压
[root@db01 ~]# cd /service
[root@db02 service]# rz
[root@db02 service]# ll
-rw-r--r-- 1 root root 724672294 2月 23 20:37 mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
[root@db01 service]# tar xf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
[root@db01 service]# ll
drwxr-xr-x 9 root root 129 2月 23 20:45 mysql-5.7.28-linux-glibc2.12-x86_64
# 做软连接
[root@db01 ~]# ln -s mysql-5.7.28-linux-glibc2.12-x86_64/ mysql
# 授权
[root@db01 ~]# cd /service/mysql && chown -R mysql. *
# 设置环境变量
vim /etc/profile.d/mysql.sh
export PATH=/service/mysql/bin:$PATH
# 生效配置
source /etc/profile
# 初始化数据库
mysqld --initialize-insecure --user=mysql --basedir=/service/mysql --datadir=/data/3306/data
再次运行初始化命令报错
原因: -datadir=/data/3306 存放数据的目录以有数据
解决: rm -rf /data/3306*
再次运行即可。
# 授权
chown -R mysql.mysql /data
# 扩展
5.7 初始化方式
(1)mysqld --initialize
这个命令初始化后,会有12位临时密码,但是必须在使用mysql之前重置这个密码。
(2)mysqld --initialize-insecure
5.6版本初始化方式
/service/mysql/scripts/mysql_install_db --user=mysql --basedir=/service/mysql --datadir=/data/3306
# mysql配置文件设置
cat > /etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/service/mysql
datadir=/data/3306/data
log-error=/data/3306/data/mysql.err
log-bin=/data/3306/data/mysql-bin
server_id=6
port=3306
socket=/data/3306/mysql.sock
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
socket=/data/3306/mysql.sock
prompt=db01 [\\\\d]>
EOF
# 启动mysql
cd /service/mysql/support-files/
cp mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
systemctl start mysqld && systemctl enable mysqld
# 设置MySQL密码
[root@db01 support-files]# mysqladmin -uroot -S /data/3306/mysql.sock password '3306'
4、搭建wordpress (web01)
# 创建代码发布目录
[root@web01 ~]# mkdir /code && cd /code
# 上传代码
[root@web01 code]# rz
[root@web01 code]# ll
-rw-r--r-- 1 root root 11098483 11月 30 12:19 wordpress-5.0.3-zh_CN.tar.gz
# 解压代码
[root@web01 code]# tar xf wordpress-5.0.3-zh_CN.tar.gz
# 授权
[root@web01 code]# chown -R www.www wordpress
关联语法:
#fastcgi_pass,nginx连接php的代理协议
Syntax: fastcgi_pass address; # fastcgi_pass协议 + address代理地址
Default: —
Context: location, if in location
#指定请求的文件
Syntax: fastcgi_param parameter value [if_not_empty];
Default: —
Context: http, server, location
#指定默认的php页面
Syntax: fastcgi_index name;
Default: —
Context: http, server, location
配置Nginx
[root@web01 ~]# vim /etc/nginx/conf.d/linux.wp.com.conf
server {
listen 80;
server_name linux.wp.com;
location / {
root /code/wordpress;
index index.php;
}
location ~* \\.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /code/wordpress/$fastcgi_script_name;
include fastcgi_params;
}
}
重启Nginx配置本地hosts文件访问
[root@web01 ~]# systemctl reload nginx
10.0.0.7 www.wp.com
http://www.wp.com/wp-admin/setup-config.php
[root@db01 ~]# mysql -uroot -p3306
db01 [(none)]>create database wordpress charset utf8mb4;
db01 [(none)]>grant all on wordpress.* to wp@'172.16.1.%' identified by '123';
db01 [(none)]>select user,host from mysql.user;
[root@web01 ~]# cd /code/wordpress && cp wp-config-sample.php wp-config.php
[root@web01 wordpress]# vim wp-config.php
// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
/** WordPress数据库的名称 */
define('DB_NAME', 'wordpress');
/** MySQL数据库用户名 */
define('DB_USER', 'wp');
/** MySQL数据库密码 */
define('DB_PASSWORD', '123');
/** MySQL主机 */
define('DB_HOST', '172.16.1.51');
/** 创建数据表时默认的文字编码 */
define('DB_CHARSET', 'utf8mb4');
# 编写php测试连接数据库的代码
[root@web01 wordpress]# vim /code/wordpress/test.php
<?php
$servername = "10.0.0.51";
$username = "wp";
$password = "123";
// 创建连接
$conn = mysqli_connect($servername, $username, $password);
// 检测连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "php连接MySQ成功...";
?>
<img style='width:100%;height:100%;' src=https://blog.driverzeng.com/zenglaoshi/php_mysql.png>
访问测试
http://www.wp.com/test.php
搭建成功
三、扩展web集群
主机 | IP | 部署服务 |
---|---|---|
web01 | 10.0.0.7,172.16.1.7 | nginx+php |
web02 | 10.0.0.8,172.16.1.8 | nginx+php |
db01 | 172.16.1.51 | MySQL |
# 配置官方源
[root@web01 ~]# scp /etc/yum.repos.d/nginx.repo 172.16.1.8:/etc/yum.repos.d/
# 安装nginx
[root@web02 ~]# yum install -y nginx
# 创建用户
[root@web02 ~]# groupadd www -g 666 && useradd www -u 666 -g 666
[root@web02 ~]# 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 && yum remove php-mysql-5.4 php php-fpm php-common
# 配置第三方源
[root@web01 ~]# scp /etc/yum.repos.d/php.repo 172.16.1.8:/etc/yum.repos.d/
[root@nginx ~]# 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
#同步nginx配置文件
[root@web01 ~]# scp /etc/nginx/nginx.conf 172.16.1.8:/etc/nginx/
[root@web01 ~]# scp /etc/nginx/conf.d/linux.wp.com.conf 172.16.1.8:/etc/nginx/conf.d/
#同步php的配置
[root@web01 ~]# scp /etc/php-fpm.d/www.conf 172.16.1.8:/etc/php-fpm.d/
[root@web01 ~]# scp /etc/php.ini 172.16.1.8:/etc/
[root@web01 ~]# scp -r /code 172.16.1.8:/
[root@web03 ~]# systemctl start nginx && systemctl enable nginx && systemctl start php-fpm && systemctl enable php-fpm
[root@web02 ~]# chown -R www.www /code/
#10.0.0.7 linux.wp.com
10.0.0.8 linux.wp.com
四、搭建文件共享
主机 | IP | 部署服务 |
---|---|---|
web01 | 10.0.0.7 | nginx+php |
web02 | 10.0.0.8 | nginx+php |
db01 | 172.16.1.51 | MySQL |
nfs | 172.16.1.31 | nfs |
1、搭建NFS服务器
# 安装nfs
[root@nfs ~]# yum install -y nfs-utils
# 创建挂载目录
[root@nfs ~]# mkdir /wp_data
# 配置NFS
[root@nfs ~]# vim /etc/exports
/wp_data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
# 创建用户
[root@nfs ~]# groupadd www -g 666 && useradd www -u 666 -g 666
# 授权
[root@nfs ~]# chown -R www.www /wp_data
# 启动NFS并检查
[root@nfs ~]# systemctl start nfs && cat /var/lib/nfs/etab
/wp_data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=666,anongid=666,sec=sys,rw,secure,root_squash,all_squash)
2、配置客户端
# 安装nfs和rpcbind--》并启动rpcbind
[root@nfs ~]# yum install -y nfs-utils rpcbind && systemctl start rpcbind
# 查看挂载点
[root@nfs ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/wp_data 172.16.1.0/24
# 确定挂载目录
[root@web01 ~]# ll /code/wordpress/wp-content/uploads/
# 先推送挂载目录下的文件
web01
[root@web01 ~]# rsync -avz /code/wordpress/wp-content/uploads/ 172.16.1.31:/wp_data
web02
[root@web02 ~]# rsync -avz /code/wordpress/wp-content/uploads/ 172.16.1.31:/wp_data
# 验证文件
[root@nfs ~]# ll /wp_data/2021/04/
-rw-r--rw- 1 www www 77351 4月 16 21:29 2_test-1024x576.jpg
-rw-r--rw- 1 www www 6326 4月 16 21:29 2_test-150x150.jpg
-rw-r--rw- 1 www www 160062 4月 16 21:29 2_test-1568x882.jpg
-rw-r--rw- 1 www www 11248 4月 16 21:29 2_test-300x169.jpg
-rw-r--rw- 1 www www 48495 4月 16 21:29 2_test-768x432.jpg
-rw-r--rw- 1 www www 289186 4月 16 21:29 2_test.jpg
-rw-r--r-- 1 www www 5798 4月 16 21:24 xu-150x150.jpg
-rw-r--r-- 1 www www 12426 4月 16 21:24 xu-300x269.jpg
-rw-r--r-- 1 www www 19334 4月 16 21:24 xu.jpg
# 挂载
web01 挂载
[root@web01 ~]# mount -t nfs 172.16.1.31:/wp_data /code/wordpress/wp-content/uploads
[root@web01 ~]# df -TH
文件系统 类型 容量 已用 可用 已用% 挂载点
172.16.1.31:/wp_data nfs4 15G 2.3G 13G 16% /code/wordpress/wp-content/uploads
web02 挂载
[root@web02 ~]# mount -t nfs 172.16.1.31:/wp_data /code/wordpress/wp-content/uploads
[root@web02 ~]# df -TH
文件系统 类型 容量 已用 可用 已用% 挂载点
172.16.1.31:/wp_data nfs4 15G 2.3G 13G 16% /code/wordpress/wp-content/uploads
以上是关于LNMP架构搭建的主要内容,如果未能解决你的问题,请参考以下文章