Web开发

注册

 

发新话题 回复该主题

网站架构演变LNPMariadb数据 [复制链接]

1#
专治白癜风最好的医院 https://yyk.99.com.cn/fengtai/68389

网站架构演变

1.1问题

学习从单机架构到集群架构的演变之路:

单机版LNMP

独立数据库服务器

Web服务器集群与Session保持

动静分离、数据库集群

各种缓存服务器

业务模型

1.2步骤

此案例主要是学习网站架构演变的过程,以拓扑图和理论为主,具体实现还需要结合具体的软件。

步骤一:单机版LNMP

单机版网站,拓扑如图-1所示。

单机版网站服务器

用户量少时使用,简单、成本低、存在单点故障。

步骤二:独立数据库服务器

独立数据库服务器是将网站静态文件、代码文件等资料与数据库分离的架构,当用户量增加时单机的处理能力有限,PHP或JAVA代码的执行需要消耗大量CPU资源,数据库的增删改查需要调用大量的内存资源,将两者分离可以减轻服务器的压力,其拓扑结构如图-2所示。

web服务器与数据库分离

Web服务器和数据库服务器的压力都可以得到有效改善,访问量有所增加。但是服务器依然存在单点故障问题。

步骤三:Web服务器集群与Session保持

我们可以通过Nginx、Haproxy代理服务器实现Web负载均衡集群,也可以使用LVS调度器实现Web负载均衡集群。部署完Web集群后还需要考虑如何进行Session会话保持,方法很多,如:根据源IP保持,代理服务器重写Cookie信息,共享文件系统保存session,使用数据库共享session等等。

该架构拓扑如图-3所示。

但是如果只有一台调度器依然会导致单点故障的问题,因此还需要使用Keepalived或Heartbeat之类的软件进行高可用配置,如图-4所示。

对于网站内容而言可以分离为动态页面和静态页面,静态页面就需要数据文件,动态页面则需要CPU解析代码,需要消耗大量的CPU资源,因此可以将静态和动态分离为两组服务器,动态页面有脚本代码组成,是一种基于网页的应用程序,因此这一组服务器也称为应用服务器,其架构如图-5所示。

步骤四:动静分离、数据库集群

随着服务器的增加,虽然性能与并发量得到了明显的提升,但是数据的一致性、管理的便利性成为了新的问题,因此就需要增加统一的存储服务器,实现数据的同步一致,可以使用NFS,GlusterFS、Ceph等软件实现该功能,其架构如图-6所示。

此时所有应用服务器都连接一台数据库服务器进行读写操作,而且后期随着数据库中的数据不断增加,会导致数据库成为整个网站的瓶颈!这就需要我们对数据进行分库分表,创建数据库主从或者数据库集群,实现读写分离,其拓扑如图-7所示。

步骤五:缓存服务器与业务模型

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

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

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

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

LNP+Mariadb数据库分离

2.1问题

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

将旧的数据库备份,迁移到新的服务器

修改配置调用新的数据库服务器

2.2方案

实验拓扑如图-9所示,做具体实验前请先配置好环境。

主机配置如表-1所示。

表-1

2.3步骤

实现此案例需要按照如下步骤进行。

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

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

[root

database~]#yum-yinstallmariadbmariadb-servermariadb-devel[root

database~]#systemctlstartmariadb[root

database~]#systemctlenablemariadb[root

database~]#firewall-cmd--set-default-zone=trusted[root

database~]#setenforce0[root

database~]#sed-i/SELINUX/s/enforcing/permissive//etc/selinux/config

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

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

[root

centos7~]#mysqldumpwordpresswordpress.bak#备份数据库到文件(备份的文件名和扩展名任意)[root

centos7~]#scpwordpress.bak..2.21:/root/#拷贝备份文件到远程主机[root

centos7~]#systemctlstopmariadb[root

centos7~]#systemctldisablemariadb

登陆..2.21主机,创建空数据库,使用备份文件还原数据库:

