云计算集群技术及应用 课件 第2章-Web服务集群_第1页
云计算集群技术及应用 课件 第2章-Web服务集群_第2页
云计算集群技术及应用 课件 第2章-Web服务集群_第3页
云计算集群技术及应用 课件 第2章-Web服务集群_第4页
云计算集群技术及应用 课件 第2章-Web服务集群_第5页
已阅读5页,还剩100页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章Web服务集群2.1Web服务集群简介

2.2

搭建LAMP平台2.3

搭建LNMP平台2.4Nginx—负载均衡2.5Web集群实战案例-业务上线了解Web服务集群的意义熟练搭建LAMP平台熟练搭建LNMP平台熟悉Nginx负载均衡熟练搭建Web服务集群引言大家所熟悉的博客、论坛等网站,其特点就是用户群体较大。当Web服务器直接面向客户端时,服务器往往要承载大量并发请求,单台服务器难以负荷。为了应对以上问题,可以配置多台Web服务器组成集群,以扩展架构的稳定性和可扩展性,承载更多的并发量以及提高用户的访问速度。2.1Web服务集群简介组成及概念Web集群基础架构2.1Web服务集群简介Web服务集群是指配置若干(两台及以上)台Web服务器组成一个系统,作为一个整体为用户提供Web服务。在Web集群环境中,前端使用负载均衡,将用户请求的流量按照算法分散地移交到后端Web服务器集群中,实现请求的分发,将会大大提升系统的吞吐量与请求性能。2.1Web服务集群简介Web服务器又称为网站服务器,能够处理浏览器等客户端的请求然后返回相应结果,Web服务器可提供浏览类网站文件,又可提供下载类数据文件。常见的Web服务器协议有HTTP、HTML文档格式、URL(UniformResourceLocator,统一资源定位符)等,其中URL就是用户在浏览器中输入的网站地址。2.1Web服务集群简介当前主流的Web服务器有Apache、Nginx、IIS,在云端Web类应用中,使用率可达95%以上。Apache是世界使用最多的Web服务器,是Web服务器的“领头人”,同时,Nginx性能稳定,有着代替Apache的趋势,这两者在Linux系统下都能被灵活地配置调用,而IIS主要用于Windows的Web类应用。Web服务器的市场份额2.1Web服务集群简介假设用户A通过负载均衡登录网站,第一次登录的会话信息保存在Web服务器1中,保存的内容叫做Session,可以保证用户“在线”的状态。当网站刷新,负载均衡把请求又分给了Web2,因为Web2没有用户A的登录信息,网站就会提示用户A重新登录,以此类推,用户A无法实现会话保持。实现Session共享就可以解决以上问题,如Nginx负载均衡的ip_hash算法、LVS的持久连接机制、HAProxy负载均衡的source算法以及基于cookie的会话保持处理机制。Web集群基础架构2.2搭建LAMP平台LAMP简介实验的准备环境LAMP的部署及测试2.2

搭建LAMP

平台2.2.1LAMP简介在LAMP中,Linux是自由和开放源码的类Unix操作系统,可安装在各种计算机硬件设备中。Apache是最受欢迎的一个开放源码的Web服务器软件,强大且实用。M可以是多线程、多用户的SQL数据库管理系统MySQL,也可以是MariaDB。P一般是指PHP、Perl或Python等脚本语言,其中PHP是一种编程语言,最初用来设计生产动态网站,主要用于服务器端的应用程序软件。LAMP可以是LinuxApacheMySQLPHP的简写,其实就是把Apache、MySQL以及PHP安装在Linux系统上,来运行动态网站或者服务器,是比较常用的Web搭建框架。2.2

搭建LAMP

平台2.2.1LAMP简介LAMP的工作原理2.2

搭建LAMP

平台2.2.1LAMP简介浏览器向服务器发送HTTP请求,服务器(Apache)接受请求。PHP作为Apache的组件模块也会一起启动,它们具有相同的生命周期。Apache会将一些静态资源保存,然后去调用PHP处理模块进行PHP脚本的处理。脚本处理完后,Apache将处理完的信息通过httpresponse的方式发送给浏览器,经浏览器解析、渲染等一系列操作后呈现整个网页。LAMP的工作原理2.2

搭建LAMP

平台2.2.2实验的准备环境本书全部实验使用虚拟机代替物理服务器,在虚拟环境下的Linux操作系统中进行,实验所用操作系统版本为CentOS7.6。CentOS7自带Firewalld和SELinux守护工具,一外一内,保证系统的安全。严格意义上来说,可以通过配置相关策略来开放系统及服务的访问权限,这种做法虽然较准确但是繁琐。为了避免因防火墙造成各种连接不成功以至于实验失败的情况,这里直接关闭Firewalld和SELinux,后续章节的实验也默认关闭。2.2

搭建LAMP

平台2.2.2实验的准备环境1.查看系统版本号[root@qfedu~]#cat/etc/redhat-releaseCentOSLinuxrelease7.6.1810(Core)2.2

搭建LAMP

平台2.2.2实验的准备环境2.关闭CentOS7默认防火墙Firewalld[root@qfedu~]#systemctlstatusfirewalld●firewalld.service-firewalld-dynamicfirewalldaemonLoaded:loaded(/usr/lib/systemd/system/firewalld.service;enabled;vendorpreset:enabled)Active:active(running)since一2021-10-2518:05:27CST;7hleft……此处省略部分代码……(1)首先查看虚拟机当前防火墙的状态2.2

搭建LAMP

