Lamp架构搭建
--之论坛搭建和交叉存储
第一部分:PHP配置并与nginx的结合:
##将安装包中的ini文件拷贝到PHP的配置文件中,并将主配置目录中的启动文件改个名字:
##编辑主配置文件改动三处:
##编辑启动文件,将PID打开,
##将启动PHP的命令放入默认的目录:
并开启。
##PHP为9000端口:
##下面是编辑nginx的配置文件,将9000端口与nginx联系起来:
##将关于PHP的行打开,并将PHP的默认发布文件加入nginx访问的默认文件中:
##看到.conf ,说明还要对主配置文件进行修改
##检查语法,失败,将原来做的stickel改为ip_hash,
##在检查语法,就没有错误,开启nginx,检查端口:
##访问nginx,发现并没有将两者联系起来,是因为没有编辑PHP发布文件,所以访问的是nginx的发布目录:
##编辑PHP发布目录:
##再次在nginx上访问PHP页面,就会发现mysql mysqli mysqldb 等模块。
第二部分:nginx PHP MySQL论坛的搭建
##获得论坛的压缩包,查看怎么将zip格式的压缩包压缩到指定目录。
##将论坛压缩到nginx的默认发布目录
##查看主机解析:
##有一个bbs本地解析
##在将论坛解压到nginx的默认发布目录(html)下后会在html下生成readme.txt文件查看文件内容:
##这里会有详细的安装 步骤:
##安装第一步,上传upload
###修改nginx的配置文件,将bbs论坛的主机名同nginx和PHP联系起来:
##给bbs增加虚拟主机
##之前对PHP所做的工作在外边,只是应用于nginx,不能应用于bbs虚拟主机:
##要将PHP的相关设置放进虚拟主机中来并将主发布目录由原来的nginx的发布目录改为bbs的发布目录:
##至此nginx PHP 论坛的联系就做完了,现在用浏览器访问bbs:
##可以开始安装,点击我同意后,会新出现以下界面:
##这是因为我们缺少了论坛搭建的第二步,改权限:
##再次刷新,就可以了:
##全新安装一个论坛:
##一超级用户的身份增加一个数据库discuz并将它的所有权限赋予本地的wxh用户,并且赋予密码。
##刷新一下数据库:
##现在就可以用wxh 用户登录数据库了:
##安装数据库,实现数据库和论坛的联系:
#会出现以下报错,是因为数据库的data目录权限问题,需要将data目录赋予755的权限,这样其他的人就可以读取数据库的数据和执行一些命令,否则论坛将别人讲不能做任何事。
##修改权限:
##返回上一步,再进来,就好了,然后会进入安装数据库的界面,会不断创建数据表,安装数据,安装附加目录,初始化记录,清空目录等工作:
##在数据库中查看建立的数据表:
##然后就可以用管理员登录管理bbs了,在管理中心可以对bbs进行管理,包括管理员创建普通用户等:
##点开腾讯,会提醒你以下内容:
##删除:
##重新加载:
##至此,一个论坛就搭建好了。
第三部分: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架构应该是这样的:
###安装Java虚拟机
##获得Java虚拟机的包并且解压,并且设置软连接:
##将有关Java的命令放进环境变量:
##之前的环境变量:
##现在的环境变量:
##当我们没有把命令放进环境变量时,可以用绝对路径进行命令:
##写一个Java脚本:
##编译执行Java
第四部分:安装apache-tamcat(处理JSP)
##获得包,解压创建连接,
##开启tamcat
##这样就可以通过浏览器访问tomcat了:
##编辑tomcat的发布文:
##访问发布文件:
##会显示日期
##下面这篇博文简述了JVM(Java虚拟机)的安装,tomcat的安装,以及为tomcat定义MySQL连接器:
http://zhaochj.blog.51cto.com/368705/974093
第四部分:将JSP交给Apache-tomcat
##我们每次访问一个网站的时候,一定是只输入网址,最多再输入发布目录,不会每次都输入端口,这就需要做以下工作,将JSP和Apache-tomcat联系起来:
##模仿PHP的增加JSP的代理,意思是在访问nginx时就会将jsp的8080端口包括在内,只需要加上JSP的发布目录就可以访问JSP的内容:
##记得nginx reload
##而默认是跳转到PHP:
##当然也可以访问nginx自身的发布目录(因为我们把他设置为自动跳转到PHP,所以要想访问nginx自己的发布目录,就必须加上目录路径):
第五部分:将server1中的Java,tomcat,以及环境变量cp到server2
##server1 中的:
##cp到server2:
##查看server2中的设置:
##把httpd和它的开机启动项都关了:
##访问server2 的8080端口:
第六部分:增加后端负载均衡
第五部分的目的是为了第六部分增加负载均衡做准备:
##重新加载nginx:
#为了检测方便,我们将两个负载均衡器的发布目录做一区别:
#对server1:
#对server2:
##检测:
##将server2 tomcat干掉;
##那将只有server1起作用,但不耽误系统的正常运行:
##再将server2 tomcat开启:
第七部分:memcache 和 Telnet安装
在访问浏览器时,以正在注册一个账号为例,在这中间可能会一台服务器挂掉,那么因为有负载均衡器的存在,虽然你可以继续你的工作,但是数据会丢失,往往到最后你去提交数据时会重新回到最初的界面,会让你再次注册,这就比较尴尬了。所以我们就需要处理和存储分离,这样的话,一台挂掉,另一台会同步之前的数据,避免了数据的丢失。
##下面是先实现nginx,tomcat,memcached的结合;:
##将从文档中cp过来的放到JSP的发布目录中:
##然后复制到server2的相同目录中:
##之前的脚本就是为了实现下面的登录界面,并且也实现了负载均衡:
##将nginx中的ip_hash也打开:
##现在是server1 在起作用,添加两个数据:
##新增加的数据都存储在下面这个文件中:
##而server2 中相应位置并没有存储,还是自己存自己的:
##现在我们将server1 的tomcat干掉:
##再增加一个数据,发现现在负载均衡跑到server2上,并且之前输入的数据都不见了:
##检测现在数据的存放位置,存放在server2中,所以,现在有两个负载均衡器,但是数据时自己存自己的,并不能起到数据不丢失的作用,这就需要memcached的了,下面就安装memcached。
#################下面补充一下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的配置文件:
Memcachede 的大小是64M
##用free -m可以查看内存的可用空间:
##问题:现在可用的内存空间简单的来说是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端口。
##同样,在sever2 上安装memcached,并开启,在这里就不展示了。
##安装Telnet:
##查看本地的11211端口:
##然后就可以在下面进行增加或者删除查看相关内容。
##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停掉。
##然后解压nginx的包,关闭debug:
##然后解压我们的sticky包(从别处获取),增加sticky模块,完成make的第一步:
##然后就是make和make install。
##然后编辑nginx的配置文件,将负载均衡改为sticky模式:
##改完配置文件后,检测语法,并且开启nginx:
##现在负载均衡的是server2,将server2的tomcat干掉:
##将下载好的memcached-session管理包放进tomcat的lib目录下面,并且要删除旧的包:sever1和server2都要做。
##然后将文档中的用于交叉存储的脚本放进配置文件:
##这段脚本的意思是,如果错误访问自己,也就是说,如果正确会交叉存储。
##server2中做相同的步骤,只是把n1换成了n2:
##将server1中的tomcat开启,并检测是否安装成功:
##将server2中的tomcat开启,并检测是否安装成功:
##现在使用节点2建立两个数据:
##数据应该存储在server1 memcached中,但是,结果是在server2中:
##复制此时的ID用Telnet检测:
##可以看到确实我们增加的数据存储到了server1中:
#而server2 却get不到任何数据,这就说明确实实现了交叉存储:
##然后将server2 的tomcat干掉:
##增加user3,user4,在增加user3的时候,会自动跳转到节点1,但是ID并没有变化:
##并且这些数据会存储在节点2的memcached中,
#然后将节点1的tomcat干掉:
##增加user5,会跳到节点2处理但是ID还是没变:
##然后将节点1的memcached关闭:
##这个时候,节点2的数据就会存储在自己的memcached中,此时id也发生了变化,这就是之前设置的,当memcached有错时,才存储到自己这里:
##在server2 上安装Telnet,用你Telnet检测自己的11211端口,会发现这确实是存储在了本地。
##这样就实现了交叉存储,就可以有效的减少session端数据的丢失。