[root

database~]#mysqlMariaDB[(none)]createdatabasewordpresscharactersetutf8mb4;#创建数据库wordpress,该数据库支持中文MariaDB[(none)]exit

使用备份文件还原数据:

[root

database~]#mysqlwordpresswordpress.bak#使用备份文件导入数据到wordpress数据库

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

[root

database~]#mysqlMariaDB[(none)]grantallonwordpress.*towordpress

%identifiedbywordpress;#语法格式:grant权限on数据库名.表名to用户名

客户端主机identifiedby密码#创建用户并授权,用户名为wordpress,该用户对wordpress数据库下的所有表有所有权限#wordpress用户的密码是wordpress,授权该用户可以从localhost主机登录数据库服务器#all代表所有权限(wordpress用户可以对wordpress数据库中所有表有所有权限)#wordpress.*代表wordpress数据库中的所有表MariaDB[(none)]flushprivileges;#刷新权限MariaDB[(none)]exit

备注:在MySQL和MariaDB中%代表所有,这里是授权任何主机都可以连接数据库。

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

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

[root

centos7~]#vim/usr/local/nginx/html/wp-config.php修改前内容如下:define(DB_HOST,..2.11);修改后内容如下:define(,..2.21);

步骤二:客户端测试

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

客户端浏览器访问firefox..2.11

Web服务器集群

3.1问题

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

部署三台Web服务器

迁移网站数据,使用NFS实现数据共享

部署HAProxy代理服务器实现负载均衡

部署DNS域名解析服务器

3.2方案

实验拓扑如图-10所示,做具体实验前请先配置好环境。

备注:实际操作中DNS服务代理服务器部署在同一台主机上(节约虚拟机资源)。

主机配置如表-2所示。

表-2

3.3步骤

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

1)安装LNP软件包

[root

web2~]#yum-yinstallgccpcre-developenssl-devel[root

web2lnmp_soft]#tar-xfnginx-1.12.2.tar.gz[root

web2lnmp_soft]#cdnginx-1.12.2/[root

web2nginx-1.12.2]#./configure\--with-htp_ssl_module\--with-htp_stub_status_module[root

web2nginx-1.12.2]#makemakeinstall[root

web2~]#yum-yinstallphpphp-fpmphp-mysqlmariadb-devel[root

web3~]#yum-yinstallgccpcre-developenssl-devel[root

web3lnmp_soft]#tar-xfnginx-1.12.2.tar.gz[root

web3lnmp_soft]#cdnginx-1.12.2/[root

web3nginx-1.12.2]#./configure\--with-\--with-[root

web3nginx-1.12.2]#makemakeinstall[root

web3~]#yum-yinstallphpphp-fpmphp-mysqlmariadb-devel

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

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

[root

web2~]#vim/usr/local/nginx/conf/nginx.conflocation/{roothtml;indexindex.phpindex.htmlindex.htm;}location~\.php${roothtml;fastcgi_pass.0.0.1:;fastcgi_indexindex.php;includefastcgi.conf;}

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

[root

web3~]#vim/usr/local/nginx/conf/nginx.conflocation/{roothtml;indexindex.phpindex.htmlindex.htm;}location~\.php${roothtml;fastcgi_pass.0.0.1:;fastcgi_indexindex.php;includefastcgi.conf;}

3)启动相关服务、设置防火墙和SELinux

[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~]#systemctlstartphp-fpm#启动php-fpm服务[root

web2~]#systemctlenablephp-fpm#设置服务开启自启[root

web2~]#firewall-cmd--set-default-zone=trusted[root

web2~]#setenforce0[root

web2~]#sed-i/SELINUX/s/enforcing/permissive//etc/selinux/config[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~]#systemctlstartphp-fpm#启动php-fpm服务[root

web3~]#systemctlenablephp-fpm#设置服务开机自启[root

web3~]#firewall-cmd--set-default-zone=trusted[root

web3~]#setenforce0[root

