lnmp架构拆分

lnmp架构拆分

拆分数据库

1.为什么要进行数据库的拆分

由于单台服务器运行 LNMP 架构会导致网站访问缓慢,当内存被吃满时,很容易导致系统出现 oom,从而 kill 掉MySQL 数据库,所以需要将 web 和数据库进行独立部署

2.数据库拆分后解决了什么问题

1.缓解 web 网站的压力
2.增强数据库读写性能
3.提高用户访问的速度

3.数据库拆分架构演变过程

img

4.数据库拆分环境搭建

主机名称	 应用环境	  外网地址	    内网地址
web01		nginx+php	10.0.0.7	172.16.1.7
db01		mysql					172.16.1.51

5.数据库拆分详细步骤

web01上备份数据库并拷贝到db01上

备份 web01 上的数据库,msy123 是数据库密码

[root@web01 ~]# mysqldump -uroot -p'msy123' -A --single-transaction > mysql-all.sql

将 web01 上备份的数据库拷贝至 db01 服务器上

[root@web01 ~]# scp mysql-all.sql 10.0.0.51:/tmp

[root@db01 /tmp]# ls
mysql-all.sql

db01恢复数据库

将 web01 服务器上推送的数据库备份文件恢复至 db01 服务器新数据库中

[root@db01 ~]# yum install mariadb mariadb-server -y
[root@db01 ~]# systemctl start mariadb  (停止之后登录不上 才能证明后面登陆成功是远程登录) 
[root@db01 ~]# systemctl enable mariadb
[root@db01 ~]# mysqladmin password 'msy123'
[root@db01 ~]# mysql -uroot -p'msy123' < /tmp/mysql-all.sql
[root@db01 ~]# mysql -uroot -p'msy123' -e "show databases;"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| wordpress          |
| zh                 |
+--------------------+

db01数据库进行授权

在新数据库上授权, 允许所有网段, 通过 all 账户连接并操作该数据库
授权所有权限 grant all privileges
授权所有库所有表 .
将授权赋予给哪个用户,这个用户只能通过哪个网段过来(%所有) 'all'@'%'
授权该用户登录的密码 identified by

[root@db01 ~]# mysql -uroot -p'msy123'
> grant all privileges on *.* to 'oldboy'@'%' identified by 'msy123';
> flush privileges; 
>exit;
这个权限给的非常高 方便测试的 允许全部用户 远程登录
正常情况下就给个172的网段就行

测试使用IP地址能不能登陆

[root@db01 ~]# mysql -uoldboy -p'msy123' -h 172.16.1.51
> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| wordpress          |
| zh                 |
+--------------------+

web01修改代码连接到新数据库

修改wordpress

[root@web01 /code/wordpress]# grep -R "msy123" *
    wp-config.php:define( 'DB_PASSWORD', 'msy123' );

[root@web01 ~]# vim /code/wordpress/wp-config.php
/** WordPress数据库的名称 */
define( 'DB_NAME', 'wordpress' );

/** MySQL数据库用户名 */
define('DB_USER', 'oldboy');

/** MySQL数据库密码 */
define('DB_PASSWORD', 'msy123');

/** MySQL主机 */
define('DB_HOST', '172.16.1.51');

419487caa8188788c542436dfda0ce8.png

修改wecenter

[root@web01 zh]# grep -R "msy123" *
system/config/database.php:  'password' => 'msy123',
[root@web01 zh]# vim /code/zh/system/config/database.php 
		$config['driver'] = 'MySQLi';^M
		$config['master'] = array (
		  'charset' => 'utf8',
		  'host' => '172.16.1.51',
		  'username' => 'oldboy',
		  'password' => 'msy123',
		  'dbname' => 'zh',
		);^M

修改edusoho

[root@web01 /code/edusoho]# grep -R "msy123" *
[root@web01 edusoho]# vim /code/edusoho/app/config/parameters.yml
    database_driver: pdo_mysql
    database_host: 172.16.1.51
    database_port: 3306
    database_name: edusoho
    database_user: oldboy
    database_password: 'msy123'

	必须清理缓存
	[root@web01 edusoho]# rm -rf /code/edusoho/app/cache/*
'有些配置好的网站还是打不开就可能是缓存的问题 把缓存删了就行	

扩展多台web

1.为什么要拓展多台web节点

单台 web 服务器能抗住的访问量是有限的,配置多台 web 服务器能提升更高的访问速度

2.拓展多台web解决了什么问题

1.单台 web 节点如果故障,会导致业务 down 机
2.多台 web 节点能保证业务的持续稳定,扩展性高
3.多台 web 节点能有效的提升用户访问网站的速度

3.多台web服务器架构组成

