Lamp架构搭建

--之论坛搭建和交叉存储

第一部分:PHP配置并与nginx的结合:

    ##将安装包中的ini文件拷贝到PHP的配置文件中,并将主配置目录中的启动文件改个名字:

Lamp架构搭建 --之论坛搭建和交叉存储_第1张图片

    ##编辑主配置文件改动三处:

wps7485.tmp

wps7486.tmp

wps7487.tmp

wps7488.tmp

    ##编辑启动文件,将PID打开,

wps7489.tmp

wps748A.tmp

##将启动PHP的命令放入默认的目录:

wps748B.tmp

Lamp架构搭建 --之论坛搭建和交叉存储_第2张图片

并开启。

##PHP为9000端口:

Lamp架构搭建 --之论坛搭建和交叉存储_第3张图片

##下面是编辑nginx的配置文件,将9000端口与nginx联系起来:

Lamp架构搭建 --之论坛搭建和交叉存储_第4张图片

     ##将关于PHP的行打开,并将PHP的默认发布文件加入nginx访问的默认文件中:

Lamp架构搭建 --之论坛搭建和交叉存储_第5张图片

wps749F.tmp

wps74A0.tmp

    ##看到.conf ,说明还要对主配置文件进行修改

wps74A1.tmp

Lamp架构搭建 --之论坛搭建和交叉存储_第6张图片

    ##检查语法,失败,将原来做的stickel改为ip_hash,

wps74A3.tmp

Lamp架构搭建 --之论坛搭建和交叉存储_第7张图片

    ##在检查语法,就没有错误,开启nginx,检查端口:

Lamp架构搭建 --之论坛搭建和交叉存储_第8张图片

##访问nginx,发现并没有将两者联系起来,是因为没有编辑PHP发布文件,所以访问的是nginx的发布目录:

Lamp架构搭建 --之论坛搭建和交叉存储_第9张图片

##编辑PHP发布目录:

wps74A7.tmp

wps74A8.tmp

    ##再次刷新,就可以访问了:Lamp架构搭建 --之论坛搭建和交叉存储_第10张图片##将数据库开启:

wps74AA.tmp

##再次在nginx上访问PHP页面,就会发现mysql  mysqli  mysqldb  等模块。

Lamp架构搭建 --之论坛搭建和交叉存储_第11张图片

第二部分:nginx PHP MySQL论坛的搭建

    ##获得论坛的压缩包,查看怎么将zip格式的压缩包压缩到指定目录。Lamp架构搭建 --之论坛搭建和交叉存储_第12张图片

wps74AD.tmp

    ##将论坛压缩到nginx的默认发布目录

wps74BE.tmp

##查看主机解析:

wps74BF.tmp

##有一个bbs本地解析

##在将论坛解压到nginx的默认发布目录(html)下后会在html下生成readme.txt文件查看文件内容:

Lamp架构搭建 --之论坛搭建和交叉存储_第13张图片

    ##这里会有详细的安装 步骤:

Lamp架构搭建 --之论坛搭建和交叉存储_第14张图片

    ##安装第一步,上传upload

Lamp架构搭建 --之论坛搭建和交叉存储_第15张图片

###修改nginx的配置文件,将bbs论坛的主机名同nginx和PHP联系起来:

    ##给bbs增加虚拟主机

Lamp架构搭建 --之论坛搭建和交叉存储_第16张图片

    ##之前对PHP所做的工作在外边,只是应用于nginx,不能应用于bbs虚拟主机:

Lamp架构搭建 --之论坛搭建和交叉存储_第17张图片        ##要将PHP的相关设置放进虚拟主机中来并将主发布目录由原来的nginx的发布目录改为bbs的发布目录:

Lamp架构搭建 --之论坛搭建和交叉存储_第18张图片

##检查语法并重新加载nginx:wps74D5.tmp

   ##至此nginx  PHP  论坛的联系就做完了,现在用浏览器访问bbs:

Lamp架构搭建 --之论坛搭建和交叉存储_第19张图片

##可以开始安装,点击我同意后,会新出现以下界面:

Lamp架构搭建 --之论坛搭建和交叉存储_第20张图片

