LNMP平台拆分 #yyds干货盘点#

Posted 江晓龙的技术博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LNMP平台拆分 #yyds干货盘点#相关的知识,希望对你有一定的参考价值。

LNMP平台拆分

1.LNMP工作原理

1.用户通过浏览器输入url
    http://jxl.wecenter.com
2.先查看app缓存,也就是浏览器cookie缓存
3.如果app没有缓存再查看DNS解析
    1)本地DNS缓存
    2)主机hosts解析
    3)本地DNS服务器,通过递归查询将解析请求发送给内网、网关、ISP
    4)本地DNS服务器再通过迭代查询将解析请求发送至公网DNS服务器
4.通过解析到的web服务器的IP地址跟web服务器建立tcp连接
    1)通过私网交换机、路由器、防火墙等网络设备传递或验证
    2)和调度器建立三次握手
5.调度器会和web集群建立三次握手,将HTTP请求发送至web服务器
发送过程中有三个动作
    1)general
        URL http://jxl.wecenter.com
        动作  get
        状态码 200
        解析的IP   10.0.0.7
    2)Req header
        属性  文件类型、加密、编码、压缩等
        长连接 keepalive
        Host    jxl.rewrite.com
        User-Agent  用户使用的浏览器
    3)Rep header
        长连接
        属性
            文件类型、编码
        server
            服务器使用的软件
6.web服务器收到http请求
    1)静态页面
        .html
            nginx自己处理
                图片、视频、附件类文件:NFS
                网页内容、用户信息:mysql
    2)动态页面
        .php
            Nnginx无法处理,交给php-fpm(127.0.0.1:9000)插件来实现
7.Nginx通过fastcgi协议,将请求发送至php-fpm
8.php-fpm调用wrapper线程,将php代码交于php解析器
9.php解析器解析php代码
    1)如果是代码直接返回至nginx
    2)如果涉及到查询数据库,就会与mysql建立tcp连接
10.返回

2.将原有LNMP平台进行拆分

2.1.拆分MySQL

1.在web上备份数据库
[root@jxl log]# mysqldump -uroot -p123 --all-databases --single-transaction > `date +%F%H`-mysql-all.sql
mysqldump -uroot -p123 使用root用户来做mysql备份
--all-databases 所有数据库
--single-transaction  数据一致性

2.拷贝备份数据库文件至新的数据库服务器上
[root@jxl log]# scp 2020-04-2915-mysql-all.sql  root@192.168.81.230:/root/

3.导入数据库
扩展:mysql自身提供安全初始化脚本
[root@localhost ~]# mysql_secure_installation
输出数据库的root密码,全程y,是否禁止root登录可以选择,如果要改密码中间需要输入两次新密码
[root@localhost ~]# mysql -uroot -p123 < 2020-04-2915-mysql-all.sql

4.登录数据库验证导入是否成功
[root@localhost ~]# mysql -uroot -p123
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| wecenter           |
| wordpress          |
| xyshop             |
+--------------------+
6 rows in set (0.00 sec)
mysql> use wecenter;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> desc aws_users_qq;
+---------------+---------------------+------+-----+---------+----------------+
| Field         | Type                | Null | Key | Default | Extra          |
+---------------+---------------------+------+-----+---------+----------------+
| id            | bigint(11) unsigned | NO   | PRI | NULL    | auto_increment |
| uid           | int(11)             | NO   | MUL | NULL    |                |
| nickname      | varchar(64)         | YES  |     | NULL    |                |
| openid        | varchar(128)        | YES  | MUL |         |                |
| gender        | varchar(8)          | YES  |     | NULL    |                |
| add_time      | int(10)             | YES  | MUL | NULL    |                |
| access_token  | varchar(64)         | YES  | MUL | NULL    |                |
| refresh_token | varchar(64)         | YES  |     | NULL    |                |
| expires_time  | int(10)             | YES  |     | NULL    |                |
| figureurl     | varchar(255)        | YES  |     | NULL    |                |
+---------------+---------------------+------+-----+---------+----------------+
10 rows in set (0.00 sec)

5.关闭原来服务器的mysql后,会发现页面访问失败

6.修改应用配置文件,指定新的数据库位置
利用grep找到配置文件路径
[root@jxl wecenter]# grep -R 192.168.81.220 | grep -v cache
system/config/database.php:  host => 192.168.81.220,
编辑此文件
[root@jxl wecenter]# vim system/config/database.php
<?php

$config[charset] = utf8mb4;
$config[prefix] = aws_;
$config[driver] = MySQLi;
$config[master] = array (
  charset => utf8mb4,
  host => 192.168.81.230,
  username => root,
  password => 123,
  dbname => wecenter,
);
$config[slave] = false;

7.刷新页面即可

拆分后页面正常显示