平台2.2.2实验的准备环境2.关闭CentOS7默认防火墙Firewalld通过上面这段代码的反馈信息,可以观察到防火墙目前是开启的。输出结果第2行括号中的第二个字段表示的是服务的自启动状态,若为enabled,则说明该服务会开机自启动;若为disabled,则开机不会自启。第3行active表示的是活动,其冒号后面若为active(running),则表示防火墙为启动状态;若为inactive(dead),则说明当前防火墙为关闭状态。(1)首先查看虚拟机当前防火墙的状态2.2

搭建LAMP

平台2.2.2实验的准备环境2.关闭CentOS7默认防火墙Firewalld[[root@qfedu~]#systemctlstopfirewalld[root@qfedu~]#systemctldisablefirewalld(2)关闭防火墙,并禁止其开机自启2.2

搭建LAMP

平台2.2.2实验的准备环境2.关闭CentOS7默认防火墙Firewalld[root@qfedu~]#systemctlstatusfirewalld●firewalld.service-firewalld-dynamicfirewalldaemonLoaded:loaded(/usr/lib/systemd/system/firewalld.service;disabled;vendorpreset:enabled)Active:inactive(dead)……此处省略部分代码……(3)再次查看防火墙状态当前防火墙的状态为关闭2.2

搭建LAMP

平台2.2.2实验的准备环境3.关闭SELinux[root@qfedu~]#getenforceEnforcing(1)首先查看当前SELinux的状态系统返回的信息为Enforcing,意为执行,即SELinux正在运行2.2

搭建LAMP

平台2.2.2实验的准备环境3.关闭SELinux[root@qfedu~]#setenforce0[root@qfedu~]#getenforcePermissive(2)临时关闭SELinux,并再次查看SELinux的状态SELinux的状态为Permissive,意为允许的2.2

搭建LAMP

平台2.2.2实验的准备环境3.关闭SELinux[root@qfedu~]#vim/etc/selinux/config#ThisfilecontrolsthestateofSELinuxonthesystem.#SELINUX=cantakeoneofthesethreevalues:#enforcing-SELinuxsecuritypolicyisenforced.#permissive-SELinuxprintswarningsinsteadofenforcing.#disabled-NoSELinuxpolicyisloaded.#SELINUX=enforcing#修改前SELINUX=disabled#修改后(3)禁止SELinux开机自启将SELINUX=enforcing修改为SELINUX=disabled2.2

搭建LAMP

平台2.2.2实验的准备环境3.关闭SELinux[root@qfedu~]#reboot[root@qfedu~]#getenforceDisabled(4)重启虚拟机,再次查看SELinux状态SELinux的状态为Disabled,说明SELinux已关闭,并被禁止开机自启。至此,准备工作已全部完成,本书后续实验将不再详细介绍该环节。2.2

搭建LAMP

平台2.2.3LAMP的部署及测试在单机环境下部署LAMP环境,首先关闭防火墙及SELinux,之后利用yum工具依次安装Apache、PHP和MySQL,并进行测试。准备1台VM虚拟机搭建LAMP平台HostNameIP说明web139搭建LAMP框架说明:操作系统版本CentOS7.6,提前关闭防火墙及SELinux。2.2

搭建LAMP

平台2.2.3LAMP的部署及测试1.Apache的安装与测试[root@web1~]#yum-yinstallhttpd……此处省略部分代码……已安装:httpd.x86_640:2.4.6-97.el7.centos.2作为依赖被安装:apr.x86_640:1.4.8-7.el7apr-util.x86_640:1.5.2-6.el7httpd-tools.x86_640:2.4.6-97.el7.centos.2mailcap.noarch0:2.1.41-2.el7完毕!(1)安装Apache2.2搭建LAMP平台2.2.3LAMP的部署及测试1.Apache的安装与测试[root@web1~]#httpd-vServerversion:Apache/2.4.6(CentOS)Serverbuilt:Nov10202114:41:18本次实验的Apache版本为2.4.6(1)安装Apache2.2搭建LAMP平台2.2.3LAMP的部署及测试1.Apache的安装与测试[root@web1~]#systemctlstarthttpd[root@web1~]#systemctlenablehttpdCreatedsymlinkfrom/etc/systemd/system/multi-user.target.wants/httpd.serviceto/usr/lib/systemd/system/httpd.service.(3)启动Apache服务并设置开机自启2.2搭建LAMP平台2.2.3LAMP的部署及测试1.Apache的安装与测试在本机浏览器中输入虚拟机的IP地址,如果看到Apache默认的测试页面,说明Apache服务成功运行。直接在浏览器上访问当前主机的IP地址。(4)验证Apache服务是否安装成功2.2搭建LAMP平台2.2.3LAMP的部署及测试1.Apache的安装与测试Apache的默认网站目录是/var/www/html,先切换到该路径,再创建HTML静态页面。(5)测试Apache是否能解析常见的静态页面[root@web1~]#cd/var/www/html/[root@web1html]#vimindex.htmlWelcometotheworld!2.2搭建LAMP平台2.2.3LAMP的部署及测试1.Apache的安装与测试在浏览器中输入IP地址。(5)测试Apache是否能解析常见的静态页面静态页面被成功解析,访问正常2.2搭建LAMP平台2.2.3LAMP的部署及测试1.Apache的安装与测试对动态页面进行测试,这里选用的是动态语言中最常用的PHP语言作为测试对象。在网站根目录编写一个PHP文件:(5)测试Apache是否能解析常见的动态页面[root@web1html]#vimindex.php<?phpphpinfo();?>2.2搭建LAMP平台2.2.3LAMP的部署及测试1.Apache的安装与测试在浏览器中访问39/index.php(5)测试Apache是否能解析常见的动态页面服务器仅仅把index.php当作正常的静态语言原封不动地进行输出,并没有对PHP语言进行解释,这是因为Apache本身并不能识别PHP语言。如果想达到预期效果,服务器需要先借助PHP软件进行翻译,再根据翻译后的含义进行相关操作。2.2搭建LAMP平台2.2.3LAMP的部署及测试2.PHP的安装与测试[root@web1html]#yum-yinstallphp……此处省略部分代码……已安装:php.x86_640:5.4.16-48.el7作为依赖被安装:libzip.x86_640:0.10.1-8.el7php-cli.x86_640:5.4.16-48.el7php-common.x86_640:5.4.16-48.el7完毕!(1)安装PHP2.2搭建LAMP平台2.2.3LAMP的部署及测试2.PHP的安装与测试[root@web1html]#systemctlrestarthttpd(2)重启Apache服务2.2搭建LAMP平台2.2.3LAMP的部署及测试2.PHP的安装与测试安装PHP之后,Apache可以实现对动态页面的正常访问。需要注意的是安装PHP之后,需要重启Apache,才能实现Apache与PHP的连接。(3)再次访问index.php2.2搭建LAMP平台2.2.3LAMP的部署及测试3.数据库的安装与测试[root@web1~]#yum-yinstallmariadbmariadb-server……此处省略部分代码……已安装:

mariadb.x86_641:5.5.64-1.el7mariadb-server.x86_641:5.5.64-1.el7作为依赖被安装:perl-Compress-Raw-Bzip2.x86_640:2.061-3.el7perl-Compress-Raw-Zlib.x86_641:2.061-4.el7perl-DBD-MySQL.x86_640:4.023-6.el7perl-DBI.x86_640:1.627-4.el7(1)安装MariaDB客户端与服务端perl-Data-Dumper.x86_640:2.145-3.el7perl-IO-Compress.noarch0:2.061-2.el7perl-Net-Daemon.noarch0:0.48-5.el7perl-PlRPC.noarch0:0.2020-14.el7作为依赖被升级:mariadb-libs.x86_641:5.5.68-1.el7完毕!2.2搭建LAMP平台2.2.3LAMP的部署及测试3.数据库的安装与测试(1)安装MariaDB客户端与服务端启动MariaDB服务,并设置其开机自启[root@web1~]#systemctlstartmariadb[root@web1~]#systemctlenablemariadb2.2搭建LAMP平台2.2.3LAMP的部署及测试3.数据库的安装与测试(2)更改数据库密码首先,通过如下指令进入数据库安全设置模式。[root@web1~]#mysql_secure_installation2.2搭建LAMP平台2.2.3LAMP的部署及测试3.数据库的安装与测试(2)更改数据库密码然后,对数据库密码进行修改。这里设置的用户名默认为root,密码为123。[root@web1~]#mysql_secure_installation……此处省略部分代码……Entercurrentpasswordforroot(enterfornone):#回车OK,successfullyusedpassword,movingon...SettingtherootpasswordensuresthatnobodycanlogintotheMariaDBrootuserwithouttheproperauthorisation.Setrootpassword?[Y/n]YNewpassword:123Re-enternewpassword:123Passwordupdatedsuccessfully!Reloadingprivilegetables.....Success!……此处省略部分代码……Cleaningup...Alldone!Ifyou'vecompletedalloftheabovesteps,yourMariaDBinstallationshouldnowbesecure.ThanksforusingMariaDB!2.2搭建LAMP平台2.2.3LAMP的部署及测试3.数据库的安装与测试(3)登录数据库测试[root@web1~]#mysql-uroot-p123WelcometotheMariaDBmonitor.Commandsendwith;or\g.YourMariaDBconnectionidis11Serverversion:5.5.64-MariaDBMariaDBServerCopyright(c)2000,2018,Oracle,MariaDBCorporationAbandothers.Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement.MariaDB[(none)]>\qBye2.2搭建LAMP平台2.2.3LAMP的部署及测试3.数据库的安装与测试(4)测试PHP与数据库是否连通首先在网站根目录下创建linktest.php,设定之前设置的数据库账户及密码,若能通过该账户密码正常连接数据库,则返回Successfully,否则返回Fail。[root@web1~]#vim/var/www/html/linktest.php<?php$link=mysql_connect('localhost','root','123');if($link)echo"Successfully";elseecho"Fail";mysql_close();?>2.2搭建LAMP平台2.2.3LAMP的部署及测试3.数据库的安装与测试(4)测试PHP与数据库是否连通在浏览器上访问linktest.php服务器目前无法处理这个请求。虽然已经安装了数据库,但是并没有将数据库与网站服务连接起来,缺少PHP与数据库连接的插件。2.2搭建LAMP平台2.2.3LAMP的部署及测试3.数据库的安装与测试(5)查看PHP的拓展模块[root@web1~]#php-m|grepmysql2.2搭建LAMP平台2.2.3LAMP的部署及测试3.数据库的安装与测试(6)安装php-mysql[root@web1~]#yum-yinstallphp-mysql……此处省略部分代码……已安装:php-mysql.x86_640:5.4.16-48.el7作为依赖被安装:php-pdo.x86_640:5.4.16-48.el7完毕!2.2搭建LAMP平台2.2.3LAMP的部署及测试3.数据库的安装与测试(7)再次查看PHP的拓展模块[root@web1~]#php-m|grepmysqlmysqlmysqlipdo_mysql2.2搭建LAMP平台2.2.3LAMP的部署及测试3.数据库的安装与测试(8)重启Apache服务[root@web1~]#systemctlrestarthttpd2.2搭建LAMP平台2.2.3LAMP的部署及测试3.数据库的安装与测试(9)再次在浏览器上访问linktest.php改动linktest.php中的账户或密码,这里将root改为rooot,再次访问linktest.php2.2搭建LAMP平台2.2.3LAMP的部署及测试由此可知,在Apache上运行一个网站是非常简单的,只要将源码放入网站根目录即可。随着业务的发展,越来越多的公司选择使用Java语言来开发应用。能够发布JavaWeb程序的服务器需要支持Servlet和Jsp规范,常见的有Tomcat服务器、Resin服务器、JBoss服务器、WebLogic服务器等。其中Tomcat服务器性能稳定且开源免费,易被初学者掌握,因此,读者在课余时间可以学习Tomcat服务器的相关内容。2.3搭建LNMP平台LNMP简介LNMP的部署及测试2.3

搭建LNMP平台2.3.1

LNMP简介LAMP是LinuxNginxMySQLPHP的简写,即把Nginx、MySQL以及PHP安装在Linux系统上,组成一个高效、免费、高扩展的网站服务系统,是国内大中型互联网公司网站常用的Web搭建框架。LAMP中是以Apache作为Web服务器与客户端浏览器进行交互,顾名思义,在LNMP环境中,是以Nginx作为Web服务器。Nginx(enginex)是一款高性能、轻量级的Web服务器,是一款反向代理服务器,也是一款邮箱代理服务器(IMAP/POP3/SMTP),具有性能优越、功能丰富、占有内存少等优点。Nginx既适用于静态业务又适用于动态业务,国内的百度、淘宝、阿里、小米等知名网站都在使用Nginx来满足其高并发业务的需求,已经开始逐渐代替Apache。2.3

搭建LNMP平台2.3.1

LNMP简介LNMP的工作原理如图所示。浏览器发送请求到服务器(Nginx),服务器响应并处理Web请求。如果是静态文本直接返回,否则将脚本(PHP)通过接口传输协议(网关协议)PHP-FCGI(fast-cgi,快速通用网关接口)传输给PHP-FPM(进程管理程序),然后PHP-FPM调用PHP解析器的其中一个进程PHP-CGI来解析PHP脚本信息。然后将解析后的脚本返回到PHP-FPM,PHP-FPM再通过fast-cgi的形式将脚本信息传送给Nginx。服务器再通过Httpresponse的形式传送给浏览器。浏览器再进行解析与渲染然后呈现给用户。2.3

搭建LNMP平台2.3.2

LNMP的分离部署及测试在本案例中准备两台VM虚拟机(或物理服务器),分离部署LNMP环境,如表所示。说明:其中,应用程序及文件服务器需要Nginx+PHP-FPM插件支持,数据库服务器采用Mariadb进行实现。操作系统版本CentOS7.6,提前关闭防火墙及SELinux(过程不再赘述)。HostNameIP说明web139应用程序及文件服务器db140数据库服务器2.3

搭建LNMP平台2.3.2

LNMP的分离部署及测试(1)在准备的应用服务器(1)上部署Nginx。首先查询Nginx的安装包信息。[root@web1~]#yuminfonginx已加载插件:fastestmirrorLoadingmirrorspeedsfromcachedhostfile*base:*extras:*updates:可安装的软件包名称:nginx架构:x86_64时期:1版本:1.20.1发布:9.el7大小:587k源:epel/x86_64简介:Ahighperformancewebserverandreverseproxyserver网址:协议:BSD描述:NginxisawebserverandareverseproxyserverforHTTP,SMTP,POP3and:IMAPprotocols,withastrongfocusonhighconcurrency,performanceandlow:memoryusage.1.部署Nginx2.3

搭建LNMP平台2.3.2

LNMP的分离部署及测试(2)利用yum工具就可以实现Nginx的安装。[root@web1~]#yum-yinstallnginx……此处省略部分代码……已安装:nginx.x86_641:1.20.1-9.el7作为依赖被安装:centos-indexhtml.noarch0:7-9.el7.centosgperftools-libs.x86_640:2.6.1-1.el7nginx-filesystem.noarch1:1.20.1-9.el7openssl11-libs.x86_641:1.1.1k-2.el7完毕!1.部署Nginx(3)启动Nginx服务,并设置该项服务开机自启。[root@web1~]#systemctlstartnginx[root@web1~]#systemctlenablenginx2.3

搭建LNMP平台2.3.2

LNMP的分离部署及测试(4)Nginx服务启动后,会坚守在系统的80端口等待用户请求的到来。检查Nginx是否正常工作在80端口。[root@web1~]#netstat-unltp|grep80tcp00:80:*LISTEN14484inx:mastertcp600:::80:::*LISTEN14484inx:master1.部署Nginx(5)打开浏览器,输入IP,即可看到Nginx的欢迎界面Nginx服务正常工作因为Nginx.conf文件中指向的/usr/share/nginx/html/index.html是CentOS欢迎页面,并不影响Nginx的正常启动。2.3

搭建LNMP平台2.3.2

LNMP的分离部署及测试(6)现在测试Nginx是否能解析常见的动静态页面。首先对静态网页进行测试。Nginx的默认网站目录是/usr/share/nginx/html,先切换到该路径,再创建Html静态页面,具体如下所示。[root@web1~]#cd/usr/share/nginx/html[root@web1html]#vimindex.htmlWelcometotheworld!1.部署Nginx网站的默认目录是/usr/share/nginx/html,源码包一般放在这里。错误日志目录是/var/log/nginx/access.log,在实验过程中,经常会出错,需要认真查看错误日志,进行排错。(7)在浏览器中输入IP地址,访问结果如图。静态页面被成功解析,访问正常2.3

搭建LNMP平台2.3.2

LNMP的分离部署及测试(8)其次对动态页面进行测试,这里选用的是动态语言中最常用的PHP语言作为测试对象。在网站根目录编写一个PHP文件。[root@web1html]#vimindex.php<?phpphpinfo();?>按Esc,输入:wq进行保存。1.部署Nginx(9)在浏览器中访问39/index.php,结果如图。服务器并不认识index.php,将其当作其他文件进行下载。2.3

搭建LNMP平台2.3.2

LNMP的分离部署及测试(1)下载安装PHP-FPM及相关插件。[root@web1~]#yuminstall-yphp-fpmphp-mysqlphp-gd2.部署PHP-FPMNginx不支持对外部动态程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。想要让服务器可以处理PHP文件,则必须安装PHP-FPM。此处采用YUM安装的方式进行介绍,此操作依然在应用服务器(39)上进行。(2)PHP-FPM安装完成后,将其开启并设置其开机自启。不仅安装了PHP-FPM,还安装了相关依赖包。其中,PHP-Mysql是用于连接Mysql数据库的程序,PHP-GD是用于处理图片或者生成图片的图形库程序。[root@web1~]#systemctlstartphp-fpm[root@web1~]#systemctlenablephp-fpm2.3

搭建LNMP平台2.3.2

LNMP的分离部署及测试(3)PHP正常工作在9000端口,查看PHP-FPM的进程信息。[root@qfedu~]#netstat-anpt|grepphp-fpmtcp00:9000:*LISTEN72441/php-fpm:mast(4)由于Nginx默认只处理以.html结尾的文件,而现在网站要处理PHP文件,那么需要将.php文件加入网站处理的范围,更新网站接收的文件类型。#在Nginx配置文件的Server模块内进行添加即可。[root@web1~]#vim/etc/nginx/conf.d/default.confserver{listen80;server_namelocalhost;location/{root/usr/share/nginx/html;indexindex.htmlindex.htmindex.php;}#省略部分代码}2.部署PHP-FPM服务器9000端口已经被PHP-FPM程序使用。2.3

搭建LNMP平台2.3.2

LNMP的分离部署及测试(5)除了添加PHP主页名称,还需在其配置文件的Server模块启用nginx_fastcgi功能,修改其调用路径,修改后的内容如下所示。location~\.php${root/usr/share/nginx/html;fastcgi_pass:9000;fastcgi_indexindex.php;fastcgi_paramSCRIPT_FILENAME/$document_root$fastcgi_script_name;includefastcgi_params;}2.部署PHP-FPM其中一些参数的含义如下所示。location~\.php$表示收到类似于.php结尾的请求之后,将执行以下配置,“~”符号表示类似;fastcgi_pass表示请求将发送的端口,此处为本机9000端口;fastcgi_index表示PHP的默认主页;fastcgi_param表示调用PHP的环境变量,此处调用了脚本文件的请求路径。2.3

搭建LNMP平台2.3.2

LNMP的分离部署及测试(6)修改完成后,再次重启Nginx,访问测试文件index.php,结果如图。2.部署PHP-FPM此时已经可以看到PHP的基础信息,包括版本信息、创建时间、文件路径等,应用服务器已部署完成,接下来将介绍数据库服务器的配置方式。2.3

搭建LNMP平台2.3.2

LNMP的分离部署及测试(1)在准备的数据库服务器(40)上部署Mariadb。首先安装MariaDB客户端与服务端。[root@db1~]#yum-yinstallmariadbmariadb-server……此处省略部分代码……已安装:mariadb.x86_641:5.5.68-1.el7mariadb-server.x86_641:5.5.68-1.el7作为依赖被安装:perl-Compress-Raw-Bzip2.x86_640:2.061-3.el7perl-Compress-Raw-Zlib.x86_641:2.061-4.el7perl-DBD-MySQL.x86_640:4.023-6.el7perl-DBI.x86_640:1.627-4.el7perl-Data-Dumper.x86_640:2.145-3.el7perl-IO-Compress.noarch0:2.061-2.el7perl-Net-Daemon.noarch0:0.48-5.el7perl-PlRPC.noarch0:0.2020-14.el7作为依赖被升级:mariadb-libs.x86_641:5.5.68-1.el7完毕!完毕!3.部署数据库(2)启动MariaDB服务,并设置其开机自启。[root@db1~]#systemctlstartmariadb[root@db1~]#systemctlenablemariadb2.3

搭建LNMP平台2.3.2

LNMP的分离部署及测试(3)通过如下指令进入数据库安全设置模式,更改数据库密码。[root@db1~]#mysql_secure_installationNOTE:RUNNINGALLPARTSOFTHISSCRIPTISRECOMMENDEDFORALLMariaDBSERVERSINPRODUCTIONUSE!PLEASEREADEACHSTEPCAREFULLY!InordertologintoMariaDBtosecureit,we'llneedthecurrentpasswordfortherootuser.Ifyou'vejustinstalledMariaDB,andyouhaven'tsettherootpasswordyet,thepasswordwillbeblank,soyoushouldjustpressenterhere.Entercurrentpasswordforroot(enterfornone):OK,successfullyusedpassword,movingon...SettingtherootpasswordensuresthatnobodycanlogintotheMariaDBrootuserwithouttheproperauthorisation.Setrootpassword?[Y/n]YNewpassword:123Re-enternewpassword:123Passwordupdatedsuccessfully!Reloadingprivilegetables.....Success!……此处省略部分代码……Cleaningup...Alldone!Ifyou'vecompletedalloftheabovesteps,yourMariaDBinstallationshouldnowbesecure.ThanksforusingMariaDB!3.部署数据库这里设置的用户名默认为root,密码为123。2.3

搭建LNMP平台2.3.2

LNMP的分离部署及测试(4)登陆数据库测试,并授予应用服务器操作权限。[root@db1~]#mysql-uroot-p123WelcometotheMariaDBmonitor.Commandsendwith;or\g.YourMariaDBconnectionidis11Serverversion:5.5.68-MariaDBMariaDBServerCopyright(c)2000,2018,Oracle,MariaDBCorporationAbandothers.Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement.MariaDB[(none)]>grantallon*.*toroot@'39'identifiedby'123';QueryOK,0rowsaffected(0.00sec)MariaDB[(none)]>flushprivileges;QueryOK,0rowsaffected(0.00sec)MariaDB[(none)]>\qBye3.部署数据库成功登录数据库完成相关授权。2.3

搭建LNMP平台2.3.2

LNMP的分离部署及测试(5)在网站默认目录下创建文件link.php。[root@db1~]#cat/usr/share/nginx/html/link.php<?php$link=mysql_connect('2','root','123');if($link)echo"Successfully";elseecho"Fail";mysql_close();?>3.部署数据库(6)在浏览器中访问link.php,结果如图。2.4Nginx-负载均衡反向代理与负载均衡Nginx负载均衡的优缺点Nginx负载均衡算法Nginx负载均衡后端状态Nginx负载均衡的应用2.4

Nginx-负载均衡2.4.1

反向代理与负载均衡Nginx不仅是一款优秀的Web软件,还可以作为七层代理和负载均衡。七层负载均衡在应用层,可以完成很多应用方面的协议请求,比如HTTP应用负载均衡,它可以实现HTTP信息的改写、头信息的改写、安全应用规则控制、URL匹配规则控制,以及转发、rewrite等规则。代理服务器(ProxyServer)是网络信息的中转站,是个人网络和Internet服务商之间的中间代理机构,负责转发合法的网络信息,对转发进行控制和登记。代理服务器大多被用来连接Internet(国际互联网)和LocalAreaNetwork(局域网)。根据连接方式的不同,代理可以被分为正向代理和反向代理。2.4

Nginx-负载均衡2.4.1

反向代理与负载均衡正向代理可以隐藏客户端信息,使服务端无法判断是否为恶意访问,给网站带来了极大的安全隐患。由此,网站同样也会使用代理器,防止恶意的客户端会Web服务器的直接访问,而网站使用的代理器叫做反向代理。正向代理是处于客户端与服务端之间的代理节点。客户端将请求发送给正向代理,正向代理再向服务端进行请求,最终正向代理将响应返回给客户端,常见的正向代理有路由器、防火墙等。通常防火墙不允许客户机直接访问外网,正向代理的作用是代理内网客户机访问外网,并使外网服务端对客户机不可见,如图所示。2.4

Nginx-负载均衡2.4.1

反向代理与负载均衡正向代理和反向代理的区别在于代理的对象不一样,正向代理的代理对象是客户端,反向代理的代理对象是服务端。负载均衡也叫代理,是代理的一种,在Nginx负载集群中,Nginx仅仅是作为NginxProxy反向代理使用的,由于其反向代理的功能实现的效果是负载均衡集群的效果,本书把它称为Nginx负载均衡。Nginx做反向代理时,可以根据URL进行判断,然后分配到不同的后台Web服务器上,所以说它是一个典型的七层负载均衡器。反向代理同样是处于客户端与服务端之间的代理节点,与正向代理不同的是,反向代理是服务于客户端的代理节点。客户端的请求不会直接发送给服务端,而是先由反向代理服务器接收,再由反向代理发送给服务端,如图所示。2.4

Nginx-负载均衡2.4.1

反向代理与负载均衡当大量用户访问网站时,Nginx将用户的请求转发给后端对应的服务器,服务器处理完请求后再转发给Nginx负载均衡服务器,Nginx负载均衡服务器点最后响应给客户端,这样即可实现负载均衡的功能,以提升系统的吞吐量、请求性能、高容灾。Nginx要实现负载均衡需要用到proxy_pass代理模块配置,与Nginx的代理功能较为相似。当客户端访问时,Nginx负载均衡将客户端请求代理转发至一组上游服务器,如图所示。2.4

Nginx-负载均衡2.4.1

反向代理与负载均衡首先Nginx使用upstream模块定义后端的上游服务器组。在上游服务器组中可以添加多台后端服务器。然后在server模块中定义虚拟主机,但是这个虚拟主机不指定自己的Web目录站点,它将使用location规则匹配URL,然后转发到上面定义好的上游服务器组中,最后根据调度算法再转发到后端服务器上。Nginx负载均衡实现原理如图所示。2.4

Nginx-负载均衡2.4.2

Nginx负载均衡的优缺点Nginx作为负载均衡具备如下特点。1.作为开源软件,功能强大,性能卓越,运行稳定。2.配置文件简单灵活。3.有内置的健康检查功能,能够自动剔除工作不正常的后端服务器。4.上传文件使用异步模式。5.支持多种分配策略,可以分配权重,分配方式灵活。Nginx作为负载均衡的优缺点如下所示。优点Nginx可以复制用户请求。在后端服务器出现问题时,Nginx会再复制一份请求发给另一台后端服务器。LVS在这种情况下,只能由用户重新发请求。Nginx可以根据域名、URL识别用户的请求类型,因此Nginx可以做动静分离。而LVS作为4层负载均衡,只能针对IP进行负载均衡,无法针对文件类型做负载均衡。Nginx为开源软件,可以免费使用。缺点Nginx不仅要把用户的请求发送给后端真实服务器,还要将后端真实服务器返回的页面发送给用户,流量会经过Nginx,所以Nginx可能成为瓶颈。2.4

Nginx-负载均衡2.4.3

Nginx负载均衡算法负载均衡将流量分发给后端Web服务器,不同的算法对应着负载均衡不同的流量分发方式。下面是Nginx常用的5种算法。1.轮询算法(RoundRobin,简称RR)2.加权轮询算法(WeightRoundRobin,简称WRR)3.IP_hash算法4.fair公平算法5.URL_hash算法2.4

Nginx-负载均衡2.4.3

Nginx负载均衡算法1.轮询算法(RoundRobin,简称RR)轮询算法是负载均衡分发流量的默认算法。负载均衡调度器通过轮询调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。在配置文件的upstream模块中轮询算法的示例代码。#配置服务器组upstreamtest{server1:8080;server2:8080;}server{······此处省略部分代码······#引用服务器组location/{proxy_passhttp://test;proxy_set_headerHost$host:$server_port;}}2.4

Nginx-负载均衡2.4.3

Nginx负载均衡算法2.加权轮询算法(WeightRoundRobin,简称WRR)负载均衡调度器可以通过weight指定轮询的权重,权重(比例)越大,被调度的次数越多。在配置文件的upstream模块中加权轮询算法的示例代码。upstreamtest{server1:8080weight=10;server2:8080weight=5;}3.IP_hash算法负载均衡调度器根据每个请求IP进行调度,可以解决会话的问题,且不能使用weight。即负载均衡调度器会将同一个客户端IP,发给同一个Web服务器。在配置文件的upstream模块中IP_hash算法的示例代码。upstreamtest{ip_hash;server1:8080;server2:8080;}2.4

Nginx-负载均衡2.4.3

Nginx负载均衡算法4.fair公平算法fair公平算法是Nginx借助第三方插件实现的调度算法。负载均衡调度器可以根据请求页面的大小和加载时间长短进行调度,前提是使用第三方的upstream_fair模块。当客户端请求页面比较大时,负载均衡则将请求转发给后端配置比较高的Web服务器。在配置文件的upstream模块中fair公平算法的示例代码。upstreambackserver{serverserver1;serverserver2;fair;}2.4

Nginx-负载均衡2.4.3

Nginx负载均衡算法5.URL_hash算法URL_hash算法是Nginx借助第三方插件实现的调度算法。负载均衡调度器按照客户端请求的URL进行hash之后再进行调度,使每个URL定向到同一服务器,前提是使用第三方的hash模块。当用户再一次之前访问过的页面时,负载均衡就将请求转发给同一个真实服务器。在配置文件的upstream模块中URL_hash算法的示例代码。upstreambackserver{hash$request_uri;hash_methodcrc32;server1:8080;server2:8080;}2.4

Nginx-负载均衡2.4.4

Nginx负载均衡后端状态后端Web服务器在前端Nginx负载均衡调度中的状态,主要有以下几种。down:表示当前的服务器暂时不参与负载。weight:默认值为1。weight值越大,负载的权重就越大。max_fails:表示允许请求失败的次数,默认值为1。当超过最大次数时,返回proxy_next_upstream模块定义的错误。fail_timeout:达到max_fails所指定的失败次数后需要暂停的时间。backup:所有的非backup状态的服务器,down或者压力很大时,backup服务器将会开始接受请求,所以这台服务器压力会最小。client_body_in_file_only:设置为on可以将客户端上传的数据记录到文件中用来做调试。client_body_temp_path:设置记录文件的目录,最多可以设置3层目录。Location:对URL进行匹配,可以进行重定向或者进行新的负载均衡。2.4

Nginx-负载均衡2.4.5

Nginx负载均衡的应用实际上,对于用户访问量不大的小型企业来说,一般用不到负载均衡。访问流量一般的中型企业,通常只做四层负载均衡或七层负载均衡中的一种。而一些大型企业中,每时每刻访问量都非常大,通常四、七层负载均衡都会做,常见的负载架构如图所示。2.4

Nginx-负载均衡2.4.4

Nginx负载均衡后端状态大型企业中首先会搭建LVS进行四层请求的分发,分发后的请求再经过七层负载均衡器Nginx才能到达后端真实的服务器接受处理。总的来说,负载均衡不论是各种软件还是硬件上的解决方案,主要是将大量的并发请求按照一定的规律分发给不同的服务器处理,从而减少某台服务器的瞬时压力,提高网站的高可用性。Nginx在负载均衡的应用之所以广泛,主要归功于它的灵活配置,一个nginx.conf文件解决大部分问题,不论是Nignx创建虚拟服务器、Nginx的反向代理服务器,还是本文介绍的Nginx的负载均衡,几乎都在这个配置文件中进行。在服务器上只需要把Nginx搭建完成即可运行起来,而且它是一款轻量级应用,只需要占用小部分资源即可实现多种实用性功能。2.5Web集群实战案例-业务上线工作原理准备环境部署数据库论坛业务上线部署负载均衡-Nginx实现Web服务负载均衡2.5

Web集群实战案例-业务上线2.5.1

工作原理在负载均衡集群中,Web服务集群的所有服务器节点向客户端提供相同的服务。集群负载均衡器则会接收用户的入站请求,然后将请求分摊给后端的Web服务集群。这样即可实现负载均衡的功能,以提升系统的吞吐量、请求性能、高容灾。本节的案例中,将Nginx作为负载均衡器,也是反向代理服务器,在Web集群上部署博客应用,其工作原理如图2.22所示。Nginx要实现负载均衡需要用到proxy_pass代理模块配置,与Nginx的代理功能较为相似。所有用户的请求统一发送到Nginx负载均衡器,然后根据负载均衡器的调度算法请求访问web1和web2。2.5

Web集群实战案例-业务上线2.5.1

工作原理准备4台VM虚拟机(或者物理服务器),一台做负载均衡器,两台Web服务器做集群,一台做数据库服务器,具体如表所示。HostNameIP说明lb139Nginx负载均衡器web140Web服务器部署论坛应用web241Web服务器部署论坛应用db142数据库服务器说明:数据库服务器采用Mariadb进行实现,操作系统版本CentOS7.6,提前关闭防火墙及SELinux(过程不再赘述)。2.5

Web集群实战案例-业务上线2.5.1

工作原理为了保证各服务器的时间一致,保证工作内容不会受时间干扰(有些计划工作内容与时间相关度很高),给用户提供更优质的服务,一般工作时都需要将网站后台所有服务器的时间进行校准。1.首先,通过各个服务器上在服务器中安装ntpdate工具,具体如下所示。在使用ntpdate工具校对时间时,在命令中添加时间服务器的IP地址或域名即可。而时间服务器的IP地址或域名只需要通过搜索引擎进行搜索即可得到。此处参考NTP授时快速域名服务网站(/),这个网站中有大量的时间服务器IP地址可供选择。[root@qfedu~]#

yum-yinstallntpdate2.5

Web集群实战案例-业务上线2.5.1

工作原理2.通过网站主页面中的“IP池”,即可获取时间服务器IP地址,如图所示。“IP池”中的时间服务器IP地址都是由网站本身、企业或个人提供的,为了保证其服务的可靠性,应尽量选择由网站本身或企业提供的时间服务器IP地址。3.此处选用阿里云提供的1进行时间校对,将“IP池”中对应时区的时间服务器IP添加到时间调整命令中。[root@qfedu~]#ntpdate-u12.5

Web集群实战案例-业务上线2.5.1

工作原理4.在线上业务中为了保证服务器系统时间的准确性,可以通过配置计划任务定时对系统时间进行校准。[root@qfedu~]#crontab-e*/30****ntpdate-u1[root@qfedu~]#crontab-l*/30****ntpdate-u1添加了一条每30分钟校准一次系统时间的计划任务。2.5

Web集群实战案例-业务上线2.5.3

部署数据库1.在准备的数据库服务器(42)上部署Mariadb。首先安装MariaDB客户端与服务端[root@db1~]#yum-yinstallmariadbmariadb-server……此处省略部分代码……已安装:mariadb.x86_641:5.5.68-1.el7mariadb-server.x86_641:5.5.68-1.el7作为依赖被安装:perl-Compress-Raw-Bzip2.x86_640:2.061-3.el7……此处省略部分代码……

作为依赖被升级:mariadb-libs.x86_641:5.5.68-1.el7完毕!完毕!2.启动MariaDB服务,并设置其开机自启。[root@db1~]#systemctlstartmariadb[root@db1~]#systemctlenablemariadb2.5

Web集群实战案例-业务上线2.5.3

部署数据库3.通过如下指令进入数据库安全设置模式,更改数据库密码。[root@db1~]#mysql_secure_installation……此处省略部分代码……Setrootpassword?[Y/n]YNewpassword:123Re-enternewpassword:123Passwordupdatedsuccessfully!Reloadingprivilegetables.....Success!……此处省略部分代码……Cleaningup...Alldone!Ifyou'vecompletedalloftheabovesteps,yourMariaDBinstallationshouldnowbesecure.ThanksforusingMariaDB!这里设置的用户名默认为root,密码为123。2.5

Web集群实战案例-业务上线2.5.3

部署数据库4.登录数据库,授予Web服务器操作权限,然后创建网站数据库。[root@db1~]#mysql-uroot-p123……此处省略部分代码……MariaDB[(none)]>grantallon*.*toroot@'40'identifiedby'123';QueryOK,0rowsaffected(0.00sec)MariaDB[(none)]>grantallon*.*toroot@'41'identifiedby'123';QueryOK,0rowsaffected(0.00sec)#创建discuz数据库,做Web集群的数据库MariaDB[(none)]>createdatabasediscuz;QueryOK,1rowaffected(0.21sec)MariaDB[(none)]>flushprivileges;QueryOK,0rowsaffected(0.06sec)MariaDB[(none)]>\qBye2.5

Web集群实战案例-业务上线2.5.4

论坛业务上线1.在两台Web服务器上搭建LNMP环境,首先安装Nginx,并设置为开机自启。[root@web1~]#yuminstall-ynginx[root@web1~]#systemctlstartnginx[root@web1~]#systemctlenablenginx2.Nginx服务启动后,会坚守在系统的80端口等待用户请求的到来。检查Nginx是否正常工作在80端口。[root@web1~]#netstat-unltp|grep80tcp00:80:*LISTEN14484inx:mastertcp600:::80:::*LISTEN14484inx:master3.下载安装PHP-FPM及相关插件。[root@web1~]#yuminstall-yphp-fpmphp-mysqlphp-gd4.PHP-FPM安装完成后,将其开启并设置其开机自启。[root@web1~]#systemctlstartphp-fpm[root@web1~]#systemctlenablephp-fpm2.5

Web集群实战案例-业务上线2.5.4

论坛业务上线5.PHP正常工作在9000端口,查看PHP-FPM的进程信息。[root@web1~]#netstat-anpt|grepphp-fpmtcp00:9000:*LISTEN72441/php-fpm:mast6.由于Nginx默认只处理以.html结尾的文件,而现在网站要处理PHP文件,那么需要将.php文件加入网站处理的范围,更新网站接收的文件类型。[root@web1~]#vi/etc/nginx/conf.d/default.confserver{listen80;server_namelocalhost;location/{root/usr/share/nginx/html;indexindex.phpindex.htmlindex.htm;}location

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论