##这是因为我们缺少了论坛搭建的第二步,改权限:

Lamp架构搭建 --之论坛搭建和交叉存储_第21张图片

##再次刷新,就可以了:

Lamp架构搭建 --之论坛搭建和交叉存储_第22张图片

##全新安装一个论坛:

Lamp架构搭建 --之论坛搭建和交叉存储_第23张图片

##一超级用户的身份增加一个数据库discuz并将它的所有权限赋予本地的wxh用户,并且赋予密码。

Lamp架构搭建 --之论坛搭建和交叉存储_第24张图片

##刷新一下数据库:

Lamp架构搭建 --之论坛搭建和交叉存储_第25张图片

##现在就可以用wxh 用户登录数据库了:

Lamp架构搭建 --之论坛搭建和交叉存储_第26张图片

##安装数据库,实现数据库和论坛的联系:

Lamp架构搭建 --之论坛搭建和交叉存储_第27张图片

#会出现以下报错,是因为数据库的data目录权限问题,需要将data目录赋予755的权限,这样其他的人就可以读取数据库的数据和执行一些命令,否则论坛将别人讲不能做任何事。

Lamp架构搭建 --之论坛搭建和交叉存储_第28张图片

      ##修改权限:

Lamp架构搭建 --之论坛搭建和交叉存储_第29张图片

##返回上一步,再进来,就好了,然后会进入安装数据库的界面,会不断创建数据表,安装数据,安装附加目录,初始化记录,清空目录等工作:

Lamp架构搭建 --之论坛搭建和交叉存储_第30张图片

Lamp架构搭建 --之论坛搭建和交叉存储_第31张图片

     ##在数据库中查看建立的数据表:

Lamp架构搭建 --之论坛搭建和交叉存储_第32张图片

Lamp架构搭建 --之论坛搭建和交叉存储_第33张图片

##然后就可以用管理员登录管理bbs了,在管理中心可以对bbs进行管理,包括管理员创建普通用户等:

Lamp架构搭建 --之论坛搭建和交叉存储_第34张图片

##点开腾讯,会提醒你以下内容:

Lamp架构搭建 --之论坛搭建和交叉存储_第35张图片

   ##删除:

wps7574.tmp

   ##重新加载:

Lamp架构搭建 --之论坛搭建和交叉存储_第36张图片

##至此,一个论坛就搭建好了。

第三部分:Java虚拟机的安装及设置环境变量和tomcat的安装

在开始第三部分之前,我们需要搞清楚PHP, JSP,ASP的区别,下面是详细讲解的网址:http://developer.51cto.com/art/200508/50.htm

简单来说:

    ASP是一个WEB服务器端的开发环境,利用它可以产生和执行动态的、互动的、高性能的WEB服务应用程序。

PHP是一种跨平台的服务器端的嵌入式脚本语言。它大量地借用C,Java和Perl语言的语法, 并耦合PHP自己的特性,使WEB开发者能够快速地写出动态产生页面。它支持目前绝大多数数据库。所以说PHP与MySQL是现在绝佳的群组合。但是对于不同的数据库提供的接口也不统一,这是它的一个弱点。

JSP是Sun公司推出的新一代网站开发语言,Sun公司借助自己在Java上的不凡造诣,将Java从Java应用程序和Java Applet之外,又有新的硕果,就是JSP,Java Server Page。JSP可以在Serverlet和JavaBean的支持下,完成功能强大的站点程序。

我们说了半天的lamp架构,什么是lamp架构,广义上的lamp架构应该是这样的:

wps7585.tmp

   ###安装Java虚拟机

##获得Java虚拟机的包并且解压,并且设置软连接:

Lamp架构搭建 --之论坛搭建和交叉存储_第37张图片

    ##将有关Java的命令放进环境变量:

wps7597.tmp

wps7598.tmp

    ##之前的环境变量:

wps7599.tmp

    ##现在的环境变量:

wps759A.tmp

##当我们没有把命令放进环境变量时,可以用绝对路径进行命令:

Lamp架构搭建 --之论坛搭建和交叉存储_第38张图片

