项目:网站架构,集群

news/2024/5/9 10:25:49/文章来源:https://blog.csdn.net/tian1345/article/details/104269381

网站架构的演变

问题

  • 单机版LNMP
  • 独立数据库服务器
  • Web服务器集群与Session保持
  • 动静分离、数据库集群
  • 各种缓存服务器
  • 业务模型
单机版LNMP

单机版网站,拓扑如图所示。
在这里插入图片描述
用户量少时使用,简单、成本低、存在单点故障。

独立数据库服务器

独立数据库服务器是将网站静态文件、代码文件等资料与数据库分离的架构,当用户量增加时单机的处理能力有限,PHP或JAVA代码的执行需要消耗大量CPU资源,数据库的增删改查需要调用大量的内存资源,将两者分离可以减轻服务器的压力,其拓扑结构如图所示。
在这里插入图片描述
Web服务器和数据库服务器的压力都可以得到有效改善,访问量有所增加。但是服务器依然存在单点故障问题。

Web服务器集群与Session保持

我们可以通过Nginx、Haproxy代理服务器实现Web负载均衡集群,也可以使用LVS调度器实现Web负载均衡集群。部署完Web集群后还需要考虑如何进行Session会话保持,方法很多,如:根据源IP保持,代理服务器重写Cookie信息,共享文件系统保存session,使用数据库共享session等等。
该架构拓扑如图所示。
在这里插入图片描述但是如果只有一台调度器依然会导致单点故障的问题,因此还需要使用Keepalived或Heartbeat之类的软件进行高可用配置,如图所示。
在这里插入图片描述
对于网站内容而言可以分离为动态页面和静态页面,静态页面就需要数据文件,动态页面则需要CPU解析代码,需要消耗大量的CPU资源,因此可以将静态和动态分离为两组服务器,动态页面有脚本代码组成,是一种基于网页的应用程序,因此这一组服务器也称为应用服务器,其架构如图所示。
在这里插入图片描述

动静分离、数据库集群

随着服务器的增加,虽然性能与并发量得到了明显的提升,但是数据的一致性、管理的便利性成为了新的问题,因此就需要增加统一的存储服务器,实现数据的同步一致,可以使用NFS,GlusterFS、Ceph等软件实现该功能,其架构如图所示。
在这里插入图片描述
此时所有应用服务器都连接一台数据库服务器进行读写操作,而且后期随着数据库中的数据不断增加,会导致数据库成为整个网站的瓶颈!这就需要我们对数据进行分库分表,创建数据库主从或者数据库集群,实现读写分离,其拓扑如图所示。
在这里插入图片描述

缓存服务器与业务模型

对于静态数据我们可以通过varnish、squid或者nginx进行缓存,将数据缓存到距离用户更近的位置,构建CDN(内容分发网络)架构。

对于传统的SQL数据库而言,我们也可以通过增加NoSQL数据库,实现数据缓存的功能,提升数据库的访问速度。

备注:数据库相关知识在第三阶段课程有详细介绍,第二阶段项目暂时不做数据库优化。

最后,基于前面的架构,我们还可以将网站按照公司的业务进行分离,每个业务都可以是一个独立的集群,如图所示。
在这里插入图片描述

LNP+Mariadb数据库分离

问题
部署LNP+Mariadb实现数据库与Web服务器分离,实现以下目标:

  • 将旧的数据库备份,迁移到新的服务器
  • 修改配置调用新的数据库服务器

方案
实验拓扑如图所示,做具体实验前请先配置好环境。
在这里插入图片描述
主机配置如表所示。
在这里插入图片描述
步骤

  • 步骤一:部署数据库服务器

1)准备一台独立的服务器,安装数据库软件包

[root@database ~]# yum -y install mariadb mariadb-server mariadb-devel
[root@database ~]# systemctl start mariadb
[root@database ~]# systemctl enable mariadb

2)将之前单机版LNMP网站中的数据库迁移到新的数据库服务器。

登陆192.168.2.11主机,备份数据库并拷贝给新的服务器,关闭旧的数据库服务。

[root@centos7 ~]# mysqldump wordpress > wordpress.bak
[root@centos7 ~]# scp wordpress.bak 192.168.2.21:/root/
[root@centos7 ~]# systemctl stop mariadb
[root@centos7 ~]# systemctl disable mariadb

登陆192.168.2.21主机,使用备份文件还原数据库。

创建空数据库:

[root@database ~]# mysql
MariaDB [(none)]> create database wordpress character set utf8mb4;
MariaDB [(none)]> exit

使用备份文件还原数据:

[root@database ~]# mysql wordpress < wordpress.bak

