LNMP集群架构
网站集群拆分
上一节我们是部署了单机的LNMP,再往下,要进行拆分了,无论是性能、还是安全性,都务必要拆分。
拆分的内容有
- nginx集群
- mysql
- nfs共享存储
- 等
拆分思路
情况1
- 当前的单机环境已经装好了,数据也都有了,需要拆分到多个机器
- 需要考虑数据迁移
情况2
- 初试环境直接以集群模式部署,较为简单
必要因素
应用拆分为集群后,需要考虑的问题
- 数据的备份与恢复
- LNMP的每一个组件调用,从本地连接,改为了远程连接。
- mysql的远程连接授权。
拆分步骤
- 部署db-51机器,mariadb程序
- web-7的数据导出,发给db-51
- db-51导入数据
- 设置远程连接权限
- web-7测试远程连接db-51
- 修改php配置文件,连接远程的mysql地址db-51
- 访问网站,测试数据读写情况
一、拆分数据库
拆分背景
由于单台服务器运行LNMP,单机性能较差、安全性较低,且多个程序运行,抢夺内存资源;
- 内存吃满后,系统容易crash崩溃,导致进程异常退出等故障
- 单机若出问题,那就是毁灭性打击。
拆分解决了什么问题
1.增强数据安全性
2.增强数据库的处理能力
3.降低172.16.1.7服务器的压力
4.提升用户访问体验
机器环境准备
web-7 172.16.1.7 nginx+php (应用服务器)
db-51 172.16.1.51 mysql (数据库服务器)
备份web-7上的数据库
1.导出web-7的mysql数据库,里面包含了几个产品的数据
[root@web-7 ~]#!mysql
mysql -uroot -pyuchaoit.cn
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 155
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| wecenter |
| wordpress |
+--------------------+
6 rows in set (0.00 sec)
2.数据库备份
# -A 所有数据库
# --single-transaction 保证数据完整且一致
[root@web-7 ~]#mysqldump -uroot -p'yuchaoit.cn' -A --single-transaction > /opt/alldb.sql
3.查看备份数据
[root@web-7 ~]#ll /opt/alldb.sql -h
-rw-r--r-- 1 root root 2.0M May 13 18:34 /opt/alldb.sql
数据发给备份服务器
[root@web-7 /opt]#scp /opt/alldb.sql root@172.16.1.51:/opt/
二、部署db-51
安装、导入数据
[root@db-51 ~]#yum install mariadb mariadb-server -y
[root@db-51 ~]#systemctl start mariadb
[root@db-51 ~]#
[root@db-51 ~]#systemctl enable mariadb
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
[root@db-51 ~]#
设置密码
[root@db-51 ~]#mysqladmin password 'yuchaoit.cn'
导入数据
[root@db-51 /opt]#mysql -uroot -pyuchaoit.cn < /opt/alldb.sql
查看数据库
[root@db-51 /opt]#mysql -uroot -pyuchaoit.cn -e "show databases;"
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| wecenter |
| wordpress |
+--------------------+
授权远程可访问
[root@db-51 /opt]#mysql -uroot -pyuchaoit.cn
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 7
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> grant all privileges on *.* to 'yuchao01'@'%' identified by 'yuchaoit.cn';
Query OK, 0 rows affected (0.00 sec)
# 刷新权限表
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
# 参数解释
授予所有权限 grant all privileges
所有库、所有表 *.*
授予访问的用户@所有主机 'yuchao01'@'%'
该授权用户的访问密码 identified by 'yuchaoit.cn';
测试该用户登录,读取数据
[root@db-51 /opt]#mysql -uyuchao01 -p'yuchaoit.cn' -h 10.0.0.51
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| wecenter |
| wordpress |
+--------------------+
6 rows in set (0.00 sec)
三、修改web-7远程连接数据库
修改wordpress代码
该网站产品后端是php,数据也都是通过程序读写的数据库。
[root@web-7 /code/wordpress]#vim /code/wordpress/wp-config.php
修改wecenter代码
[root@web-7 /code/wecenter]#cat 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' => 'yuchao01',
'password' => 'yuchaoit.cn',
'dbname' => 'wecenter',
'port' => '3306',
);
$config['slave'] = false;
$config['port'] = '3306';
停止web-7的数据库
这也就是我们以前安装的数据库,停掉它。
[root@web-7 /code/wecenter]#systemctl stop mariadb
[root@web-7 /code/wecenter]#
[root@web-7 /code/wecenter]#ps -ef|grep mysql
root 14934 14679 0 19:06 pts/0 00:00:00 grep --color=auto mysql
[root@web-7 /code/wecenter]#netstat -tunlp|grep 3306
四、测试产品访问
本地做好dns解析
10.0.0.7 www.yuchaoit.cn wecenter.yuchaoit.cn wordpress.yuchaoit.cn
wordpress博客产品
- 访问静态数据,首页图片等
- 访问动态数据,登录,写博客
http://wordpress.yuchaoit.cn/wp-login 这是后台地址
试试你以前的密码还能用吗
yuchao01
chaoge666
正确登录,则数据是没问题的,以及看看文章数据还在吗
再发表一个新博客,查看数据库
[root@db-51 /opt]#mysql -uyuchao01 -p'yuchaoit.cn' -h 10.0.0.51
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 45
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| wecenter |
| wordpress |
+--------------------+
6 rows in set (0.00 sec)
MariaDB [(none)]> use wordpress;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [wordpress]>
MariaDB [wordpress]> select * from wp_posts;
wecenter
http://wecenter.yuchaoit.cn/?/account/register/
试试是否可以注册新用户
cc01
chaoge666
注意,这里的域名是本地的测试域名。
登录后,数据库中找找,去db-51上找。
[root@db-51 /opt]#mysql -uyuchao01 -p'yuchaoit.cn' -h 10.0.0.51
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 92
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
MariaDB [(none)]> select user_name,password from wecenter.aws_users;
+-----------+----------------------------------+
| user_name | password |
+-----------+----------------------------------+
| yuchao01 | *851F4EE1AF6791802ED4A520AF0611F |
| cc01 | f689087c69b60ae88bad18a1206ea557 |
+-----------+----------------------------------+
2 rows in set (0.00 sec)
五、增加web节点
在淘宝十年架构演进中,超哥讲解了单机到集群的扩展,单个web-7,再加一个web-8
拓展web-8解决了什么问题
- 单机web-7能抗住的访问量是有局限性的,因此配置多个一模一样的web服务器即可,分摊这个压力,提高客户端的响应速度,请求不再集中到web-7。
- 如果web-7故障,导致网站直接挂掉
- 多个web节点,能保证业务稳定运行,扩展性更高了
- 明显的,提升了用户访问的网站的速度。
部署多个web服务器思路
- 同一个软件
- 同一个配置文件
快捷办法,从零部署可以这样做
1. 可以通过ansible剧本,一键部署多个web服务器
2. 准备好nginx软件包,部署内网自建yum仓库,统一部署。
如果已经有了web-7环境,只能再额外加了,或者你可以基于当前状态,需要部署web8,web9,web10,依然可以用ansible
3. 按照web-7的部署笔记,再来一遍,部署好web-8
手工部署web-8
创建用户
咱们这里只加一个web8,手工再来一遍即可。
[root@web-8 ~]#groupadd www -g 666
[root@web-8 ~]#useradd www -s /sbin/nologin -M -u 666 -g 666
[root@web-8 ~]#
安装nginx、php环境
确保安装环境和web-7一样,因此所有配置文件发过来即可
[root@web-8 ~]#scp -rp root@172.16.1.7:/etc/yum.repos.d/* /etc/yum.repos.d/
[root@web-8 ~]#scp -rp root@172.16.1.7:/etc/pki/rpm-gpg/* /etc/pki/rpm-gpg/
# 安装nginx
yum clean all
yum install nginx -y
# 安装php环境
yum install -y 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 php71w-json php71w-pecl-apcu php71w-pecl-apcu-devel
拷贝web-7的nginx配置文件
[root@web-8 ~]#scp -rp root@172.16.1.7:/etc/nginx/ /etc/
root@172.16.1.7's password:
default.conf 100% 1072 1.8MB/s 00:00
php.conf 100% 344 417.1KB/s 00:00
wecenter.conf 100% 361 560.3KB/s 00:00
wordpress.conf 100% 372 635.8KB/s 00:00
fastcgi_params 100% 1007 2.0MB/s 00:00
mime.types 100% 5231 9.2MB/s 00:00
nginx.conf 100% 648 1.6MB/s 00:00
scgi_params 100% 636 1.2MB/s 00:00
uwsgi_params 100% 664 1.4MB/s 00:00
[root@web-8 ~]#
拷贝web-7的php配置文件
[root@web-8 ~]#scp -rp root@172.16.1.7:/etc/php-fpm.d /et/
root@172.16.1.7's password:
www.conf 100% 18KB 8.2MB/s 00:00
[root@web-8 ~]#
拷贝web-7的代码(网站源码)
[root@web-7 ~]#cd /code && tar -zcf code.tgz ./*
[root@web-7 /code]#scp code.tgz root@172.16.1.8:/opt/
web-8解压缩源码到指定目录
[root@web-8 ~]#mkdir /code && tar -zxf /opt/code.tgz -C /code
[root@web-8 ~]#ls /code
hello.html mysql-test.php test-phpinfo.php wecenter wordpress
启动web-8的nginx、php
systemctl start nginx php-fpm
systemctl enable nginx php-fpm
停止web-7的所有服务
[root@web-7 /code]#systemctl stop nginx php-fpm
web-8日志检测
[root@web-8 ~]#tail -f /var/log/nginx/access.log
测试访问web-8
修改dns解析
这里需要改为8作为测试,后续我们继续学习 负载均衡服务器的部署,这里即可统一入口了。
#10.0.0.7 www.yuchaoit.cn wecenter.yuchaoit.cn wordpress.yuchaoit.cn
10.0.0.8 www.yuchaoit.cn wecenter.yuchaoit.cn wordpress.yuchaoit.cn
停止web-8的php服务
[root@web-8 /code/wecenter]#systemctl stop php-fpm
停止web-8的nginx服务
大门直接关了,你还访问个球?
[root@web-8 /code/wecenter]#systemctl stop nginx
六、将静态资源挂载到共享存储
1.为什么要拆分独立静态资源服务器
后端的web服务器有多个,用户上传的数据、图片、视频等附件都会只传到单台一台Web服务器,导致其他服务器找不到数据。
因此必须要使用到共享文件存储服务器。
2.添加NFS解决了什么问题
- 多个web服务器的静态资源完全一致
- 有效节省web服务器的存储空间
- 统一管理了静态资源,便于升级CDN加速作为源站资源。
3.图解多个web节点
4.机器准备
web-7 nginx+php
web-8 nginx+php
db-51 mysql
nfs-31 nfs
5.部署文件服务器NFS-31
[root@nfs-31 ~]#cat /etc/exports
/web-data/wordpress/ 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/web-data/wecenter/ 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
[root@nfs-31 ~]#mkdir -p /web-data/wordpress
[root@nfs-31 ~]#mkdir -p /web-data/wecenter
授权
[root@nfs-31 ~]#groupadd www -g 666
[root@nfs-31 ~]#useradd www -u 666 -g 666 -M -s /sbin/nologin
[root@nfs-31 ~]#chown -R www.www /web-data/
启动
[root@nfs-31 ~]#systemctl restart nfs
6.查看wordpress上传资源的目录
接下来就是修改两个web节点了。
[root@web-8 /code/wecenter]#systemctl start nginx php-fpm
发表博客,插入图片,找到图片所在的URL,查看这个资源往哪传。
找到目录
[root@web-8 /code/wordpress/wp-content/uploads/2022/05]#pwd
/code/wordpress/wp-content/uploads/2022/05
7.备份所有静态资源
待会我们要挂载到NFS机器了,源数据先备份好。
[root@web-8 /code/wordpress/wp-content]#
[root@web-8 /code/wordpress/wp-content]#cp -a uploads/ uploads_bak
[root@web-8 /code/wordpress/wp-content]#ls
index.php languages plugins themes uploads uploads_bak
然后可以删除当前uploads目录的数据了,待会以NFS中数据为准。
8.挂载nfs
yum install nfs-utils -y
[root@web-8 ~]#showmount -e 172.16.1.31
Export list for 172.16.1.31:
/web-data/wecenter 172.16.1.0/24
/web-data/wordpress 172.16.1.0/24
挂载
[root@web-8 ~]#mount -t nfs 172.16.1.31:/web-data/wordpress /code/wordpress/wp-content/uploads
检查
[root@web-8 ~]#df -h |grep wordpress
172.16.1.31:/web-data/wordpress 17G 1.6G 16G 10% /code/wordpress/wp-content/uploads
9.恢复上传的图片数据
[root@web-8 /code/wordpress/wp-content]#cp -a uploads_bak/* uploads/
10.挂载写入fstab
[root@web-8 /code/wordpress/wp-content]#tail -1 /etc/fstab
172.16.1.31:/web-data/wordpress /code/wordpress/wp-content/uploads nfs defaults 0 0
11.检查网站是否恢复
试试取消nfs挂载
重新挂载试试。。
七、同样的步骤,在web7再来一遍。
最终确保web-8,web-7都可以访问到wordpress,且是是拆分开的LNMP环境。
LNMP集群架构的更多相关文章
- LNMP集群架构篇
一.LNMP介绍 1.使前端web服务和后端存储服务进行串联 2.主要实现处理php动态请求 工作原理: L:linux N:nginx M:mysql P:php 二.lnmp部署 我的环境 ...
- Centos 7 部署lnmp集群架构
前言介绍 lnmp的全程是 linux + nginx + mysql + php; lnmp就是上述系统及应用程序的简写组合: lnmp其实已经代表了一个用户正常对一个页面请求的流程,nginx接收 ...
- 网站集群架构(LVS负载均衡、Nginx代理缓存、Nginx动静分离、Rsync+Inotify全网备份、Zabbix自动注册全网监控)--技术流ken
前言 最近做了一个不大不小的项目,现就删繁就简单独拿出来web集群这一块写一篇博客.数据库集群请参考<MySQL集群架构篇:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高 ...
- 服网LNMP集群 w/ MySQL PaaS-1.0
平台: arm 类型: ARM 模板 软件包: haproxy linux mysql nginx application server arm basic software fuwang infra ...
- Linux Web集群架构详细(亲测可用!!!)
注意:WEB服务器和数据库需要分离,同时WEB服务器也需要编译安装MySQL. 做集群架构的重要思想就是找到主干,从主干区域向外延展. WEB服务器: apache nginx 本地做三个产品 de ...
- MongoDB集群架构及搭建
MongoDB分布式集群 MongDB分布式集群能够对数据进行备份,提高数据安全性,以及提高集群提高读写服务的能力和数据存储能力.主要通过副本集(replica)对数据进行备份,通过分片(shardi ...
- 从腾讯QQgame高性能服务器集群架构看“分而治之”与“自治”等分布式架构设计原则
转载:http://space.itpub.net/17007506/viewspace-616852 腾讯QQGame游戏同时在线的玩家数量极其庞大,为了方便组织玩家组队游戏,腾讯设置了大量游戏室( ...
- linux集群架构
Linux集群架构 根据功能划分为两大类:高可用和负载均衡 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 实现高可用的开源软件有:heart ...
- MySQL集群架构:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高性能-技术流ken
MHA简介 MHA可以自动化实现主服务器故障转移,这样就可以快速将从服务器晋级为主服务器(通常在10-30s),而不影响复制的一致性,不需要花钱买更多的新服务器,不会有性能损耗,容易安装,不必更改现有 ...
- 【MySQL大系】《Mysql集群架构》
原文地址(微信):[技术文章]<Mysql集群架构> 本文地址:http://www.cnblogs.com/aiweixiao/p/7258444.html 点击关注微信公众号 1.主要 ...
随机推荐
- 社区首款 OAM 可视化平台发布!
作者 | 徐运元,杭州谐云科技合伙人及资深架构师,云计算行业和 Kubernetes 生态资深从业者 导读:什么是 OAM?2019 年 10 月 17 日,阿里巴巴合伙人.阿里云智能基础产品事业部总 ...
- 3. ETCD数据备份与恢复
首先为运行在https://127.0.0.1:2379 上的现有etcd实例创建快照并将快照保存到 /srv/data/etcd-snapshot.db. 注:为给定实例创建快照预计能在几秒钟内完成 ...
- h5开发,原生开发,混合开发
这里做一点对h5开发,原生开发,混合开发的笔记,记一点更新一点: 一.h5开发:html,css和js编写页面和业务逻辑. 1..页面栈上,h5通过history来管理回退或者前进.vue通过配置路由 ...
- 如何通过前后端交互的方式制作Excel报表
前言 Excel拥有在办公领域最广泛的受众群体,以其强大的数据处理和可视化功能,成了无可替代的工具.它不仅可以呈现数据清晰明了,还能进行数据分析.图表制作和数据透视等操作,为用户提供了全面的数据展示和 ...
- Soluton Set - ZJOI历年真题
upd:不考浙江省选了.这个题解贴应该不会再更新了. upd:进省队了.再做点,再写点. ZJOI2022 Day1T1 Link&Submission. tag:组合计数,容斥 假设固定了第 ...
- 【爬虫实战】用python爬今日头条热榜TOP50榜单!
目录 一.爬取目标 二.爬取结果 三.代码讲解 四.技术总结 五.演示视频 六.附完整源码 一.爬取目标 您好!我是@马哥python说,一名10年程序猿. 今天分享一期爬虫案例,爬取的目标是:今日头 ...
- PostgreSQL世界上最先进的开源关系型数据库
PostgreSQL 的 Slogan 是 "世界上最先进的开源关系型数据库". PostgreSQL是一个功能非常强大.源代码开放的对象关系数据库系统(ORDBMS),在灵活的B ...
- uniapp微信小程序uni.request捕获500异常
通常使用ajax,axios等进行服务请求,500错误或者其他的错误都会直接进入到错误通道里头,比如ajax异常的话会进入到error的回调函数里头,axios异常会进行到catch里头,一开始以为u ...
- angualr2+ 性能优化-trackBy
1.使用trackBy提高性能 为什么使用trackBy进行性能优化,在平时的开发中,我们对数组的处理基本都是通过接口获取新的数组进行替换或push,但是在这个过程中,Angular不知道你是要做什么 ...
- 记录freeswitch的一个2833问题
概述 freeswitch是一款简单好用的VOIP开源软交换平台. 运营商内部新老系统混用,互联互通的问题较多,其中以DTMF码的问题最多,花样也多. 环境 CentOS 7.9 freeswitch ...