img

4.多台web服务器思路

1.可以使用ansible批量部署多台web服务器
2.配置内网私有yum仓库
3 按照web01的步骤安装好nginx和php,然后远程拷贝代码到新机器

5.正常配置步骤

扩展多台web

统一环境

`准备对应的www用户
[root@web02 ~]# groupadd -g666 www
[root@web02 ~]# useradd -u666 -g666 www

`拷贝web01上面的yum仓库
[root@web02 ~]# scp root@172.16.1.7:/etc/yum.repos.d/*.repo /etc/yum.repos.d/
			
`安装nginx和php
[root@web02 ~]# yum -y install nginx 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

统一配置

(同步web01上面的配置到web02)

`同步nginx
[root@web02 ~]# rsync  -avz --delete root@172.16.1.7:/etc/nginx/ /etc/nginx/
[root@web02 ~]# nginx -t
[root@web02 ~]# systemctl enable nginx
[root@web02 ~]# systemctl start nginx

`同步php(/etc/php-fpm.conf /etc/php-fpm.d  /etc/php.ini)
[root@web02 ~]# rsync  -avz --delete root@172.16.1.7:/etc/php* /etc/
[root@web02 ~]# systemctl enable php-fpm
[root@web02 ~]# systemctl start php-fpm

统一代码

[root@web01 ~]# tar czf code.tar.gz /code				#在web01上打包站点

[root@web01 ~]# scp code.tar.gz root@172.16.1.8:/tmp	#在web01上将打包好的代码发送给web02

[root@web02 ~]# tar xf /tmp/code.tar.gz -C /			#在web02上进行解压,并解压到/目录下

配置解析,进行访问

2340ccfce3a2f57d9206f258d44c005.png

切换用户出现的问题

`用web02登录写文章 上传图片
`web01登录之后 看不见图片 只能看见文字
`因为文字是直接保存在数据库里的

切换用户访问

在hosts文件中把10.0.0.8注释,10.0.0.7打开

然后登录网站

无法显示图片

2762be76e26ad5563c683f39ff98d7a.png

共享多台web的静态资源(解决上面的问题)

1.为什么要拆分静态资源到独立服务器

当后端的 web 节点出现多台时,会导致用户上传的图片、视频附件等内容仅上传至一台 web 服务器,那么其他的web 服务器则无法访问到该图片

2.新增一台nfs存储解决了什么问题

1.保证了多台 web 节点静态资源一致。
2.有效节省多台 web 节点的存储空间。
3.统一管理静态资源,便于后期推送至 CDN 进行静态资源加速

3.多台web节点架构组成

img

4.共享多台web的静态资源

准备172.16.1.31共享存储服务器,规划目录,配置好权限

`创建用户
[root@nfs ~]# groupadd -g666 www
[root@nfs ~]# useradd -u666 -g666 www	
		
`安装
[root@nfs ~]# yum install nfs-utils -y
			
`配置
[root@nfs ~]# cat /etc/exports
/data/blog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/zh 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/edu 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

`根据配置,创建目录,准备用户,授权等等
[root@nfs ~]# rm -rf /data/
[root@nfs ~]# mkdir /data/{blog,zh,edu} -p
[root@nfs ~]# chown -R www.www /data/
		
`启动
[root@nfs ~]# systemctl enable nfs-utils 
[root@nfs ~]# systemctl restart nfs-utils

将图片较多的web02服务器,推送到nfs共享存储上

http://blog.oldboy.com/wp-content/uploads/2019/01/timg.jpg
通过这个图片链接 找到图片的存储位置
这个图片连接是浏览器上传之后右键查看的

[root@web02 ~]# cd /code/wordpress/wp-content
[root@web02 wp-content]# scp -r uploads/* root@172.16.1.31:/data/blog/

查看挂载机器

[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data/edu  172.16.1.0/24
/data/zh   172.16.1.0/24
/data/blog 172.16.1.0/24

[root@web02 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data/edu  172.16.1.0/24
/data/zh   172.16.1.0/24
/data/blog 172.16.1.0/24

showmount这个命令需要下载nfs

注意:需要上nfs服务器上进行重新的递归授权,否则会出现无法上传文件的错误
[root@nfs ~]# chown -R www.www /data/

挂载

web01和web02分别都进行挂载,此时图片进行实现了共享

[root@web01 ~]# systemctl restart rpcbind
[root@web02 ~]# systemctl restart rpcbind

mount -t nfs 172.16.1.31:/data/blog  /code/wordpress/wp-content/uploads	

切换web01,web02服务器查看就行

posted @ 2020-01-02 20:23  干瘪的柠檬  阅读(134)  评论(0编辑  收藏  举报