lnmp架构拆分
lnmp架构拆分
拆分数据库
1.为什么要进行数据库的拆分
由于单台服务器运行 LNMP 架构会导致网站访问缓慢,当内存被吃满时,很容易导致系统出现 oom,从而 kill 掉MySQL 数据库,所以需要将 web 和数据库进行独立部署
2.数据库拆分后解决了什么问题
1.缓解 web 网站的压力
2.增强数据库读写性能
3.提高用户访问的速度
3.数据库拆分架构演变过程
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');
修改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服务器架构组成
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上进行解压,并解压到/目录下
配置解析,进行访问
切换用户出现的问题
`用web02登录写文章 上传图片
`web01登录之后 看不见图片 只能看见文字
`因为文字是直接保存在数据库里的
切换用户访问
在hosts文件中把10.0.0.8注释,10.0.0.7打开
然后登录网站
无法显示图片
共享多台web的静态资源(解决上面的问题)
1.为什么要拆分静态资源到独立服务器
当后端的 web 节点出现多台时,会导致用户上传的图片、视频附件等内容仅上传至一台 web 服务器,那么其他的web 服务器则无法访问到该图片
2.新增一台nfs存储解决了什么问题
1.保证了多台 web 节点静态资源一致。
2.有效节省多台 web 节点的存储空间。
3.统一管理静态资源,便于后期推送至 CDN 进行静态资源加速
3.多台web节点架构组成
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服务器查看就行