数据库拆分

为什么要进行数据库拆分?

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

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

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

数据库拆分架构演变过程,如下图所示:

image.png

数据库拆分环境规划

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

数据库拆分详解

1.web01网站服务器操作如下
1)备份web01上的数据库。-A表示备份所有数据库

[root@web02 ~]# mysqldump -uroot -A |gzip >/root/all.sql.gz
[root@web02 ~]# ll /root/all.sql.gz 
-rw-r--r-- 1 root root 276869 Jun 12 15:30 /root/all.sql.gz
  1. 将web01上备份的数据库拷贝至db01 服务器上
[root@web02 ~]# sshpass -p123456 scp all.sql.gz 172.16.1.51:/root

2.db01数据服务器操作如下
1)将web01服务器上推送的数据库备份文件恢复至db01服务器新数据库中

[root@db01 ~]#  rpm -Uvh https://www.boke111.cn/wp-content/uploads/file/epel-release-latest-7.noarch_\(1\).rpm
[root@db01 ~]#  rpm -Uvh https://www.boke111.cn/wp-content/uploads/file/webtatic-release_\(1\).rpm
[root@db01 ~]# yum install -y mariadb-server 
[root@db01 ~]#   systemctl start mariadb.service
[root@db01 ~]#  systemctl enable mariadb.service
[root@db01 ~]# gzip -d all.sql.gz    ##解压压缩包
[root@db01 ~]# mysql 

2) 数据库导入完成后,使用root进入数据库,刷新用户权限。并检查数据库是否导入成功。然后再检查是否可以使用远程方式登录wordpress数据库

[root@db01 ~]# mysql -uroot
MariaDB [(none)]> show databases;   ##查看所有数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| wordpress          |
+--------------------+
6 rows in set (0.00 sec)

MariaDB [(none)]> select user,host from mysql.user;    ###检查用户授权信息
+-----------+------------+
| user      | host       |
+-----------+------------+
| root      | 127.0.0.1  |
| wordpress | 172.16.1.% |
| root      | ::1        |
| root      | localhost  |
| wordpress | localhost  |
| root      | web02      |
+-----------+------------+
7 rows in set (0.04 sec)

MariaDB [(none)]> flush privileges;     ##当用户权限出现改变时,用这条命令刷新用户权限
Query OK, 0 rows affected (0.00 sec)
[root@db01 ~]# mysql -uwordpress -p123456 -h 172.16.1.51

3.web01 测试远程登录成功后修改代码连接新数据库环境
1) 测试远程登录db01数据库

[root@web01 ~]# mysql -uwordpress -p123456 -h 172.16.1.51

2)修改wordpress 数据库配置文件,连接新的数据库

#数据库名字
define( 'DB_NAME', 'wordpress' );
#用户名称
define( 'DB_USER', 'wordpress' );
#用户密码
define( 'DB_PASSWORD', '123456' );
#数据库地址
define( 'DB_HOST', '172.16.1.51' );

3)最后访问网站,成功打开,至此才分数据库成功

拆分静态资源至独立服务器

为什么拆分静态资源至独立服务器

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

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

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

多台web节点技术架构组成,如下图所示

image.png

快速扩展一台web节点环境规划

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

快速扩展一台web节点详细步骤

1.nfs服务端,操作步骤如下
1) 安装并配置nfs

[root@nfs01 ~]# yum install -y rpcbind nfs-utils
[root@nfs01 ~]# systemctl start  rpcbind nfs
[root@nfs01 ~]# cat /etc/exports
/data/blog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

2)创建共享目录,并授权

[root@nfs01 ~]# mkdir -p /data/blog
[root@nfs01 ~]# chown www:www /data/blog

3) 重新启动nfs ,并加入开机自启

[root@nfs01 ~]#  systemctl reload nfs
[root@nfs01 ~]#  systemctl enable nfs rpcbind

2.web01 端操作如下
1) web01 节点安装nfs,然后使用 showmount 查看服务端 共享的资源

[root@nfs01 ~]# yum install -y  nfs-utils
[root@nfs01 ~]# systemctl start nfs
[root@nfs01 ~]# systemctl enable nfs
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data/blog  172.16.1.0/24

2) 如何查找wordpress 静态资源存放位置


image.png

3) 备份web01 服务器上的wordpress 的静态资源,应为不进行备份就挂载,会把已有资源覆盖。

[root@web01 ~]# cd /usr/share/nginx/html/www/wp-content/
[root@web01 /usr/share/nginx/html/www/wp-content]# cp -r uploads uploads_bak

4) web01 客户端执行挂载操作

[root@web01 /usr/share/nginx/html/www/wp-content]# mount -t nfs 172.16.1.31:/data/blog /usr/share/nginx/html/www/wp-content/uploads
[root@web01 /usr/share/nginx/html/www/wp-content]# cp -rp uploads_bak/*  uploads/

5) 将挂载信息加入开机自动挂载

[root@web01 /usr/share/nginx/html/www/wp-content]# tail -n2 /etc/fstab
172.16.1.31:/data/blog  /usr/share/nginx/html/www/wp-content/uploads nfs   defaults     0 0

你可能感兴趣的:(数据库拆分)