##写一个Java脚本:

wps759C.tmp

Lamp架构搭建 --之论坛搭建和交叉存储_第39张图片

    ##编译执行Java

wps759E.tmp

第四部分:安装apache-tamcat(处理JSP)

    ##获得包,解压创建连接,

Lamp架构搭建 --之论坛搭建和交叉存储_第40张图片

##开启tamcat

Lamp架构搭建 --之论坛搭建和交叉存储_第41张图片

##这样就可以通过浏览器访问tomcat了:

Lamp架构搭建 --之论坛搭建和交叉存储_第42张图片

##编辑tomcat的发布文:

Lamp架构搭建 --之论坛搭建和交叉存储_第43张图片

wps75B3.tmp

##访问发布文件:

wps75B4.tmp

    ##会显示日期

    ##下面这篇博文简述了JVM(Java虚拟机)的安装,tomcat的安装,以及为tomcat定义MySQL连接器:

http://zhaochj.blog.51cto.com/368705/974093

第四部分:将JSP交给Apache-tomcat

##我们每次访问一个网站的时候,一定是只输入网址,最多再输入发布目录,不会每次都输入端口,这就需要做以下工作,将JSP和Apache-tomcat联系起来:

Lamp架构搭建 --之论坛搭建和交叉存储_第44张图片

    ##模仿PHP的增加JSP的代理,意思是在访问nginx时就会将jsp的8080端口包括在内,只需要加上JSP的发布目录就可以访问JSP的内容:

Lamp架构搭建 --之论坛搭建和交叉存储_第45张图片

    ##记得nginx  reload

wps75B7.tmp

##而默认是跳转到PHP:

Lamp架构搭建 --之论坛搭建和交叉存储_第46张图片

Lamp架构搭建 --之论坛搭建和交叉存储_第47张图片

##当然也可以访问nginx自身的发布目录(因为我们把他设置为自动跳转到PHP,所以要想访问nginx自己的发布目录,就必须加上目录路径):

Lamp架构搭建 --之论坛搭建和交叉存储_第48张图片

第五部分:将server1中的Java,tomcat,以及环境变量cp到server2

##server1 中的:

Lamp架构搭建 --之论坛搭建和交叉存储_第49张图片

wps75CB.tmp

   ##cp到server2:

wps75CC.tmp

wps75CD.tmp

##查看server2中的设置:

Lamp架构搭建 --之论坛搭建和交叉存储_第50张图片

Lamp架构搭建 --之论坛搭建和交叉存储_第51张图片

##把httpd和它的开机启动项都关了:

wps75D0.tmp

##访问server2 的8080端口:

wps75D1.tmp

第六部分:增加后端负载均衡

第五部分的目的是为了第六部分增加负载均衡做准备:

wps75D2.tmp

Lamp架构搭建 --之论坛搭建和交叉存储_第52张图片

wps75E4.tmp

    ##重新加载nginx:

wps75E5.tmp            ##检测

     #为了检测方便,我们将两个负载均衡器的发布目录做一区别:

          #对server1:

Lamp架构搭建 --之论坛搭建和交叉存储_第53张图片

wps75E7.tmp

          #对server2:

wps75E8.tmp

wps75E9.tmp

##检测:

wps75EA.tmp

wps75EB.tmp

##将server2 tomcat干掉;

wps75EC.tmp

##那将只有server1起作用,但不耽误系统的正常运行:

wps75ED.tmp

##再将server2 tomcat开启:

wps75EE.tmp

第七部分:memcache 和 Telnet安装

在访问浏览器时,以正在注册一个账号为例,在这中间可能会一台服务器挂掉,那么因为有负载均衡器的存在,虽然你可以继续你的工作,但是数据会丢失,往往到最后你去提交数据时会重新回到最初的界面,会让你再次注册,这就比较尴尬了。所以我们就需要处理和存储分离,这样的话,一台挂掉,另一台会同步之前的数据,避免了数据的丢失。

##下面是先实现nginx,tomcat,memcached的结合;:

##将从文档中cp过来的放到JSP的发布目录中:

Lamp架构搭建 --之论坛搭建和交叉存储_第54张图片