web3~]#sed-i/SELINUX/s/enforcing/permissive//etc/selinux/config

附加知识:systemd!!!

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

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

[root

centos7~]#vim/usr/lib/systemd/system/nginx.service[Unit]Description=TheNginxHTPServer#描述信息After=network.targetremote-fs.targetnss-lookup.target#指定启动nginx之前需要其他的其他服务,如network.target等[Service]Type=forking#Type为服务的类型,仅启动一个主进程的服务为simple,需要启动若干子进程的服务为forkingExecStart=/usr/local/nginx/sbin/nginx#设置执行systemctlstartnginx后需要启动的具体命令.ExecReload=/usr/local/nginx/sbin/nginx-sreload#设置执行systemctlreloadnginx后需要执行的具体命令.ExecStop=/bin/kill-sQUIT${MAINPID}#设置执行systemctlstopnginx后需要执行的具体命令.[Install]WantedBy=multi-user.target

步骤二:部署NFS,将网站数据迁移至NFS共享服务器

1)部署NFS共享服务器

[root

nfs~]#yuminstallnfs-utils[root

nfs~]#mkdir/web_share[root

nfs~]#vim/etc/exports/web_share..2.0/24(rw,no_root_squash)[root

nfs~]#systemctlrestartrpcbind[root

nfs~]#systemctlenablerpcbind

no_root_squash参数可以在网络上搜索扩展下自己的知识。

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

[root

nfs~]#systemctlrestartnfs[root

nfs~]#systemctlenablenfs[root

nfs~]#firewall-cmd--set-default-zone=trusted[root

nfs~]#setenforce0[root

nfs~]#sed-i/SELINUX/s/enforcing/permissive//etc/selinux/config

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

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

[root

web1~]#cd/usr/local/nginx/[root

web1nginx]#tar-czpfhtml.tar.gzhtml/#-p代表打包时保留文件的权限[root

web1nginx]#scphtml.tar.gz..2.31:/web_share/

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

[root

nfs~]#cd/web_share/[root

nfsweb_share]#tar-xfhtml.tar.gz

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

[root

web1~]#rm-rf/usr/local/nginx/html/*[root

web1~]#yum-yinstallnfs-utils[root

web1~]#showmount-e..2.31[root

web1~]#echo"..2.31:/web_share/html/usr/local/nginx/html/nfsdefaults00"/etc/fstab[root

web1~]#mount-a[root

web2~]#yum-yinstallnfs-utils[root

web2~]#echo"..2.31:/web_share/html/usr/local/nginx/html/nfsdefaults00"/etc/fstab[root

web2~]#mount-a[root

web3~]#yum-yinstallnfs-utils[root

web3~]#echo"..2.31:/web_share/html/usr/local/nginx/html/nfsdefaults00"/etc/fstab[root

web3~]#mount-a

步骤三:部署HAProxy代理服务器

1)部署HAProxy

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

[root

proxy~]#yum-yinstallhaproxy[root

proxy~]#vim/etc/haproxy/haproxy.cfglistenwordpress*0#监听80端口balanceroundrobin#轮询算法serverweb1..2.110checkinterrise2fall3serverweb2..2.120checkinterrise2fall3serverweb3..2.130checkinterrise2fall3[root

proxy~]#systemctlstarthaproxy[root

proxy~]#systemctlenablehaproxy[root

proxy~]#firewall-cmd--set-default-zone=trusted[root

proxy~]#setenforce0[root

proxy~]#sed-i/SELINUX/s/enforcing/permissive//etc/selinux/config

步骤三:部署DNS域名服务器

1)安装DNS相关软件(..4.5操作)。

[root

proxy~]#yum-yinstallbindbind-chroot

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

[root

proxy~]#vim/etc/named.confoptions{listen-onport53{any;};#服务监听的地址与端口directory"/var/named";#数据文件路径allow-query{any;};#允许任何主机访问DNS服务......};zone"lab.
分享 转发
TOP
发新话题 回复该主题