Lamp架构搭建

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

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

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_02

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_03

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_04

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_05

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_06

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_07

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_08

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_09

并开启。

##PHP为9000端口:

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_10

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_11

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_12

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_13

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_14

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

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_15

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_16

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

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_17

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_18

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_19

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_20

##编辑PHP发布目录:

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_21

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_22

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_24

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_25

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

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_27

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

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_28

##查看主机解析:

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_29

##有一个bbs本地解析

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_30

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_31

    ##安装第一步,上传upload

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_32

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

    ##给bbs增加虚拟主机

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_33

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

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_35

##检查语法并重新加载nginx:Lamp架构搭建 --之论坛搭建和交叉存储_论坛_36

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_37

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

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_38

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_39

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_40

##全新安装一个论坛:

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_41

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_42

##刷新一下数据库:

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_43

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_44

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

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_45

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_46

      ##修改权限:

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_47

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_48

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_49

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_50

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_51

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_52

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_53

   ##删除:

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_54

   ##重新加载:

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_55

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

第三部分: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架构应该是这样的:

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_56

   ###安装Java虚拟机

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_57

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

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_58

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_59

    ##之前的环境变量:

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_60

    ##现在的环境变量:

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_61

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

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_62

##写一个Java脚本:

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_63

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_64

    ##编译执行Java

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_65

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

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_66

##开启tamcat

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_67

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_68

##编辑tomcat的发布文:

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_69

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_70

##访问发布文件:

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_71

    ##会显示日期

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

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

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

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

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_72

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_73

    ##记得nginx  reload

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_74

##而默认是跳转到PHP:

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_75

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_76

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_77

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

##server1 中的:

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_78

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_79

   ##cp到server2:

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_80

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_81

##查看server2中的设置:

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_82

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_83

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_84

##访问server2 的8080端口:

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_85

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

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_86

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_87

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_88

    ##重新加载nginx:

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_89            ##检测

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

          #对server1:

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_90

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_91

          #对server2:

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_92

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_93

##检测:

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_94

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_95

##将server2 tomcat干掉;

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_96

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_97

##再将server2 tomcat开启:

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_98

第七部分:memcache 和 Telnet安装

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

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

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_99

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_100

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_101

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_102

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_103

##将nginx中的ip_hash也打开:

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_104

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_105

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_106

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_107

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_108

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

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_109

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

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_110

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

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_111

#################下面补充一下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的配置文件:

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_112

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_113

Memcachede 的大小是64M

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

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_114

   ##问题:现在可用的内存空间简单的来说是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架构搭建 --之论坛搭建和交叉存储_lamp_115

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

##安装Telnet:

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_116

##查看本地的11211端口:

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_117

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_118

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_119

##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架构搭建 --之论坛搭建和交叉存储_论坛_120

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

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_121

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_122

##然后就是make和make install。

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_123

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_124

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

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_125

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

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_126

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_127

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_128

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

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_129

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_130

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_131

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_132

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_133

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_134

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

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_135

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_136

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_137

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_138

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

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_139

##然后将server2 的tomcat干掉:

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_140

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_141

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_142

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_143

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

Lamp架构搭建 --之论坛搭建和交叉存储_lamp_144

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

Lamp架构搭建 --之论坛搭建和交叉存储_交叉存储_145

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_146

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

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

Lamp架构搭建 --之论坛搭建和交叉存储_论坛_147