Lamp架构搭建 --之论坛搭建和交叉存储_第55张图片

##然后复制到server2的相同目录中:

wps7600.tmp

  ##之前的脚本就是为了实现下面的登录界面,并且也实现了负载均衡:

Lamp架构搭建 --之论坛搭建和交叉存储_第56张图片

Lamp架构搭建 --之论坛搭建和交叉存储_第57张图片

##将nginx中的ip_hash也打开:

Lamp架构搭建 --之论坛搭建和交叉存储_第58张图片

##现在是server1 在起作用,添加两个数据:

Lamp架构搭建 --之论坛搭建和交叉存储_第59张图片

##新增加的数据都存储在下面这个文件中:

Lamp架构搭建 --之论坛搭建和交叉存储_第60张图片

Lamp架构搭建 --之论坛搭建和交叉存储_第61张图片

##而server2 中相应位置并没有存储,还是自己存自己的:

wps7607.tmp

##现在我们将server1 的tomcat干掉:

wps7608.tmp

##再增加一个数据,发现现在负载均衡跑到server2上,并且之前输入的数据都不见了:

Lamp架构搭建 --之论坛搭建和交叉存储_第62张图片

##检测现在数据的存放位置,存放在server2中,所以,现在有两个负载均衡器,但是数据时自己存自己的,并不能起到数据不丢失的作用,这就需要memcached的了,下面就安装memcached。

wps760A.tmp

#################下面补充一下memcached的知识:

##memcached是nosql的一种类型,本质上属于key-value存储系统,可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis也是一种key-value存储系统包含了其他功能,他支持的value类型更加多,包括string list set【集合】 zset【有序集合】 hash类型)。

##现在mc+MySQL是常用的,具体用法如下:

#介绍一个生产环境中memcached的使用场景,主要是memcached存储关系型数据库mysql的查询结果,比如网站的下载排名等,这种查询每次从关系型数据库中查询,会增加磁盘的I/O开销,而这个排名不需要实时的更新,所以我们把这个结果存在memcached中,memcached是把数据序列化存放在内存中,我们可以设置超时时间,然后周期性的从关系型数据库查询新的结果更新到memcached中。

可以用python来写个小的demo演示这个场景。首先python连接memcached和mysql需要加载对应的模块。程序的作用就是:先从memcached查询薪水最高的两个人,打印他们的姓名和薪水,如果没有返回结果,说明memcached中不存在,那么我们从关系型数据库mysql中去查询结果,然后更新在memcached中,再次请求,就会从memcached直接返回结果。

##查看memcached的配置文件:

wps760B.tmp

wps760C.tmp

Memcachede 的大小是64M

    ##用free  -m可以查看内存的可用空间:

wps760D.tmp

   ##问题:现在可用的内存空间简单的来说是free+cached+buffers,但是这样说是不全面的,因为free是空闲物理内存的总量,buffer是用于buffer的内存总量,cache是用于cache的内存总量。这里就需要提到buffer与cache的区别了,buffer是存储从外界读取还没放进磁盘的内容,通过定期将内容写入磁盘,就可以减少重复的查找磁道和减少磁盘的碎片化。Cache是从内存中读取存放在cache中,是以块存储的,当外界再次访问时,直接访问cache,从而减少了磁盘的IO。

##插播一条面试经验,在面试时不会问怎么用ls命令,而会问怎么用ls命令查看最大文件(ls -S | hesd -1),-S是将文件按照从大到小的顺序排列,最近的文件(ls  -t |head -1)。-t是将文件按照修改时间的由近到远排列。

##话不多说,继续我们的memcached,开启memcached,memcached是11211端口。

Lamp架构搭建 --之论坛搭建和交叉存储_第63张图片

   ##同样,在sever2 上安装memcached,并开启,在这里就不展示了。

##安装Telnet:

wps760F.tmp

##查看本地的11211端口:

Lamp架构搭建 --之论坛搭建和交叉存储_第64张图片

Lamp架构搭建 --之论坛搭建和交叉存储_第65张图片

##然后就可以在下面进行增加或者删除查看相关内容。

