02架构 04.2 拆分 LNMP web集群

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

拆分数据库配置文件位置

#开始LNMP在一台主机上,所以数据库配置文件指向的IP+端口也是本机,生产中这个文件位置找开发要
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 服务器

# web01 主机

mysqldump -uroot -p123456 -B zh > /tmp/zh.sql
scp /tmp/zh.sql 172.16.1.51:/tmp/

部署 DB 服务器

# db01 主机

#安装
yum install -y mariadb-server
#启动并开机自启
systemctl enable mariadb
systemctl start mariadb
#导入备份数据
mysql < /tmp/zh.sql
#设置数据库用户密码
mysqladmin -uroot password '123456'
#登陆
mysql -uroot -p123456
#查看导入的 zh 库
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.% |

#授权root用户远程可以访问所有库所有表
grant all on *.* to root@'172.16.1.%' identified by '123456';

切换数据库

# web01 主机 

#测试连接 db01 数据库
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;
#停止 web01 上的数据库
systemctl stop mariadb

#访问网站 http://zh.linux.com/

拆分 PHP

02架构 04.2 拆分 LNMP web集群_第1张图片

分析

再次看这幅图是因为,在拆分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 工作进程解决不的就需要去找后面的数据库
		# 需要安装mysql模块
	我用php -i |grep mysql 查到 mysqlnd => enabled 因为我安装了 php71w-mysqlnd 模块
这一步需要让 PHP 能连接上后面的数据库,在 站点资源 的配置文件上设置好数据库IP和用户

网上找的资料都说 php.ini 文件中设置,这是windows系统下的配置
[root@php01 ~]# grep -nB 1 'extension_dir = "ext"' /etc/php.ini
725-; On windows:
726:; extension_dir = "ext"
[root@php01 ~]# grep -nB 2 'extension=msql' /etc/php.ini
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$ {
    	#当PHP拆分之后这里的 /code/zh 实际是指 PHP服务所在主机的目录
        root /code/zh;
        #指向 PHP服务所在主机地址
        fastcgi_pass 172.16.1.41:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

systemctl restart nginx

#站点目录发送至PHP主机
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#卸载已安装低版本的php
yum remove php-mysql-5.4 php php-fpm php-common

3#安装PHP 7.1版本【安装会出一些问题,记住没有安装的包,重新单独安装,保存好所有安装包利于下次使用】
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统一安装
yum -y localinstall *.rpm

配置

1、配置php主配置文件
vim /etc/php.ini
upload_max_filesize = 200M		# 799行 修改上传文件大小
post_max_size = 200M			# 656行 修改请求限制大小,2个配一样
date.timezone = Asia/Shanghai	# 877行 多数这样设置表示中国时区
#date.timezone = PRC			# 877行 如果时区不对就修改,此行默认是注释掉的

2、配置修改用户
vim /etc/php-fpm.d/www.conf
user = www
group = www
listen = 172.16.1.41:9000				#监听地址+端口供Nginx服务器访问
listen.allowed_clients = 172.16.1.31	#用来返回数据Nginx服务器的ip地址

#启动
systemctl enable php-fpm
systemctl start php-fpm

web 集群

web 部署

和单机一样部署 Nginx PHP
如果 PHP 单独安装的话,那只需要部署 Nginx

统一配置文件

# yum 安装后推送路径,如果是源码安装的话根据安装路径推送配置文件
# 先在1台web设置好配置文件再推送至其他web服务器
[root@web01 ~]# rsync -avz --delete  /etc/nginx/ 172.16.1.8:/etc/nginx/
[root@web01 ~]# rsync -avz --delete  /etc/php* 172.16.1.8:/etc/

统一站点目录内容

[root@web01 ~]# rsync --delete -az /code 172.16.1.32:/

文档尾部

你可能感兴趣的:(Linux,#,Linux,基础,linux,centos,运维)