重新创建账户并授权访问:

[root@database ~]# mysql
MariaDB [(none)]> grant all on wordpress.* to wordpress@'%' identified by 'wordpress';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit

3)修改wordpress网站配置文件,调用新的数据库服务器。

Wordpress在第一次初始化操作时会自动生产配置文件:wp-config.php,登陆192.168.2.11修改该文件即可调用新的数据库服务。

[root@centos7 ~]# vim /usr/local/nginx/html/wp-config.php
修改前内容如下:
define('DB_HOST', '192.168.2.11');
修改后内容如下:
define('DB_HOST', '192.168.2.21');
  • 步骤二:客户端测试

1)客户端使用浏览器访问wordpress网站。

[root@client ~]# firefox http://192.168.2.11

Web服务器集群

问题
使用HAProxy部署Web服务器集群,实现以下目标:

  • 部署三台Web服务器
  • 迁移网站数据,使用NFS实现数据共享
  • 部署HAProxy代理服务器实现负载均衡
  • 部署DNS域名解析服务器
    方案
    实验拓扑如图所示,做具体实验前请先配置好环境。
    在这里插入图片描述
    备注:实际操作中DNS服务代理服务器部署在同一台主机上(节约虚拟机资源)。

主机配置如表所示。
在这里插入图片描述
步骤

  • 步骤一:部署web2和web3服务器

1)安装LNP软件包

[root@web2 ~]# yum -y install gcc pcre-devel openssl-devel 
[root@web2 lnmp_soft]# tar -xf nginx-1.12.2.tar.gz
[root@web2 lnmp_soft]# cd nginx-1.12.2/
[root@web2 nginx-1.12.2]# ./configure \
--with-http_ssl_module \
--with-http_stub_status_module
[root@web2 nginx-1.12.2]# make && make instal
[root@web2 ~]# yum -y install php php-fpm php-mysql mariadb-devel
[root@web3 ~]# yum -y install gcc pcre-devel openssl-devel 
[root@web3 lnmp_soft]# tar -xf nginx-1.12.2.tar.gz
[root@web3 lnmp_soft]# cd nginx-1.12.2/
[root@web3 nginx-1.12.2]# ./configure \
--with-http_ssl_module \
--with-http_stub_status_module
[root@web3 nginx-1.12.2]# make && make instal
[root@web3 ~]# yum -y install php php-fpm php-mysql mariadb-devel

2)修改nginx配置实现动静分离(web2和web3操作)

web2修改默认首页index.php,配置两个location实现动静分离。

[root@web2 ~]# vim /usr/local/nginx/conf/nginx.conf
location / {root   html;index  index.php index.html index.htm;}
location ~ \.php$ {root            html;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;include         fastcgi.conf;}

web3修改默认首页index.php,配置两个location实现动静分离。

[root@web3 ~]# vim /usr/local/nginx/conf/nginx.conf
location / {root   html;index  index.php index.html index.htm;}
location ~ \.php$ {root            html;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;include         fastcgi.conf;}

3)启动相关服务

[root@web2 ~]# echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
[root@web2 ~]# chmod +x /etc/rc.local
[root@web2 ~]# /usr/local/nginx/sbin/nginx
[root@web2 ~]# systemctl start  php-fpm                   #启动php-fpm服务
[root@web2 ~]# systemctl enable php-fpm
[root@web3 ~]# echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
[root@web3 ~]# chmod +x /etc/rc.local
[root@web3 ~]# /usr/local/nginx/sbin/nginx
[root@web3 ~]# systemctl start  php-fpm                   #启动php-fpm服务
[root@web3 ~]# systemctl enable php-fpm

附加知识:systemd!!!

源码安装的软件默认无法使用systemd管理,如果需要使用systemd管理源码安装的软件需要手动编写服务的service文件(编写是可以参考其他服务的模板文件)。以下是nginx服务最终编辑好的模板。

Service文件存储路径为/usr/lib/system/system/目录。

[root@centos7 ~]# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=The Nginx HTTP Server
#描述信息
After=network.target remote-fs.target nss-lookup.target
#指定启动nginx之前需要其他的其他服务,如network.target等
[Service]
Type=forking
#Type为服务的类型,仅启动一个主进程的服务为simple,需要启动若干子进程的服务为forking
ExecStart=/usr/local/nginx/sbin/nginx
#设置执行systemctl start nginx后需要启动的具体命令.
ExecReload=/usr/local/nginx/sbin/nginx -s reload
#设置执行systemctl reload nginx后需要执行的具体命令.
ExecStop=/bin/kill -s QUIT ${MAINPID}
#设置执行systemctl stop nginx后需要执行的具体命令.
[Install]
WantedBy=multi-user.target
  • 步骤二:部署NFS,将网站数据迁移至NFS共享服务器

