LNMP 拆分
范例:知乎 wecenter
服务器 主机名 IP web web01 172.16.1.31 web web02 172.16.1.32 php php01 172.16.1.41 数据库 db01 172.16.1.51
拆分数据库配置文件位置
wordpress: /code/wordpress/wp-config.php
wecenter: /code/zh/system/config/database.php
edusoho: /code/edusoho/app/config/parameters.yml
edusoho 还要清除缓存 rm -rf edusoho/app/cache/*
拆分 数据库
备份数据库至 DB 服务器
mysqldump -uroot -p123456 -B zh > /tmp/zh.sql
scp /tmp/zh.sql 172.16 .1.51:/tmp/
部署 DB 服务器
yum install -y mariadb-server
systemctl enable mariadb
systemctl start mariadb
mysql < /tmp/zh.sql
mysqladmin -uroot password '123456'
mysql -uroot -p123456
MariaDB [ ( none) ] > show databases;
| zh |
MariaDB [ ( none) ] > grant all on zh.* to zh@'172.16.1.%' identified by '123456' ;
MariaDB [ ( none) ] > select user,host from mysql.user;
| zh | 172.16 .1.% |
grant all on *.* to root@'172.16.1.%' identified by '123456' ;
切换数据库
mysql -uzh -p123456 -h 172.16 .1.51
vim /code/zh/system/config/database.php
< ?php
$config [ 'charset' ] = 'utf8mb4' ;
$config [ 'prefix' ] = 'aws_' ;
$config [ 'driver' ] = 'MySQLi' ;
$config [ 'master' ] = array (
'charset' = > 'utf8mb4' ,
'host' = > '172.16.1.51' ,
'username' = > 'zh' ,
'password' = > '123456' ,
'dbname' = > 'zh' ,
) ;
$config [ 'slave' ] = false ;
systemctl stop mariadb
拆分 PHP
分析
再次看这幅图是因为,在拆分PHP的时候遇到了大坑
根据上图先理清拆分思路:
1 、Nginx 安装在 172.16 .1.31 PHP 安装在 172.16 .1.41
2 、Nginx 将用户动态请求通过 fastcgi 发给 PHP 的 php-fpm 管理进程
这一步需要在Nginx站点配置文件中指定 PHP 的地址 172.16 .1.41:9000
3 、php-fpm 收到请求需要先看看自己能解决的部分安排 wrapper 工作进程处理
这一步需要让 PHP 能查看对应的站点资源,将所有站点资源放在PHP主机上
4 、wrapper 工作进程解决不的就需要去找后面的数据库
我用php -i | grep mysql 查到 mysqlnd = > enabled 因为我安装了 php71w-mysqlnd 模块
这一步需要让 PHP 能连接上后面的数据库,在 站点资源 的配置文件上设置好数据库IP和用户
网上找的资料都说 php.ini 文件中设置,这是windows系统下的配置
[ root@php01 ~]
725 -; On windows:
726 :; extension_dir = "ext"
[ root@php01 ~]
847 -; For example, on Windows:
848 -;
849 :; extension = msql.dll
--
851 -; .. . or under UNIX:
852 -;
853 :; extension = msql.so
5 、PHP 拿到后端返回的数据后需要交给 Nginx
这一步需要让 PHP 能连接 Nginx ,在 PHP 配置文件中指定 172.16 .1.31
6 、为了让Nginx和PHP这2台主机中站点数据能够统一
建议在PHP上提供NFS目录给Nginx挂载【或者推送站点目录至PHP主机】
web01
vim /etc/nginx/conf.d/zh.linux.com.conf
server {
listen 80 ;
server_name zh.linux.com;
location / {
root /code/zh;
index index.php;
}
location ~ \ .php$ {
root /code/zh;
fastcgi_pass 172.16 .1.41:9000;
fastcgi_param SCRIPT_FILENAME $document_root $fastcgi_script_name ;
include fastcgi_params;
}
}
systemctl restart nginx
chown -R www.www /code
rsync --delete -az /code 172.16 .1.41:/
PHP
1 、
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
2 、
yum remove php-mysql-5.4 php php-fpm php-common
3 、
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
yum -y localinstall *.rpm
配置
1 、配置php主配置文件
vim /etc/php.ini
upload_max_filesize = 200M
post_max_size = 200M
date.timezone = Asia/Shanghai
2 、配置修改用户
vim /etc/php-fpm.d/www.conf
user = www
group = www
listen = 172.16 .1.41:9000
listen.allowed_clients = 172.16 .1.31
systemctl enable php-fpm
systemctl start php-fpm
web 集群
web 部署
和单机一样部署 Nginx PHP
如果 PHP 单独安装的话,那只需要部署 Nginx
统一配置文件
[ root@web01 ~]
[ root@web01 ~]
统一站点目录内容
[ root@web01 ~]
文档尾部