2.2.拆分PHP

查看这个博客
https://blog.csdn.net/weixin_43815140/article/details/105311944

也就是把php的监听地址修成0.0.0.0即可

2.3.增加NFS存储服务器

抓取图片代码

1.安装nfs
[root@localhost ~]# yum -y install nfs-util rpcbind

2.配置共享目录
[root@localhost ~]# vim /etc/exprots
/data/wordpress 172.16.1.0/24(rw,sync,no_root_squash)
/data/wecenter  172.16.1.0/24(rw,sync,no_root_squash)

3.启动nfs
[root@localhost ~]# systemctl restart nfs rpcbind

4.查看共享目录
[root@localhost ~]# showmount -e
Export list for localhost.localdomain:
/data/wecenter  172.16.1.0/24
/data/wordpress 172.16.1.0/24

5.挂载
[root@localhost ~]# mount 172.16.1.10:/data/wordpress web/wordpress/wp-content

3.部署多web

1.安装nginx
[root@localhost ~]# scp -rp /etc/nginx/* root@192.168.81.230:/etc/nginx/

2.安装php
[root@localhost ~]# scp -rp /etc/php-fpm.d/* root@192.168.81.230:/etc/php-fpm.d

3.将网站源码直接从web01上拷贝过来
[root@localhost ~]# tar cvfP web.tar.gz /web
[root@localhost ~]# scp web.tar.gz root@192.168.81.230:/root

4.常见用户和组
[root@localhost ~]# useradd www

5.挂载nfs
[root@localhost ~]# mount 172.16.1.10:/data/wordpress web/wordpress/wp-content

6.启动nginx、php-fpm
[root@localhost ~]# systemctl reload nginx php-fpm

4.LNMP拆分完整部署

4.1.环境规划

角色 ip 安装内容
web-LNP 192.168.81.240 nginx、php
mysql 192.168.81.220 mysql
nfs 192.168.81.210 nfs

4.2.思路分析

1.安装软件包

2.部署nginx、配置虚拟主机,下载网页源码

3.部署mysql,提供远程访问及网站数据库

4.部署NFS,提供共享目录

4.3.Web实施

1.安装nginx、php
[root@localhost ~]# mkdir soft
[root@localhost ~]# cd soft
[root@localhost soft]# rpm -ivh nginx-1.16.1-1.el7.ngx.x86_64.rpm 
[root@localhost php]# sh php_install.sh

2.创建用户
[root@localhost ~]# groupadd -g 666 www
[root@localhost ~]# useradd -u 666 -g 666 -s /sbin/nologin www

3.配置Nginx、PHP
[root@localhost ~]# sed -i /^user/c user www; /etc/nginx/nginx.conf
[root@localhost conf.d]# sed -ri /^user/c user = www /etc/php-fpm.d/www.conf 
[root@localhost conf.d]# sed -ri /^group/c group = www /etc/php-fpm.d/www.conf

4.启动nginx、php
[root@localhost conf.d]# systemctl restart nginx php-fpm
[root@localhost conf.d]# systemctl enable nginx php-fpm

5.创建知乎、wordpress站点配置文件
[root@localhost conf.d]# rename .conf .conf.bak *.conf
[root@localhost conf.d]# vim wordpress.conf
#wordpress
server 
    listen 80;
    server_name jxl.wordpress.com;
    root /web/wordpress;
    index index.php index.html;
    access_log /nginx_log/jxl_wordpress_access.log main;    

    location ~ \\.php$ 
        root /web/wordpress;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    

[root@localhost conf.d]# vim wecenter.conf
#wecenter
server 
    listen 80;
    server_name jxl.wecenter.com;
    root /web/wecenter;
    index index.php index.html;
    access_log /nginx_log/jxl_wecenter_access.log main;

    location ~ \\.php$ 
        root /web/wecenter;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    


6.获取wordpress、wecenter源码
[root@localhost src]# unzip -d wecenter WeCenter_3-3-4.zip 
[root@localhost src]# unzip wordpress-5.2.3-zh_CN.zip 
[root@localhost src]# mv wecenter/ wordpress /web/
[root@localhost /]# chown -R www:www /web/

7.重载服务器
[root@localhost conf.d]# systemctl restart nginx php-fpm

4.4.MySQL实施

1.安装mysql
[root@jxl soft]# rpm -ivh mysql-community-common-5.6.47-2.el7.x86_64.rpm 
[root@jxl soft]# rpm -ivh mysql-community-libs-5.6.47-2.el7.x86_64.rpm 
[root@jxl soft]# rpm -ivh mysql-community-client-5.6.47-2.el7.x86_64.rpm 
[root@jxl soft]# rpm -ivh mysql-community-server-5.6.47-2.el7.x86_64.rpm 

2.启动mysql