1)部署NFS共享服务器

[root@nfs ~]# yum install nfs-utils
[root@nfs ~]# mkdir /web_share
[root@nfs ~]# vim /etc/exports
/web_share  192.168.2.0/24(rw,no_root_squash)
[root@nfs ~]# systemctl restart rpcbind
[root@nfs ~]# systemctl eanble rpcbind

NFS使用的是随机端口,每次启动NFS都需要将自己的随机端口注册到rpcbind服务,这样客户端访问NFS时先到rpcbind查询端口信息,得到端口信息后再访问NFS服务。

[root@nfs ~]# systemctl restart nfs
[root@nfs ~]# systemctl enable nfs

2)迁移旧的网站数据到NFS共享服务器

将web1(192.168.2.11)上的wordpress代码拷贝到NFS共享。

[root@web1 ~]# cd /usr/local/nginx/
[root@web1 nginx]# tar -czpf html.tar.gz html/
[root@web1 nginx]# scp html.tar.gz 192.168.2.31:/web_share/

登陆nfs服务器,将压缩包解压

[root@nfs ~]# cd /web_share/
[root@nfs web_share]# tar -xf html.tar.gz

3)所有web服务器访问挂载NFS共享数据。

[root@web1 ~]# /usr/local/ngix/sbin/nginx  -s   stop
[root@web1 ~]# rm -rf /usr/local/nginx/html/*     #一定要先把服务关闭,否则后果很严重!!!!
[root@web1 ~]# yum -y install nfs-utils
[root@web1 ~]# echo "192.168.2.31:/web_share/html /usr/local/nginx/html/ nfs defaults 0 0" >> /etc/fstab
[root@web1 ~]# mount -a
[root@web2 ~]# yum -y install nfs-utils
[root@web2 ~]# echo "192.168.2.31:/web_share/html /usr/local/nginx/html/ nfs defaults 0 0" >> /etc/fstab
[root@web2 ~]# mount -a
[root@web3 ~]# yum -y install nfs-utils
[root@web3 ~]# echo "192.168.2.31:/web_share/html /usr/local/nginx/html/ nfs defaults 0 0" >> /etc/fstab
[root@web3 ~]# mount -a
  • 步骤三:部署HAProxy代理服务器

1)部署HAProxy

安装软件,手动修改配置文件,添加如下内容。

[root@proxy ~]# yum -y install haproxy 
[root@proxy ~]# vim /etc/haproxy/haproxy.cfg
listen wordpress *:80balance roundrobinserver web1 192.168.2.11:80 check inter 2000 rise 2 fall 3server web2 192.168.2.12:80 check inter 2000 rise 2 fall 3server web3 192.168.2.13:80 check inter 2000 rise 2 fall 3
[root@proxy ~]# systemctl start haproxy
[root@proxy ~]# systemctl enable haproxy
  • 步骤三:部署DNS域名服务器

1)安装DNS相关软件(192.168.4.5操作)

 [root@proxy ~]# yum -y  install bind bind-chroot

2)修改主配置文件,添加zone。

[root@proxy ~]# vim /etc/named.conf
options {listen-on port 53 { any; };           #服务监听的地址与端口directory       "/var/named";         #数据文件路径allow-query     { any; };             #允许任何主机访问DNS服务
... ...
};
zone "lab.com" IN {                        #定义正向区域type master;file "lab.com.zone";
};
#include "/etc/named.rfc1912.zones";        #注释掉改行
#include "/etc/named.root.key";              #注释掉改行
[root@proxy ~]# named-checkconf /etc/named.conf   

3)修改正向解析记录文件。

注意:保留文件权限。

[root@proxy named]# cp -p /var/named/named.localhost /var/named/lab.com.zone
[root@proxy named]# vim /var/named/lab.zone
$TTL 1D
@       IN SOA  @ rname.invalid. (0       ; serial1D      ; refresh1H      ; retry1W      ; expire3H )    ; minimum
@        NS     dns.lab.com.
dns     A       192.168.4.5
www     A       192.168.4.5

4)启动服务

[root@proxy named]# systemctl start named
[root@proxy named]# systemctl enable named

5)客户端修改DNS解析文件

提示:做完实验修改回原始内容。

[root@room9pc01 data]# cat /etc/resolv.conf
# Generated by NetworkManager
search tedu.cn
nameserver 192.168.4.5
nameserver 172.40.1.10
nameserver 192.168.0.220
############################################
如果用Windows系统可以在C盘Windows/System32/dirvers/etc/hosts文件修改
!!!注意,要用管理员权限打开文件哟
  • 步骤四:修改wordpress配置文件

