kylin-LNMP架构拆分-WordPress为例
LNMP架构拆分(以WordPress为例)
一、数据库拆分
-
为什么要进行数据库拆分?
由于单台服务器运行 LNMP架构会导致网站访问缓慢,当内存被占满时,很容易导致系统出现 oom 从而kill掉MySQL数据库,所以要将web和数据库进行独立部署。
-
解决了什么问题?
1.缓解web网站的压力
2.增强数据库读写性能
3.提高用户访问速度
-
服务器准备
主机名 公网IP 私网IP 功能 web01 10.0.0.7 172.16.1.7 Nginx+PHP db01 10.0.0.51 172.16.1.51 MySQL -
拆分步骤
1.服务器web01已部署好LNMP及WordPress
2.准备好db01服务器,并安装mariadb-server、启动
[root@db01 ~]# yum -y install mariadb-server
[root@db01 ~]# systemctl start mariadb.service
[root@db01 ~]# systemctl enable mariadb.service
3.导出web01数据库的所有数据
[root@web01 ~]# mysqldump -uroot -pdzy123.com -A > all.sql
[root@web01 ~]# ls
all.sql
4.将all.sql拷贝到51服务器
[root@web01 ~]# scp all.sql 10.0.0.51:/root/
5.将all.sql导入db01的数据库,并重启服务
[root@db01 ~]# mysql -uroot < all.sql
[root@db01 ~]# systemctl restart mariadb.service
6.查看导入的信息
[root@db01 ~]# mysql -uroot -pdzy123.com -e 'show databases'
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sheshop |
| wordpress |
+--------------------+
7.数据库为了安全,禁止root远程连接,必须使用普通账号进行远程连接
#测试root远程连接
[root@web01 ~]# mysql -uroot -pdzy123.com -h172.16.1.51
ERROR 1130 (HY000): Host '172.16.1.7' is not allowed to connect to this MariaDB server
#授权db01数据库普通账号密码为dzy123.com管理所有库和所有的表
[root@db01 ~]# mysql -uroot -pdzy123.com
MariaDB [(none)]> grant all on *.* to dzy@'%' identified by 'dzy123.com';
#web01测试
[root@web01 ~]# mysql -h10.0.0.51 -udzy -pdzy123.com
8.在web01查找WordPress的数据库配置文件,并修改。
[root@web01 ~]# vim /code/wordpress/wp-config.php
/** MySQL数据库用户名 */
define('DB_USER', 'dzy');
/** MySQL数据库密码 */
define('DB_PASSWORD', 'dzy123.com');
/** MySQL主机 */
define('DB_HOST', '172.16.1.51');
9.停止web01的数据库
[root@web01 ~]# systemctl stop mariadb
[root@web01 ~]# systemctl disable mariadb
10.重新测试访问业务
二、扩展web服务器
- 作用:防止其中一台web服务器宕机;为后续负载均衡做准备
- 服务器准备:
| 主机名 | 公网IP | 私网IP | 功能 |
|---|---|---|---|
| web02 | 10.0.0.8 | 172.16.1.8 | Nginx+PHP |
- 扩展步骤:
1.准备好web02服务器
2.安装nginx
[root@web02 ~]# scp 10.0.0.7:/etc/yum.repos.d/nginx.repo /etc/yum.repos.d/
[root@web02 ~]# yum -y install nginx
3.安装php
[root@web02 ~]# yum -y install php php-bcmath php-cli php-common php-devel php-embedded php-fpm php-gd php-intl php-mbstring php-mysqlnd php-opcache php-pdo php-process php-xml php-json
4.创建虚拟用户uid gid 666 www
[root@web02 ~]# groupadd -g666 lnmp
[root@web02 ~]# useradd -u666 -g666 -M -s /sbin/nologin lnmp
5.将web01的nginx配置和web02进行同步
[root@web02 ~]# rsync -avz --delete 10.0.0.7:/etc/nginx/ /etc/nginx/
6.将web01的代码拷贝到web02
[root@web01 /]# tar zcvf code.tar.gz /code
[root@web01 ~]# scp code.tar.gz 10.0.0.8:/root/
[root@web02 ~]# tar xf code.tar.gz -C /
7.同步php的配置文件
[root@web02 ~]# rsync -avz --delete 10.0.0.7:/etc/php-fpm.d/ /etc/php-fpm.d/
8.启动nginx和php服务
[root@web02 ~]# systemctl start nginx php-fpm
[root@web02 ~]# systemctl enable nginx php-fpm
9.修改Windows本地hosts测试访问10.0.0.8的wp.dezyan.com
F12查看远程地址及状态代码,若为下列情况即为成功
状态代码: 200 OK
远程地址: 10.0.0.8:80
三、解决web服务器静态数据一致性
- 服务器准备:
| 主机名 | 公网IP | 私网IP | 功能 |
|---|---|---|---|
| nfs | 10.0.0.31 | 172.16.1.31 | nfs |
- 解决步骤:
1.安装nfs服务
yum -y install nfs-utils
2.配置nfs服务
vim /etc/exports
/data/wordpress 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anonuid=666)
3.创建必要数据
groupadd -g666 lnmp
useradd -u666 -g666 -M -s /sbin/nologin lnmp
mkdir /data/wordpress -p
chown lnmp.lnmp /data/wordpress
4.启动nfs服务
systemctl start nfs
systemctl enable nfs
5.将web02服务器WordPress业务的图片全部拷贝到31服务器
[root@web02 ~]# scp -r /code/wordpress/wp-content/uploads/* 10.0.0.31:/data/wordpress
6.web服务器挂载nfs
web01和web02:
mount -t nfs 172.16.1.31:/data/wordpress /code/wordpress/wp-content/uploads/
四、配置反向代理
- 服务器准备:
| 主机名 | 公网IP | 私网IP | 功能 |
|---|---|---|---|
| lb01 | 10.0.0.5 | 172.16.1.5 | nginx反向代理 |
- 配置过程:
1.配置nginx的yum仓库,安装
[root@lb01 ~]# scp 10.0.0.7:/etc/yum.repos.d/nginx.repo /etc/yum.repos.d/
[root@lb01 ~]# yum install -y nginx
2.配置代理,检查语法,重启服务
[root@lb01 ~]# cd /etc/nginx/conf.d/
#反向代理优化文件
vim /etc/nginx/proxy_params
proxy_set_header Host $http_host; #必须要有
proxy_http_version 1.1; #必须要有
proxy_connect_timeout 30; #其余为优化项
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
[root@lb01 conf.d]# vim lb.conf
server {
listen 80;
server_name wp.dezyan.com;
location / {
proxy_pass http://10.0.0.7;
include proxy_params;
}
}
[root@lb01 conf.d]# nginx -t
3.Windows的本地hosts解析指向10.0.0.5,访问测试
五、负载均衡配置
1.修改lb.conf配置文件,增添解析模块(测试用),重启nginx服务
[root@lb01 conf.d]# vim lb.conf
upstream webs { #通过upstream模块定义地址池
server 172.16.1.7;
server 172.16.1.8;
}
server {
listen 80;
server_name wp.dezyan.com;
location / {
proxy_pass http://webs; #使用proxy_pass模块将请求转发给地址池
include proxy_params;
}
}
server {
listen 80;
server_name www.test.com;
location / {
proxy_pass http://webs;
include proxy_params;
}
}
[root@lb01 conf.d]# systemctl restart nginx
2.在web01和web02上设置静态界面进行测试<平均请求>
#web01上:
[root@web01 ~]# cd /etc/nginx/conf.d/
[root@web01 conf.d]# vim test.conf
server {
listen 80;
server_name www.test.com;
location / {
root /code/test;
index index.html;
}
}
[root@web01 conf.d]# nginx -t
[root@web01 conf.d]# systemctl restart nginx
[root@web01 ~]# mkdir /code/test
[root@web01 ~]# echo web01..... > /code/test/index.html
#web02上
[root@web02 ~]# cd /etc/nginx/conf.d/
[root@web02 conf.d]# vim test.conf
server {
listen 80;
server_name www.test.com;
location / {
root /code/test;
index index.html;
}
}
[root@web02 conf.d]# nginx -t
[root@web02 conf.d]# mkdir /code/test
[root@web02 conf.d]# echo web02.... >/code/test/index.html
3.打开浏览器测试,不断刷新,页面循环出现web01和web02即为成功
面试题: 通过什么方式实现的负载均衡
nginx的proxy_pass模块将请求转发给了地址池,地址池是通过upstream模块来定义的。
本文来自博客园,作者:丁志岩,转载请注明原文链接:https://www.cnblogs.com/dezyan/p/18784453

浙公网安备 33010602011771号