3.初始化mysql
[root@jxl ~]# mysql_secure_installation
mysql_root密码---y---设置新密码---y----n----y----y

4.创建wordpress、wecenter所用数据库并创建用户
[root@jxl ~]# mysql -uroot -p123
mysql> create database wordpress;
mysql> create database wecenter;
mysql> grant all on wordpress.* to wpadmin@% identified by 123;
mysql> grant all on wecenter.* to wcadmin@% identified by 123;

4.5.安装NFS

[root@localhost ~]# yum -y install nfs-utils
[root@localhost ~]# vim /etc/exports
/data/wordpress /data/wordpress 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/wecenter  172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
[root@localhost ~]# systemctl restart nfs rpcbind
[root@localhost ~]# showmount -e
Export list for localhost.localdomain:
/data/wecenter  172.16.1.0/24
/data/wordpress 172.16.1.0/24

注意NFS如果指定uid、gid,客户端上必须存在和他一样uid、gid的用户

4.6.web挂载NFS

wordpress
1.先将站点存放文件的目录备份便于挂载后还原
[root@localhost wordpress]# cp -r wp-content/ wp-content_bak

2.挂载
[root@localhost wordpress]# mount 172.16.1.10:/data/wordpress /web/wordpress/wp-content

3.还原
[root@localhost wordpress]# mv wp-content_bak/* wp-content/

4.永久挂载
[root@localhost wordpress]# vim /etc/fstab
172.16.1.10:/data/wordpress /web/wordpress/wp-content   nfs defaults 0 0

wecenter
1.知乎默认没有任何附件,直接挂载即可

2.挂载
 mount 172.16.1.10:/data/wecenter /web/wecenter/uploads/

3.永久挂载
[root@localhost wordpress]# vim /etc/fstab
172.16.1.10:/data/wecenter      /web/wecenter/uploads   nfs     defaults 0 0

4.7.页面安装

wordpress安装

页面访问http://jxl.wordpress.com
填写数据库地址为拆分后的MySQL地址

NFS上已经有文件

wecenter安装

页面访问http://jxl.wecenter.com
填写数据库地址为拆分后的MySQL地址

NFS查看

5.其他节点快速部署

1.将源码打包
[root@localhost web]# tar cfP wecenter.tar.gz wecenter/
[root@localhost web]# tar cfP wordpress.tar.gz wordpress/

2.将源码推送其他web节点
[root@localhost ~]# scp /web/*.tar.gz root@192.168.81.220:/web/
[root@localhost ~]# scp /web/*.tar.gz root@192.168.81.230:/web/

3.将站点配置文件推送至web节点
[root@localhost ~]# scp /etc/nginx/conf.d/*.conf root@192.168.81.220:/etc/nginx/conf.d/
[root@localhost ~]# scp /etc/nginx/conf.d/*.conf root@192.168.81.230:/etc/nginx/conf.d/

4.在web节点解包
[root@jxl ~]# tar xf wecenter.tar.gz 
[root@jxl ~]# tar xf wordpress.tar.gz 

5.挂载nfs
[root@jxl ~]# vim /etc/fstab
172.16.1.10:/data/wordpress     /web/wordpress/wp-content nfs defaults 0 0 
172.16.1.10:/data/wecenter      /web/wecenter/uploads nfs defaults 0 0 
[root@jxl ~]# mount -a

6.创建用户赋权限
[root@jxl ~]# groupadd -g 666 www
[root@jxl ~]# useradd -u 666 -g 666 -s /sbin/nologin www

7.重载nginx
[root@jxl ~]# systemctl reload nginx

r.tar.gz
[root@jxl ~]# tar xf wordpress.tar.gz

5.挂载nfs
[root@jxl ~]# vim /etc/fstab
172.16.1.10:/data/wordpress /web/wordpress/wp-content nfs defaults 0 0
172.16.1.10:/data/wecenter /web/wecenter/uploads nfs defaults 0 0
[root@jxl ~]# mount -a

6.创建用户赋权限
[root@jxl ~]# groupadd -g 666 www
[root@jxl ~]# useradd -u 666 -g 666 -s /sbin/nologin www

7.重载nginx
[root@jxl ~]# systemctl reload nginx

以上是关于LNMP平台拆分 #yyds干货盘点#的主要内容,如果未能解决你的问题,请参考以下文章

⭐万字长篇超详细的图解Tomcat中间件方方面面储备知识⭐ #yyds干货盘点#

云基础和openstack架构简介 #yyds干货盘点#

#yyds干货盘点#-设计模式分享-组合模式

《微服务架构设计模式》读书笔记 | 第2章 服务的拆分策略 #yyds干货盘点#

#yyds干货盘点#单台zabbix5.0服务器如何拆分数据库角色

Nginx基本概述 #yyds干货盘点#