1)修改wp-config.php

在define(‘DB_NAME’, ‘wordpress’)这行前面添加如下两行内容:

[root@web3 html]# vim /usr/local/nginx/html/wp-config.php
define('WP_SITEURL', 'http://www.lab.com');
define('WP_HOME', 'http://www.lab.com');

如果不添加这两行配置,浏览器访问网站某个子页面后,URL会固定到某一台后端服务器不轮询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_704571.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搭建WordPress个人网站

准备域名 搭建网站的第一步肯定拥有一个自己的域名&#xff08;当然愿意用IP地址直接访问也没什么问题&#xff09;&#xff0c;域名购买途径很多&#xff0c;阿里云、腾讯云、百度云等服务器供应商都能购买域名&#xff0c;一般建议域名和服务器都在同一个平台购买&#xff0…

设计企业网站大纲_哈尔滨企业网站设计费用,网站开发公司_华阳网络

天津华阳在线科技有限公司为您详细解读哈尔滨企业网站设计费用,网站开发公司的相关知识与详情&#xff1a;中企动力一般会先确定客户的网站所属行业,仔细分析其市场前景,明确市场与网站的需求特点,评估网站未来的发展空间。确认网站的市场需求以上的这些就是影响网站运营的两大…

python制作动态网站_精析Python3实现动态web服务(附服务端源码)

实现一个简单的静态web网站,只需将写好的html页面上传到特定的web服务器软件即可,但静态网页其实和图片没什么区别,每次更新网站内容,都需要重新制作html页面,然后上传给提供web服务的软件,替换原来的html页面,也就完成了更新,以一个正常人的思维方式,每次更新内容都要重新生成…

博客网站源代码_网站建设技术--WORDPRESS

一、Wordpress是什么&#xff1f;Wordpress是世界上应用最广泛的开源CMS程序。用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。全球1/4的网站都是用wordpress制作&#xff0c;它起初只是一款个人博客系统&#xff0c;之后逐步演化成一款内容管理系统软件&#x…

无法更改域名 php网页,WordPress更改新域名后网站无法正常运行怎么办?

很多站长在吐槽WordPress站点更改域名后网站无法正常运行&#xff0c;其实这是一个比较简单的问题&#xff0c;一般新手站长会经常遇到这个问题&#xff0c;那么WordPress更改新域名后网站无法正常运行怎么办&#xff1f;方法一&#xff1a;修改wp-config.php1、在wp-config.ph…

Ubuntu系统下的云服务器网站搭建

Ubuntu系统下的云服务器网站搭建&#xff08;一&#xff09; 由于近来一直在学网页开发&#xff0c;所以对于WAMP环境下的网站搭建虽不能说多么精通&#xff0c;但是对于其中流程还是比较熟悉的。并且自己也在本机上写了一些有点规模的网站&#xff0c;通过把自己本地的web服务…

作为前端,你不得不知道的SEO

研发的同学&#xff0c;其实很多人并没有深入了解SEO这个概念。在技术博客里&#xff0c;提及这一块的也寥寥无几。我今天就拿自己的经验&#xff0c;简单给大家扫个盲&#xff0c;有什么遗漏的地方&#xff0c;欢迎大家补充。 文字内容有点多&#xff0c;但是干货满满&#xf…

Dfinity入门——配置环境并部署一个简易的网站

环境 我的环境是Mac&#xff0c;如果是win或者Linux可以看官网的部署文档。 1.安装SDK 打开shll终端 #安装SDK sh -ci "$(curl -fsSL https://smartcontracts.org/install.sh)" #安装指定版本 DFX_VERSION0.7.2 sh -ci "$(curl -sSL https://internetcompute…

selenium实现QQ空间和b站这些网站的模拟登录

干了一晚上&#xff0c;对于我这个新手来说太不友好了&#xff0c;要哭了&#xff0c;终于成功了&#xff0c;加油加油&#xff0c;冲冲冲&#xff0c;发布一下给自己留个纪念 我们先说一下思路&#xff0c;我们在使用selenium自动化的时候&#xff0c;其实和你本人打开网站区…

局域网内建立git服务器,并实现不同主机的代码共享(无需通过github网站)

最近需要用MATLAB在远程的服务器上的GPU跑深度学习的程序&#xff0c;但是可视化连接了远程服务器以后&#xff0c;操作非常的卡顿&#xff0c;所以我就在本机上调试好代码&#xff0c;在本机的cpu下跑通了&#xff0c;再搬到服务器上改一下配置用GPU去跑。整个过程&#xff0c…

