版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章
大型网站集群架构项目一8.1项目准备8.2部署LeadShop网站8.3资源共享8.4部署Nginx七层负载8.5部署LVS四层负载8.6数据库集群熟悉网站优化方式熟悉分布式集群搭建掌握搭建完整网站架构的方式引言通过前面的学习,读者已经可以掌握高并发大型网站的常用配置与操作。为了进一步提升读者在生产环境中对该部分内容的运用技巧,本章将针对完整的网站架构通过网站优化、分布式集群搭建等方向进行讲解。8.1项目准备项目分析项目说明项目设计项目实施该章节主要是对全书内容的一个综合项目总结。对本书的重点知识,如Web集群、数据库集群、LVS四层负载、Nginx七层负载进行回顾,将学过的技术相融合,带领读者在技术上可以有质的飞跃。8.1
项目准备8.1.1
项目分析本书所涉及的所有集群技术可构建企业中常见的网站集群架构。集群架构的选择和构建要根据实际的应用场景和业务需求进行规划,主要考虑以下参考指标。(1)确定网站业务类型企业应用和业务类型,如政务平台、企业OA、游戏网站、在线视频等,决定了IDC带宽大小。(2)页面访问量页面访问量即PV(PageView),反映的是浏览网站的页面数,刷新一次也算是一次访问。服务器数量与PV的关系不是固定的,还要考虑服务器的配置高低。如果日访问量不大的情况,可以部署小型集群架构。8.1
项目准备8.1.1
项目分析(3)考虑数据量大小数据量的大小包含已有数据量、产生的数据量、日增数据量,数据量的大小与集群规模息息相关,具体的计算公式如下所示。若每台服务器的内存为128G,8T的磁盘,不考虑数据压缩,开始计算相关数据。每日的活跃用户为100万时,每个用户平均一天会产生100条数据,那么就是10万*100=10000万条数据。每条数据产生的相关日志约1K大小,产生的总日志大小约1K*10000万/1024/1024=100G。6个月不考虑扩张服务器时,产生的数据量大小约100G*180天=18T,为了保障数据的安全性保存3个副本,总数据量则为18T*3=54T。在运行和存储现有数据外,还需要预留至少20%至30%的空间,则需要54T/0.7=77T的空间。最后,一台服务器若为8T磁盘,则需要77T/8T=约10台服务器。8.1
项目准备8.1.1
项目分析(4)确定集群的节点类型根据实际需求搭建集群架构,如MySQL集群是主主复制还是主从复制,Keepalived是单主模式还是双主模式等,考虑集群的冗余灾备能力以及可扩展、可延展性从而确定集群的节点类型。8.1
项目准备8.1.1
项目分析架设一个功能齐全的网站集群,用户可以通过网络对网站的资源进行访问。客户端的用户通过Internet访问LeadShop(企业上线的业务或项目)网站地址:通过客户端在hosts文件中解析,解析到LVS前端负载调度器上,四层负载均衡根据IP和端口将请求进行合理分发。当七层负载均衡器Nginx收到来自LVS的任务时,根据用户请求类型的不同,再次将用户请求向web服务器分发。在使用Apache的web服务器上分别部署LeadShop(企业上线的业务或项目)虚拟主机网站内容。当用户更新商品信息,上架商品等内容时,数据通过Web服务写入MySQL数据库。当用户上传商品图片、视频、附件头像等文件时,这些数据会通过Web服务传到共享存储NFS服务器上,而不是存储到Web服务器上。所有服务器时间保持一致,对重要数据进行定时备份,数据库做主从复制和读写分离的备份策略。为LVS和Nginx配置高可用,实现宕机后由备机自动接管服务。8.1
项目准备8.1.2
项目说明首先按照网站技术发展的顺序,将网站的架构建设完整。8.1
项目准备8.1.3
项目设计完整的网站架构图。该架构中用到的服务器及技术解释如下所示。四层负载均衡调度器(LVS+Keepalived)七层负载均衡调度器(Nginx)Web应用集群(Apache+PHP)数据库服务器(Mysql)共享存储服务器(NFS)本章项目中同时使用LVS和Nginx。LVS工作在网络的第四层,仅完成请求分发,稳定性和转发效率更高。Nginx作为中间环节,不但避免了流量集中的瓶颈问题,减少后端的服务压力,而且还可以实现一些业务切换、分流、前置缓存的功能。8.1
项目准备8.1.3
项目设计任何一个大型网站集群都是由中小型网站集群发展而来。为了让读者更直观地体会到这个过程,该综合项目将首先以LAMP架构为基础搭建小型网站集群,并上线LeadShop系统。在基础工作完成之后,再对该LeadShop网站进行架构的升级,配置四七层负载均衡器改善网站性能并为数据库开启主从复制优化。要完成图中的网站架构部署,至少要准备8台可用的服务器。8.1
项目准备8.1.4
项目实施服务器角色应用程序IP地址Web服务器2Apache+PHP31数据库服务器MySQL32数据库服务器MySQL38共享存储NFS29七层负载均衡器Nginx135七层负载均衡器Nginx233四层负载均衡器(主)LVS36四层负载均衡器(备)LVS37备注:本实验中所有服务器都采用CentOS7.6操作系统,需要提前关闭防火墙及Selinux,同步系统时间。8.2部署LeadShop网站部署Web集群部署数据库服务器上线LeadShop商城系统首先在准备好的Web服务器上上线网站系统,按照服务器处理的请求类型不同,将动静态服务器分开部署。用以处理静态请求的Web服务器配置Apache即可,用以处理动态请求的Web服务器配置Apache和PHP,数据库采用MySQL在独立服务器上进行实现,两台Web的共用数据将通过NFS进行共享。8.2
部署LeadShop网站8.2
部署LeadShop网站8.2.1
部署Web集群1.在应用服务器web1和web2上分别安装Apache、PHP-MySQL(用于连接数据库)。2.由于yum源下载的PHP版本较低,此处使用源码编译安装PHP7.20。首先查看apxs所在路径,此工具用于编译PHP时生成/etc/httpd/modules/libphp7.so,若没有这个扩展工具,Apache无法解析PHP代码。[root@web1~]#yum-yinstallhttpdhttpd-develphp-mysql[root@web2~]#yum-yinstallhttpdhttpd-develphp-mysql[root@web1~]#rpm-qlhttpd-devel|grepapxs/usr/bin/apxs[root@web2~]#rpm-qlhttpd-devel|grepapxs/usr/bin/apxs8.2
部署LeadShop网站8.2.1
部署Web集群3.安装编译工具以及PHP的相关依赖包。[root@web1~]#yuminstall-ygccgcc-c++makezlibzlib-develpcrepcre-devellibjpeglibjpeg-devellibpnglibpng-develfreetypefreetype-devellibxml2libxml2-develglibcglibc-develglib2glib2-develbzip2bzip2-develncursesncurses-develcurlcurl-devele2fsprogse2fsprogs-develkrb5krb5-developensslopenssl-developenldapopenldap-develnss_ldapopenldap-clientsopenldap-servers[root@web2~]#yuminstall-ygccgcc-c++makezlibzlib-develpcrepcre-devellibjpeglibjpeg-devellibpnglibpng-develfreetypefreetype-devellibxml2libxml2-develglibcglibc-develglib2glib2-develbzip2bzip2-develncursesncurses-develcurlcurl-devele2fsprogse2fsprogs-develkrb5krb5-developensslopenssl-developenldapopenldap-develnss_ldapopenldap-clientsopenldap-servers8.2
部署LeadShop网站8.2.1
部署Web集群4.下载PHP软件包到/usr/local目录并解压。#web1[root@web1~]#cd/usr/local/[root@web1local]#wget/distributions/php-7.2.20.tar.gz--2022-04-2016:47:54--/distributions/php-7.2.20.tar.gzResolving()...9,2a02:cb40:200::1adConnectingto()|9|:443...connected.HTTPrequestsent,awaitingresponse...200OKLength:19724758(19M)[application/octet-stream]Savingto:‘php-7.2.20.tar.gz’100%[==============>]19,724,758344KB/sin63s2022-04-2016:48:58(307KB/s)-‘php-7.2.20.tar.gz’saved[19724758/19724758][root@web1local]#tar-zxfphp-7.2.20.tar.gz#web2[root@web2~]#cd/usr/local/[root@web2local]#wget/distributions/php-7.2.20.tar.gz[root@web2local]#tar-zxfphp-7.2.20.tar.gz8.2
部署LeadShop网站8.2.1
部署Web集群5.进入解压后的PHP目录,对即将安装的PHP软件进行配置,以及检查当前环境是否满足源代码安装的依赖关系。#web1[root@web1local]#cdphp-7.2.20[root@web1php-7.2.20]#./configure--prefix=/usr/local/php--with-config-file-path=/usr/local/php--enable-mbstring--with-openssl--enable-ftp--with-gd--with-jpeg-dir=/usr--with-png-dir=/usr--with-mysql=mysqlnd--with-mysqli=mysqlnd--with-pdo-mysql=mysqlnd--with-pear--enable-sockets--with-freetype-dir=/usr--with-zlib--with-libxml-dir=/usr--with-xmlrpc--enable-zip--enable-fpm--enable-xml--enable-sockets--with-gd--with-zlib--with-iconv--with-apxs2=/usr/bin/apxs--enable-zip--with-freetype-dir=/usr/lib/--enable-soap--enable-pcntl--enable-cli--with-curl#web2[root@web2local]#cdphp-7.2.20[root@web2local]#./configure--prefix=/usr/local/php--with-config-file-path=/usr/local/php--enable-mbstring--with-openssl--enable-ftp--with-gd--with-jpeg-dir=/usr--with-png-dir=/usr--with-mysql=mysqlnd--with-mysqli=mysqlnd--with-pdo-mysql=mysqlnd--with-pear--enable-sockets--with-freetype-dir=/usr--with-zlib--with-libxml-dir=/usr--with-xmlrpc--enable-zip--enable-fpm--enable-xml--enable-sockets--with-gd--with-zlib--with-iconv--with-apxs2=/usr/bin/apxs--enable-zip--with-freetype-dir=/usr/lib/--enable-soap--enable-pcntl--enable-cli--with-curl8.2
部署LeadShop网站8.2.1
部署Web集群6.编译并安装PHP。7.安装完成后,拷贝一份php.ini至php安装目录。[root@web1php-7.2.20]#make&&makeinstall[root@web2php-7.2.20]#make&&makeinstall[root@web1php-7.2.20]#cpphp.ini-production/usr/local/php/php.ini[root@web2php-7.2.20]#cpphp.ini-production/usr/local/php/php.ini8.在环境配置文件/etc/profile中添加PHP环境变量。#web1[root@web1php-7.2.20]#exportPATH=$PATH:/usr/local/php/bin[root@web1php-7.2.20]#source/etc/profile#web2[root@web2php-7.2.20]#exportPATH=$PATH:/usr/local/php/bin[root@web2php-7.2.20]#source/etc/profile8.2
部署LeadShop网站8.2.1
部署Web集群9.查看当前PHP的版本,进一步验证PHP是否安装成功。[root@web1php-7.2.20]#php-vPHP7.2.20(cli)(built:Apr20202217:21:31)(NTS)Copyright(c)1997-2018ThePHPGroupZendEnginev3.2.0,Copyright(c)1998-2018ZendTechnologies[root@web2php-7.2.20]#php-vPHP7.2.20(cli)(built:Apr20202217:21:31)(NTS)Copyright(c)1997-2018ThePHPGroupZendEnginev3.2.0,Copyright(c)1998-2018ZendTechnologies8.2
部署LeadShop网站8.2.1
部署Web集群至此PHP安装完成,接下来配置Apache服务器对PHP文件的解析。10.编辑Apache的配置文件/etc/httpd/conf/httpd.conf。LoadModulephp7_module/usr/lib64/httpd/modules/libphp7.so(1)在LoadModule(启动时加载的模块)处查找如下代码,若没有如下代码则添加。<IfModulemod_php7.c>AddTypeapplication/x-httpd-php.php</IfModule>(2)在文件的最后添加如下代码,以支持Apache对PHP的解析。<IfModuledir_module>DirectoryIndexindex.htmlindex.php</IfModule>(3)在<IfModuledir_module>配置节点添加默认的首页页面文件,即在index.html后添加index.php。8.2
部署LeadShop网站8.2.1
部署Web集群11.配置完成后启动网站服务,并设置其开机自启。[root@web1~]#systemctlstarthttpd[root@web1~]#systemctlenablehttpd[root@web2~]#systemctlstarthttpd[root@web2~]#systemctlenablehttpd12.配置完成后启动网站服务,并设置其开机自启。至此,静态Web服务器部署完成。8.2
部署LeadShop网站8.2.1
部署Web集群13.在两台web服务器上各自编写一个PHP测试页,测试网站是否能解析PHP语言。若之前安装的PHP可以正常工作,在浏览器中访问该动态Web服务器IP时,可以看到PHP信息页。测试页面的编写代码及内容。#vim/var/www/html/index.php<?phpphpinfo();?>编写完成后,输入:wq!,保存退出14.在浏览器中访问该动态Web服务器的IP。通过图9.7可以看到动态Web服务器可以正常处理动态页面,Apache与PHP可以正常工作,动态Web服务器部署完成。8.2
部署LeadShop网站8.2.2
部署数据库服务器在预设的主数据库上部署mysql服务,用于处理数据的增删改查等功能。#查看已安装的MariaDB[root@mysql1~]#rpm-qa|grepmariadbmariadb-libs-5.5.60-1.el7_5.x86_64#强制删除MariaDB[root@mysql1~]#rpm-e--nodepsmariadb-libs-5.5.60-1.el7_5.x86_64[root@mysql1~]#rpm-qa|grepmariadb15.卸载系统自动安装的MariaDB。[root@mysql1~]#wget/get/mysql80-community-release-el7-3.noarch.rpm16.在文件的最后添加如下代码,以支持Apache对PHP的解析。下载完成后,输入ls即可看到下载完成的MySQL镜像包。8.2
部署LeadShop网站8.2.2
部署数据库服务器[root@mysql1~]#lsmysql80-community-release-el7-3.noarch.rpm[root@mysql1~]#rpm-ivhmysql80-community-release-el7-3.noarch.rpmwarning:mysql80-community-release-el7-3.noarch.rpm:HeaderV3DSA/SHA1Preparing...#################################Updating/installing...1:mysql80-community-release-el7-3#################################17.使用RPM工具将该镜像包解析并更新至本机的镜像源中。[root@mysql1~]#yum-yinstallyum-utils18.当官方源配置完成,服务器就可以使用Yum进行安装并使用该软件。下载Yum管理工具包。8.2
部署LeadShop网站8.2.2
部署数据库服务器[root@mysql1~]#yum-config-manager--disablemysql80-community[root@mysql1~]#yum-config-manager--enablemysql57-community19.下载完成后使用yum-config-manager命令关闭MySQL8.0版本,并开启MySQL5.7版本。[root@mysql1~]#yum-yinstallmysql-community-server--nogpgcheck……省略安装过程……Installed:mysql-community-libs.x86_640:5.7.37-1.el7mysql-commysql-community-server.x86_640:5.7.37-1.el7Complete!20.使用Yum命令下载并安装MySQL。8.2
部署LeadShop网站8.2.2
部署数据库服务器[root@mysql1~]#systemctlstartmysqld[root@mysql1~]#systemctlenablemysqld21.启动MySQL,并设置为开机自启。[root@mysql1~]#grep"Atemporarypassword"/var/log/mysqld.log2022-04-15T05:46:37.863321Z1[Note]Atemporarypasswordisgeneratedforroot@localhost:!h(Ctnevh0R#22.查看root用户被授予的临时密码。综上所述,MySQL已经安装并启动完成。MySQL的临时登录密码为!h(Ctnevh0R#(随机)。8.2
部署LeadShop网站8.2.2
部署数据库服务器[root@mysql1~]#mysql-uroot-p"!h(Ctnevh0R#"……省略部分代码…….#修改MySQL登录密码mysql>ALTERUSER'root'@'localhost'IDENTIFIEDWITHmysql_native_passwordBY'qf@123.coM';QueryOK,0rowsaffected(0.00sec)#授予web服务器权限mysql>grantallon*.*toroot@'31'identifiedby'qf@123;.coM';QueryOK,0rowsaffected,1warning(0.00sec)mysql>grantallon*.*toroot@'30'identifiedby'qf@123.coM';QueryOK,0rowsaffected,1warning(0.00sec)#创建数据库用户mysql>createusertom@'%'identifiedby'qf@123.coM';QueryOK,0rowsaffected(1.34sec)23.登录数据库修改密码,创建数据库用户,并授予相关权限。8.2
部署LeadShop网站8.2.2
部署数据库服务器#允许远程登录mysql>usemysql;ReadingtableinformationforcompletionoftableandcolumnnamesYoucanturnoffthisfeaturetogetaquickerstartupwith-ADatabasechangedmysql>updateusersethost='%'whereuser='tom';QueryOK,0rowsaffected(0.13sec)Rowsmatched:1Changed:0Warnings:0mysql>flushprivileges;QueryOK,0rowsaffected(0.00sec)23.登录数据库修改密码,创建数据库用户,并授予相关权限。新建的数据库用户为tom,登录密码为“qf@123.coM”。8.2
部署LeadShop网站8.2.2
部署数据库服务器[root@web1~]#cat/var/www/html/test.php<?php$link=mysqli_connect('32','tom','qf@123.coM');if($link)echo"Successfully";elseecho"Fail";mysql_close();?>24.初始化数据库之后,在网站根目录下编写test.php文件,测试网站是否能与数据库连通。若其可以连接成功则返回Successfully,否则返回Fail。25.编写完成后,在浏览器中访问test.php。当前网站与数据库交互成功,分离式LAMP环境搭建完成。1.导入LeadShop网站源码(1)首先在web1服务器利用wget工具下载LeadShop网站源码,web2不做操作。8.2
部署LeadShop网站8.2.3
上线LeadShop商城系统#web1[root@web1~]#wget/leadshop/leadshop/repository/archive/master.zip--2022-04-1909:27:41--/leadshop/leadshop/repository/archive/master.zip……Location:/leadshop/leadshop/repository/blazearchive/master.zip?Expires=1650332877&Signature=oUnEshFimywSAyhVFbol57ii3gVnx5AIVoUaS7%2BTpfA%3D[following]--2022-04-1909:27:54--/leadshop/leadshop/repository/blazearchive/master.zip?Expires=1650332877&Signature=oUnEshFimywSAyhVFbol57ii3gVnx5AIVoUaS7%2BTpfA%3DReusingexistingconnectionto:443.HTTPrequestsent,awaitingresponse...200OKLength:unspecified[application/zip]Savingto:‘master.zip’[<=>]102,613,8111.10MB/sin1m46s2022-04-1909:29:40(948KB/s)-‘master.zip’saved[102613811]1.导入LeadShop网站源码(2)下载完成后,对网站压缩包进行解压,再将软件包移至指定或自创的网站目录下,授予相应权限。8.2
部署LeadShop网站8.2.3
上线LeadShop商城系统#web1[root@web1~]#unzipmaster.zip[root@web1~]#lsanaconda-ks.cfgleadshop-mastermaster.zip[root@web1~]#cp-rfleadshop-master//webdir/[root@web1~]#ls/webdir/leadshop-master[root@web1~]#chmod777-R/webdir/leadshop-master2.Apache配置虚拟主机8.2
部署LeadShop网站8.2.3
上线LeadShop商城系统#web1[root@web1~]#cat/etc/httpd/conf.d/leadshop.conf<VirtualHost*:80>ServerNameDocumentRoot/webdir/leadshop-master/web</VirtualHost><Directory"/webdir/leadshop-master/web">Requireallgranted</Directory>#web2[root@web2~]#cat/etc/httpd/conf.d/leadshop.conf<VirtualHost*:80>ServerNameDocumentRoot/webdir/leadshop-master/web</VirtualHost><Directory"/webdir/leadshop-master/web">Requireallgranted</Directory>编辑配置文件,设置论坛网站的接收端口,指定网站目录位置。指定LeadShop网站通过80端口接收请求,网站目录在/webdir/leadshop-master/web,该目录下的所有访问操作都是被允许的。3.准备数据库8.2
部署LeadShop网站8.2.3
上线LeadShop商城系统[root@mysql1~]#mysql-uroot-p'qf@123.coM'……省略部分代码……mysql>createdatabaseleadshop;QueryOK,1rowaffected(0.00sec)mysql>showdatabases;++|Database|++|information_schema||leadshop||mysql||performance_schema||sys|++5rowsinset(0.00sec)(1)在初始化完成的数据库中创建leadshop数据库,用以存放网站数据。#授予库权限mysql>grantallon*.*to'tom'@'%';QueryOK,0rowsaffected(3.14sec)#刷新mysql>flushprivileges;QueryOK,0rowsaffected(0.00sec)(2)网站数据库部署完成后,在数据库中授予操作leadshop库的权限。4.安装LeadShop系统8.2
部署LeadShop网站8.2.3
上线LeadShop商城系统(1)在浏览器中输入动态Web服务器的IP地址,开始安装LeadShop。首先访问到的是安装协议页面。(2)环境及目录权限检查过程如图。单击“同意并继续”按钮,开始检查安装环境,进入安装向导页面。安装目录检测一切正常,单击“下一步”按钮4.安装LeadShop系统8.2
部署LeadShop网站8.2.3
上线LeadShop商城系统(3)进入参数配置页面,开始填写MySQL数据库和网站管理员信息。(4)数据库安装成功之后,显示安装成功的页面。需要注意数据库的信息要填写之前设置的用户及密码,必须保证填写信息的真实性,否则无法连接到数据库。填写完成后,单击“继续”按钮,即可开始安装。至此,LeadShop安装完成,单击“进入管理后台”按钮输入网站管理员信息4.安装LeadShop系统8.2
部署LeadShop网站8.2.3
上线LeadShop商城系统(5)输入网站管理员信息,即可登录网站。(6)进入LeadShop商城后台。单击“登录”按钮4.安装LeadShop系统8.2
部署LeadShop网站8.2.3
上线LeadShop商城系统(7)将web1的/webdir/leadshop-master目录拷贝给web2,使得web集群将数据存储到同一个数据库中。(8)输入web2的IP地址,会直接访问到登录首页。[root@web1~]#scp-r/webdir/leadshop-masterroot@31:/webdir/至此,web集群已经成功上线网站业务。8.3资源共享在NFS服务器中开启共享服务在Web服务器中使用共享服务测试共享数据在Web服务器成功上线商城系统后,所有的资源都存储于Web服务器及其连接的第三方数据库中。要想实现动静态资源分离处理,需要将商城系统的静态请求进行资源调用。也就是Web服务器对用户请求进行应答时,需要调用系统中的一些静态数据。在此先将解压完成的商城数据发送至共享存储NFS服务器一份,再将Web服务器中的静态资源文件通过NFS共享至Web服务器。这样一来,当静态资源文件发生变化时,将直接改变Web服务器中的静态资源文件。8.3
资源共享8.3
资源共享8.3.1
在NFS服务器中开启共享服务[root@nfs~]#yum-yinstallnfs-utilsrpcbind……省略安装过程……Installed:nfs-utils.x86_641:1.3.0-0.68.el7.2rpcbind.x86_640:0.2.0-49.el7[root@nfs~]#systemctlstartnfs-server[root@nfs~]#systemctlenablenfs-server[root@nfs~]#systemctlstartrpcbind[root@nfs~]#systemctlenablerpcbind1.首先在NFS服务器中下载并安装NFS,启动该项服务,并设置其开机自启。[root@nfs~]#mkdir-p/leadshop/web2.网设置完成后,新建商城网站存放目录/leadshop/web,用于接收Web服务器上安装完成的论坛网站数据。8.3
资源共享8.3.1
在NFS服务器中开启共享服务[root@qfedu~]#vim/etc/exports/webdir/leadshop-master/web/img//24(rw,all_squash,anonuid=0,insecure)/webdir/leadshop-master/web/static//24(rw,all_squash,anonuid=0,insecure)3.创建完成后,编辑/etc/exports文件,设置服务器共享规则。在LeadShop论坛系统中,leadshop-master/web/img文件夹及leadshop-master/web/static文件存储静态资源,故需设置这两个文件夹为共享文件夹即可,共享对象为Web服务器。[root@nfs~]#exportfs-rvexporting/24:/webdir/leadshop-master/web/staticexporting/24:/webdir/leadshop-master/web/img4.本项目中的web1和web2在同一网段,客户端地址写其所在的网段即可。一般修改NFS配置文档后,无需重启NFS,直接执行exportfs-rv命令即可使修改的/etc/exports生效。8.3
资源共享8.3.2
在Web服务器中使用共享服务[root@web1~]#scp-r/webdir/leadshop-master/web/*29:/leadshop/web/1.首先将Web服务器中的静态数据发送至NFS服务器一份,使得NFS服务器存有相关数据,方便后续操作。#web1[root@web1~]#yum-yinstallnfs-utilsrpcbind[root@web1~]#systemctlstartnfs[root@web1~]#systemctlstartrpcbind[root@web1~]#systemctlenablenfs[root@web1~]#systemctlenablerpcbind#web2[root@web2~]#yum-yinstallnfs-utilsrpcbind[root@web2~]#systemctlstartnfs[root@web2~]#systemctlstartrpcbind[root@web2~]#systemctlenablenfs[root@web2~]#systemctlenablerpcbind2.发送完成后,在Web服务器中下载并安装NFS服务,启动该项服务,并设置其开机自启。8.3
资源共享8.3.2
在Web服务器中使用共享服务[root@nfs~]#showmount-e29Exportlistfor29:/webdir/leadshop-master/web/static/24/webdir/leadshop-master/web/img/243.设置完成后,查看NFS服务器共享出来的目录。#web1[root@web1~]#mount29:/webdir/leadshop-master/web/img//webdir/leadshop-master/web/img/[root@web1~]#mount29:/webdir/leadshop-master/web/static//webdir/leadshop-master/web/static/#web2[root@web2~]#mount29:/webdir/leadshop-master/web/img//webdir/leadshop-master/web/img/[root@web2~]#mount29:/webdir/leadshop-master/web/static//webdir/leadshop-master/web/static/4.从查询结果可以看到,当前可用的共享文件目录/webdir/leadshop-master/web/static、/webdir/leadshop-master/web/img,接下来继续在Web服务器上挂载共享目录。至此,w注意:直接用mount方式进行挂载,重启后就会失效。eb集群已经成功上线网站业务。8.3
资源共享8.3.2
在Web服务器中使用共享服务#web1[root@web1~]#vim/etc/fstab29:/webdir/leadshop-master/web/img//webdir/leadshop-master/web/img/nfsdefaults0029:/webdir/leadshop-master/web/static//webdir/leadshop-master/web/static/nfsdefaults00#web2[root@web2~]#vim/etc/fstab29:/webdir/leadshop-master/web/img//webdir/leadshop-master/web/img/nfsdefaults0029:/webdir/leadshop-master/web/static//webdir/leadshop-master/web/static/nfsdefaults005.一般企业工作中推荐使用配置文件的方式,使其开机自动挂载,编辑/etc/fstab文件,编辑挂载命令后保存即可。[root@web1~]#mount-a[root@web2~]#mount-a6.配置完成后,输入mount-a使/etc/fstab中的内容重新加载,自动挂载共享目录。8.3
资源共享8.3.2
在Web服务器中使用共享服务[root@web1~]#df-hFilesystemSizeUsedAvailUse%Mountedon/dev/mapper/centos-root17G4.1G13G24%/devtmpfs475M0475M0%/devtmpfs487M0487M0%/dev/shmtmpfs487M7.7M479M2%/runtmpfs487M0487M0%/sys/fs/cgroup/dev/sda11014M133M882M14%/boottmpfs98M098M0%/run/user/029:/webdir/leadshop-master/web/img17G1.4G16G9%/webdir/leadshop-master/web/img29:/webdir/leadshop-master/web/static17G1.4G16G9%/webdir/leadshop-master/web/static7.配置完成后,查看动态Web服务器的挂载信息,查询命令及结果如下。通过系统的反馈信息可以看到,目标文件夹均已成功挂载。8.3
资源共享8.3.3
测试共享数据[root@nfs~]#vim/webdir/leadshop-master/web/static/test.html数据共享测试页面!1.资源共享部署完成后,测试静态文件能不能在各Web服务器之间达成共享。首先在NFS服务器的网站静态资源文件夹中编写测试文件test.html。2.编写完成后,NFS服务器现已存有相关数据,在Web服务器端对该资源进行访问。浏览器访问web1的IP,访问界面。8.3
资源共享8.3.3
测试共享数据3.浏览器访问web2的IP,访问界面。可以看出,尽管文件只在NFS服务器中进行写入,但因为不同的Web服务器之间对静态资源文件夹进行共享,共享系统中的动态Web服务器也可以直接获取共享文件夹内的资源,返回给用户,资源共享配置成功。同理,若用户与Web服务器进行交互,产生的动态数据将写入数据库,静态数据将写入共享的静态文件夹,两台Web服务器都可以访问。8.4部署Nginx七层负载安装Nginx配置负载均衡测试负载均衡8.4
部署Nginx七层负载#nginx1[root@nginx1~]#yum-yinstallepel-release[root@nginx1~]#yum-yinstallnginx#nginx2[root@nginx2~]#yum-yinstallepel-release[root@nginx2~]#yum-yinstallnginx1.为准备的2台Nginx七层负载均衡器安装Nginx软件。现阶段,商城网站已部署完成,可以正常对外提供服务。为了能更好地处理用户的请求,现对用户请求实行“人性化”的管理,分发流量加快处理效率,此处选择Nginx部署七层代理,控制流量负载均衡及反向代理功能,并实现“人性化”管理。8.4
部署Nginx七层负载[root@nginx1~]#vim/etc/nginx/nginx.conf#注意更改的位置!!!http{······此处省略部分代码······server{······此处省略部分代码······#引用服务器组location/{proxy_passhttp://html;proxy_set_headerHost$host;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerREMOTE-HOST$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;}······此处省略部分代码······}#配置服务器组upstreamhtml{ server30:80weight=5; server31:80weight=5;}}2.安装Nginx后,编辑其配置文件/etc/nginx/nginx.conf,添加相关的服务器组。8.4
部署Nginx七层负载[root@nginx2~]#vim/etc/nginx/nginx.conf#注意更改的位置!!!http{······此处省略部分代码······server{······此处省略部分代码······#引用服务器组location/{proxy_passhttp://html;proxy_set_headerHost$host;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerREMOTE-HOST$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;}······此处省略部分代码······}#配置服务器组upstreamhtml{ server30:80weight=5; server31:80weight=5;}}2.安装Nginx后,编辑其配置文件/etc/nginx/nginx.conf,添加相关的服务器组。8.4
部署Nginx七层负载#nginx1[root@nginx1~]#systemctlstartnginx[root@nginx1~]#systemctlenablenginx#nginx2[root@nginx2~]#systemctlstartnginx[root@nginx2~]#systemctlenablenginx3.配置完成后启动Nginx,并设置为开机自启。4.使用Windows浏览器访问Nginx负载均衡器的IP可访问web集群。8.4
部署Nginx七层负载[root@web1nginx]#tail-f/var/log/nginx/access.log5.在web1和web2使用tail命令加-f参数可动态查看正在修改的文件。6.也可以通过网页测试工具Elinks,进行访问测试。首先在web1和web2上创建测试文件nginx_test.html。强制刷新浏览器,再次访问网站,可通过访问web1和web2的access.log查看客户端请求的信息。[root@web1~]#vim/webdir/leadshop-master/web/nginx_test.htmlWeb1[root@web2~]#vim/webdir/leadshop-master/web/nginx_test.htmlWeb28.4
部署Nginx七层负载7.在客户端服务器安装Elinks工具,具体命令及访问nginx1结果如下。[root@qfedu~]#yum-yinstallelinks[root@qfedu~]#elinks--dump33:/nginx_test.htmlweb1[root@qfedu~]#elinks--dump33:/nginx_test.htmlweb2[root@qfedu~]#elinks--dump33:/nginx_test.htmlweb1[root@qfedu~]#elinks--dump33:/nginx_test.htmlweb2[root@qfedu~]#elinks--dump33:/nginx_test.htmlweb1[root@qfedu~]#elinks--dump33:/nginx_test.htmlweb2Nginx做七层负载实现了正确的分发请求,后端的服务器也可以正常地进行应答,返回预料页面,系统运行正常。8.4
部署Nginx七层负载8.在客户端使用Elinks工具继续访问nginx2,具体命令及访问结果如下。[root@qfedu~]#elinks--dump35:/nginx_test.htmlweb1[root@qfedu~]#elinks--dump35:/nginx_test.htmlweb2[root@qfedu~]#elinks--dump35:/nginx_test.htmlweb1[root@qfedu~]#elinks--dump35:/nginx_test.htmlweb2[root@qfedu~]#elinks--dump35:/nginx_test.htmlweb1至此,两台七层负载均衡器均已成功部署。通过本节项目步骤可以看到,一台负载均衡器就可以满足实验需求,那为什么部署两台呢?一般情况下,为防止服务器出现单点故障,为其做备份是最好的选择。配置与服务器A完全一样的服务器B,当服务器A出现故障时,立马使用服务器B替换服务器A进行工作,保证业务的稳定性。此处可以考虑在本书中介绍过的高可用软件Keepalived,也可以考虑使用Heartbeat实现高可用或市面其他可供选择的高可用软件,感兴趣的读者可以自行研究。本实验系统将通过LVS实现两台Nginx的调度及高可用,具体内容将会在下一小节中介绍。8.5部署LVS四层负载部署四层负载及其高可用配置七层负载均衡器测试服务可用性为了解决七层负载均衡器成为性能瓶颈,充分发挥备份服务器的作用。现在为网站配置四层负载均衡服务器,一方便解决流量分发的问题,另一方面为8.4中两台Nginx实现高可用,一台宕机时,另一台可以马上替补,使网站系统可以高效运转。为了保证七层负载均衡器不会成为网站的性能瓶颈,设计使用两台服务器实现四层负载均衡的功能,同时为它们配置Keepalived,保证四层负载均衡服务器的高可用。8.5
部署LVS四层负载按照项目说明,使用IP为36(lvs1)和IP为37(lvs2)的服务器实现四层负载均衡。此处默认36为主LVS,37为从LVS。首先在主LVS上部署四层负载均衡功能。1.在主LVS上按照配置Keepalived8.5.1
部署四层负载及其高可用8.5
部署LVS四层负载实现四层负载均衡功能需要安装ipvsadm管理工具,实现两台四层负载均衡服务器的高可用需要软件Keepalived,这里同时下载两个软件[root@qfedu~]#yum-yinstallipvsadmkeepalived2.修改主LVS的配置文件下载完成后,修改Keepalived配置文件,设置虚拟网站对外提供服务的虚拟IP为50,将两台七层负载均衡器加入LVS的轮询队伍,设置轮询算法为Round-Robin,修改完成后的配置文件内容。[root@bogon~]#cat/etc/keepalived/keepalived.conf!ConfigurationFileforkeepalivedglobal_defs{
router_idlvs-01 }
vrrp_instanceVI_1{
stateMASTER interfaceens33 virtual_router_id51
priority150
advert_int1 authentication{ auth_typePASS auth_pass1111 } virtual_ipaddress{ 50/24devens33 } }8.5.1
部署四层负载及其高可用8.5
部署LVS四层负载
virtual_server5080{ delay_loop3 lb_algorr lb_kindDR protocolTCP real_server3380{ weight1 TCP_CHECK{ connect_timeout3 } } real_server3580{ weight1 TCP_CHECK{ connect_timeout3 } }}3.在从LVS上按照配置Keepalived与主LVS相同,在从LVS上安装ipvsadm管理工具及Keepalived。[root@qfedu~]#yum-yinstallipvsadmkeepalived8.5.1
部署四层负载及其高可用8.5
部署LVS四层负载4.修改从LVS的配置文件与主LVS相同,在从LVS中修改Keepalived配置文件,设置虚拟网站对外提供服务的虚拟IP为50优先级略低于主LVS。将两台七层负载均衡器加入LVS的轮询队伍,设置轮询算法为Round-Robin,修改完成后的配置文件内容。[root@lvs2~]#cat/etc/keepalived/keepalived.conf!ConfigurationFileforkeepalivedglobal_defs{
router_idlvs-02 }
vrrp_instanceVI_1{
stateBACKUP
interfaceens33
virtual_router_id51
priority100
advert_int1 authentication{ auth_typePASS auth_pass1111 } virtual_ipaddress{ 50/24devens33 } }8.5.1
部署四层负载及其高可用8.5
部署LVS四层负载
virtual_server5080{ delay_loop3 lb_algorr lb_kindDR protocolTCP real_server3380{ weight1 TCP_CHECK{ connect_timeout3 } } real_server3580{ weight1 TCP_CHECK{ connect_timeout3 } }}5.主从服务器同时启动Keepalived#lvs1[root@lvs1~]#systemctlstartkeepalived[root@lvs2~]#systemctlenablekeepalived#lvs2[root@lvs1~]#systemctlstartkeepalived[root@lvs2~]#systemctlenablekeepalived8.5.1
部署四层负载及其高可用8.5
部署LVS四层负载两台LVS的配置文件修改完成后,同时启动Keepalived并设置其开机自启。6.重启服务器[root@qfedu~]#reboot之后重启服务器,使配置文件生效。在8.5.1中已将四层负载均衡器及高可用服务部署完成,并且将两台七层负载均衡器加入轮询队伍。接下来,配置七层负载均衡与四层负载均衡通信。两台七层负载均衡器配置的方式相同,故以下操作需要分别在两台七层负载均衡器上各完成一遍。1.确定服务可用四层负载均衡器根据负载策略将请求分派给不同的七层负载均衡器进行处理,若被分配到的七层负载均衡器并没有七层负载均衡的功能,便失去了分派的意义。故轮询队伍中的七层负载均衡器应首先保证负载功能可用。该项目用到的两台七层负载均衡器已在8.4小节中做过相关测试,服务可用,故此处进行下一步即可。8.5.2
配置七层负载均衡器8.5
部署LVS四层负载2.配置虚拟地址(1)为七层负载均衡服务器配置虚拟网络地址,用于与LVS设备进行通信,将VIP配置在物理网卡的子接口上,本实验的VIP设置为50。8.5.2
配置七层负载均衡器8.5
部署LVS四层负载[root@nginx1~]#yum-yinstallnet-tools[root@nginx1~]#ifconfigens33:050broadcast55netmaskup2.配置虚拟地址(2)查看网络接口和网卡信息。8.5.2
配置七层负载均衡器8.5
部署LVS四层负载[root@nginx1~]#ipa1:lo:<LOOPBACK,UP,LOWER_UP>mtu65536qdiscnoqueuestateUNKNOWNgroupdefaultqlen1000link/loopback00:00:00:00:00:00brd00:00:00:00:00:00inet/8scopehostlovalid_lftforeverpreferred_lftforeverinet6::1/128scopehostvalid_lftforeverpreferred_lftforever2:ens33:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdiscpfifo_faststateUPgroupdefaultqlen1000link/ether00:0c:29:4c:05:92brdff:ff:ff:ff:ff:ffinet33/24brd55scopeglobalnoprefixrouteens33valid_lftforeverpreferred_lftforeverinet50/24brd55scopeglobalsecondaryens33:0valid_lftforeverpreferred_lftforever3.配置路由[root@nginx1~]#routeadd-host50devens33:08.5.2
配置七层负载均衡器8.5
部署LVS四层负载(1)在七层负载均衡服务器上,给ens33:0添加路由,确保如果请求的目标IP是$VIP,那么让出去的数据包的源地址也显示为$VIP。[root@nginx1~]#cat/etc/rc.local|tail-1/sbin/routeadd-host50devlo:0(2)为了防止重启失效,追加如下内容至开机自启文件中。4.配置ARP[root@nginx1~]#cat/etc/sysctl.confnet.ipv4.conf.all.arp_ignore=1net.ipv4.conf.all.arp_announce=2net.ipv4.conf.default.arp_ignore=1net.ipv4.conf.default.arp_announce=2net.ipv4.conf.lo.arp_ignore=1net.ipv4.conf.lo.arp_announce=28.5.2
配置七层负载均衡器8.5
部署LVS四层负载(1)配置ARP,在/etc/sysctl.conf文件中编辑代码,忽略ARP请求。即用户直接对该服务器进行访问,该服务器不会应答,但是当收到LVS分配的请求时,可以使用50的身份进行回复。[root@nginx1~]#sysctl-pnet.ipv4.conf.all.arp_ignore=1net.ipv4.conf.all.arp_announce=2net.ipv4.conf.default.arp_ignore=1net.ipv4.conf.default.arp_announce=2net.ipv4.conf.lo.arp_ignor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年数字水位仪项目申请报告
- 2025年国土资源普查核仪器项目申请报告模范
- 2024-2025学年西藏那曲市巴青县三上数学期末统考试题含解析
- 军训心得体会汇编15篇
- 2025年水上加油船项目规划申请报告模板
- 2025年放射性废气处置设备项目申请报告
- 2022装修监理年终工作总结
- 去超市实习报告范文8篇
- 住房申请书模板10篇
- 演讲竞聘演讲稿范文6篇
- 转子找静平衡方法
- 民间借贷利息计算表
- 2025年九省联考新高考 政治试卷(含答案解析)
- 终极战略规划指南:深度剖析Cross SWOT分析、市场洞察与内部能力优化的综合行动方案
- 中国偏头痛诊治指南(第一版)2023解读
- 湖北省武汉市黄陂区2024年数学六年级第一学期期末学业质量监测模拟试题含解析
- 关于开展2024年度保密自查自评专项检查工作的实施方案
- 商场反恐防暴应急预案演练方案
- 2024年天津市西青经济开发集团限公司公开招聘工作人员高频500题难、易错点模拟试题附带答案详解
- 智慧物业管理的区块链技术应用
- 数据库设计规范标准
评论
0/150
提交评论