Lamp架构搭建 --之论坛搭建和交叉存储_第66张图片

##mc+redis的组合能干什么呢???回头再讲。

第八部分:交叉存储和session共享

##首先需要了解到ip-hash与sticky的区别,ip-hash是通过ip来访问服务器的,sticky是通过cookies来访问服务器的,这对于有cdn的服务器ip-hash就会失去效果,因为client在访问nginx等服务器时,会通过cnd,这样访问nginx的将是cdn的ip,而不管client是谁。所以要想实现交叉存储,就必须让服务器识别client,所以就用到了sticky。

##为了便于做实验,我们将之前的nginx安装包和nginx-stick包都给删除,并且把nginx停掉。

Lamp架构搭建 --之论坛搭建和交叉存储_第67张图片

##然后解压nginx的包,关闭debug:

Lamp架构搭建 --之论坛搭建和交叉存储_第68张图片

##然后解压我们的sticky包(从别处获取),增加sticky模块,完成make的第一步:

wps7625.tmp

##然后就是make和make install。

##然后编辑nginx的配置文件,将负载均衡改为sticky模式:

wps7626.tmp

Lamp架构搭建 --之论坛搭建和交叉存储_第69张图片

##改完配置文件后,检测语法,并且开启nginx:

wps7628.tmp

##现在负载均衡的是server2,将server2的tomcat干掉:

wps7629.tmp

##将下载好的memcached-session管理包放进tomcat的lib目录下面,并且要删除旧的包:sever1和server2都要做。

Lamp架构搭建 --之论坛搭建和交叉存储_第70张图片

##然后将文档中的用于交叉存储的脚本放进配置文件:

Lamp架构搭建 --之论坛搭建和交叉存储_第71张图片

##这段脚本的意思是,如果错误访问自己,也就是说,如果正确会交叉存储。

wps762C.tmp

wps762D.tmp

    ##server2中做相同的步骤,只是把n1换成了n2:

wps762E.tmp

wps763F.tmp

##将server1中的tomcat开启,并检测是否安装成功:

Lamp架构搭建 --之论坛搭建和交叉存储_第72张图片

    ##将server2中的tomcat开启,并检测是否安装成功:

Lamp架构搭建 --之论坛搭建和交叉存储_第73张图片

  ##现在使用节点2建立两个数据:

Lamp架构搭建 --之论坛搭建和交叉存储_第74张图片

##数据应该存储在server1 memcached中,但是,结果是在server2中:

Lamp架构搭建 --之论坛搭建和交叉存储_第75张图片

##复制此时的ID用Telnet检测:

Lamp架构搭建 --之论坛搭建和交叉存储_第76张图片

##可以看到确实我们增加的数据存储到了server1中:

Lamp架构搭建 --之论坛搭建和交叉存储_第77张图片

#而server2 却get不到任何数据,这就说明确实实现了交叉存储:

Lamp架构搭建 --之论坛搭建和交叉存储_第78张图片

##然后将server2 的tomcat干掉:

wps7647.tmp

##增加user3,user4,在增加user3的时候,会自动跳转到节点1,但是ID并没有变化:

Lamp架构搭建 --之论坛搭建和交叉存储_第79张图片

   ##并且这些数据会存储在节点2的memcached中,

Lamp架构搭建 --之论坛搭建和交叉存储_第80张图片

#然后将节点1的tomcat干掉:

wps764A.tmp

##增加user5,会跳到节点2处理但是ID还是没变:

Lamp架构搭建 --之论坛搭建和交叉存储_第81张图片

##然后将节点1的memcached关闭:

wps764C.tmp

##这个时候,节点2的数据就会存储在自己的memcached中,此时id也发生了变化,这就是之前设置的,当memcached有错时,才存储到自己这里:

Lamp架构搭建 --之论坛搭建和交叉存储_第82张图片

##在server2 上安装Telnet,用你Telnet检测自己的11211端口,会发现这确实是存储在了本地。

##这样就实现了交叉存储,就可以有效的减少session端数据的丢失。

Lamp架构搭建 --之论坛搭建和交叉存储_第83张图片