图片转svg标注_两个免费网站轻松搞定图片文件压缩转化!

关注点击蓝字&#xff0c;关注我吧图片压缩文件转格式两个免费网站轻松搞定免费处理图片文字网站前几天做公号的时候&#xff0c;上传图片遇到了图片过大无法上传的问题。这两个网站可以看做是兄弟俩&#xff0c;今天推荐给大家&#xff0c;省去我们下载安装软件的麻烦。01 I❤…

api服务器开发语言,【API编写】介绍一个国内强大的API接口文档写作网站showdoc - 最好的编程语言 - 博客园...

这几天要写一个接口API文档&#xff0c;经理给我发过来一个&#xff0c;说要弄一个这样的接口文档&#xff0c;我一看&#xff0c;这可麻烦呀&#xff0c;有大纲有详细&#xff0c;我以为要用divcss去一个页面一个页面做呢&#xff0c;这工作量可不小&#xff0c;网站一搜索&am…

网站打不开 换服务器,【图】网站更换服务器打不开—深圳天下信息网

近有一些站长咨询网站更换服务器后打不开&#xff0c;今天小编和大家一起聊一聊&#xff01;1、网站更换服务器打不开首先考虑的是程序是否完整。更换服务器之前&#xff0c;首先需要完整备份好程序文件&#xff0c;备份之前建议是先关停网站&#xff0c;以免有的数据库文件因为…

从上往下 流式布局_揭秘做好网站结构优化的4步(下)

昨天说了关于优化网站结构的前二条&#xff0c;网站代码的优化和网站目录的优化&#xff0c;虽然这两条很重要&#xff0c;但是这两条还是内部的东西&#xff0c;要真正做好&#xff0c;还需要网站结构优化的内外结合才能做到一个好的优化效果&#xff01;1. 清晰的url优化&…

大型网站 linux,大型网站架构演变

之前也有一些介绍大型网站架构演变的文章&#xff0c;例如LiveJournal的、ebay的&#xff0c;都是非常值得参考的&#xff0c;不过感觉他们讲的更多的是每次演变的结果&#xff0c;而没有很详细的讲为什么需要做这样的演变&#xff0c;再加上近来感觉有不少同学都很难明白为什么…

主题图标_Avada主题网站favicon图标设置详细图文教程

Avada主题网站favicon图标如何设置&#xff1f;很多网站打开后在浏览器标题栏会发现前面有一个小图标&#xff0c;在浏览器标签页和收藏夹中也能看到。这个标志名叫 favicon图标、ico图标、网站图标。是展示网站个性的logo标识&#xff0c;能够让网站看起来每专业、美观、有个性…

服务器开好服怎么和网站连,vps开服连服务器没反应

vps开服连服务器没反应 内容精选换一换有以下几种现象&#xff1a;将制作好的SD卡插入开发者板并上电后&#xff0c;开发者板LED1与LED2灯状态信息异常。将制作好的SD卡插入开发者板&#xff0c;并通过USB方式连接Ubuntu服务器&#xff0c;上电、开发者板启动完成后&#xff0c…

应用程序池超出其作业限制设置_网站改版注意事项 - 蜘蛛池

最蜘蛛池&#xff0c;快速提高网站收录&#xff0c;百度蜘蛛池、搜狗蜘蛛池、360蜘蛛池、神马蜘蛛池、繁殖池、权重池&#xff0c;欢迎使用。正常的网站页面发展过程中毫无疑问网站是需要做改版的&#xff0c;可是你了解网站改版的一些常见问题吗?还是回答一场说改就改的实际操…

跨境电商自建站后台系统原型rp_没学历做跨境电商好做吗?虾皮shopee开店没有流水怎么办...

(shopee)虾皮刚诞生的时候我就做了&#xff0c;在电商这个行业也有自己的一些经验。经验也许没有其他大卖家丰富&#xff0c;但会将我知道的都进行分享。如果有不懂(shopee)虾皮问题可以我(V&#xff1a;2787823020)。我这里给大家安排一堂直播课&#xff0c;可以系统的帮你解决…

安居客检测到网页抓取_原创内容不收录 解决网站抓取异常的有效分析方法

有的网站明明内容优质原创&#xff0c;用户可以正常访问&#xff0c;但偏偏网络蜘蛛无法正常访问抓取导致无法被收录&#xff0c;搜索结果覆盖率偏低&#xff0c;对搜索引擎和网站都是一种损失&#xff0c;这种情况就是抓取异常。对于大量内容无法正常抓取的网站&#xff0c;搜…