设为首页 收藏本站
查看: 1046|回复: 0

[经验分享] LNMP的架构及应用(如论坛搭建,memcached、tomcat的整合等)

[复制链接]

尚未签到

发表于 2018-11-30 09:47:50 | 显示全部楼层 |阅读模式
LNMP架构及应用

  

  LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。

Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。
  Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
      有以下优势:
          作为web服务器,nginx处理静态文件、索引文件,自动索引的效率非常高;

          作为代理服务器,nginx可以实现无缓存的反向代理加速,提高网站的运行速度;

          作为负载均衡服务器,nginx既可以在内部直接支持Rails和PHP,也可以支持HTTP代理服务器对外进行服务,同时还支持简单的容错和利用算法进行负载均衡;

          在性能上,占用很少的资源,能支持更多的并发连接,达到更高的访问效率;
          在功能上,nginx是优秀的代理服务器和负载均衡服务器;
          安装配置上,nginx安装简单、配置灵活;
          性能方面,nginx是专门为性能优化而开发的,非常注重效率。它采用Poll模型,可以支持更多的并发连接,最大可以支持对50000个并发连接数的形影,而且只占用很低的内存资源;

          高可用性,nginx支持热部署,启动速度特别迅速,可以在不间断服务的情况下,对软件版本或者配置进行升级,及时运行数月也无需重新启动,几乎可以做到7*24显示不间断运行


Mysql是一个小型关系型数据库管理系统。
PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。
  这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。
  

  1.Nginx的安装及基本的使用配置


nginx.org       官网


tar zxf nginx-1.4.2.tar.gz
nginx-1.4.2/src/core
vi nginx.h
#define NGINX_VER          "nginx/"    NGINX_VERSION    //NGINX_VERSION显示版本,可以去掉,以防***恶意***  

#nginx-1.4.2/auto/cc
#vi gcc
# debug
#CFLAGS="$CFLAGS -g"                   //关闭debug调试  

#./configure --prefix=/usr/local/lnmp/nginx \
--with-http_ssl_module \
--withhttp_stub_status_module        //编译,启用https加密 和nginx 的 NginxStatus 功能,
//用来监控 Nginx 的当前状态。  

  #make && make install
  

#cd  /usr/local/lnmp/nginx/sbin
#ln  -s  /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/           //将nginx命令加入环境变量
#useradd -M -s /sbin/nologin nginx  

#vim  conf/nginx.conf
user  nginx nginx;
worker_processes  2;
events {
use epoll;                  //优化nginx
worker_connections  1024;
}
http {                                                              //打开日志功能
log_format  main  '$remote_addr - $remote_user [$time_local]"$request" '
'$status $body_bytes_sent "$http_referer"'
'"$http_user_agent""$http_x_forwarded_for"';
server  {
location /status {
stub_status on;
access_log off;
}
}
}  Nginx支持如下处理连接的方法(I/O复用方法),这些方法可以通过use指令指定。

  •   select - 标准方法。如果当前平台没有更有效的方法,它是编译时默认的方法。你可以使用配置参数--with-select_module和--without-select_module来启用或禁用这个模块。
  •   poll - 标准方法。如果当前平台没有更有效的方法,它是编译时默认的方法。你可以使用配置参数--with-poll_module和--without-poll_module来启用或禁用这个模块。
  •   kqueue - 高效的方法,使用于FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和MacOS X. 使用双处理器的MacOSX系统使用kqueue可能会造成内核崩溃。
  •   epoll - 高效的方法,使用于Linux内核2.6版本及以后的系统。在某些发行版本中,如SuSE8.2, 有让2.4版本的内核支持epoll的补丁。
  

  

  nginx -t                    //检测语法
  nginx                       //启动nginx
  nginx -s reload             //重新加载nginx
  nginx -s stop               //关闭nginx
  

  nginx实现虚拟主机
  

vi nginx.conf
http {
server {
listen       80;
server_name  www.tjf.com;
location / {
root   /html/tjf;
index  index.html index.htm;
}
}
server {
listen       80;
server_name  www.ty.com;
location / {
root   /html/ty;
index  index.html index.htm;
}
}
}  

[root@node5 conf]# mkdir /html
[root@node5 conf]# mkdir /html/tjf
[root@node5 conf]# mkdir /html/ty
[root@node5 conf]# echo "tjf" >/html/tjf/index.html
[root@node5 conf]# echo "ty" >/html/ty/index.html
[root@node5 conf]# nginx -s reload  在/etc/hosts中加入解析,浏览器访问域名就可以实现虚拟主机
  

  nginx负载均衡:
  

  

#vi nginx.conf
upstream ty {            //ty只是一个名字,可以随便
server 192.168.0.25:8080  weight=3;   //weight设置该服务器每次被访问的次数
server 192.168.0.26:8080;
}              //加在http{}中  想让那个server实现负载均衡,就修改其server{}内的语句
  

server {
listen          80;
server_name     www.ty.org;
# access_log      logs/ty.org.access.log main;
location / {
proxy_pass http://ty;
}
}  

  nginxsession保持:
  使用nginx sticky模块实现基于cookie的负载均衡
  即一个ip一次始终就访问一个tomcat服务器,(当用户注册账户时,第一个注册页注册完成,执行下一步时即切换页面,不会切到另一台tomcat服务器),另外一个ip访问下一台tomcat服务器
#nginx -s stop         //给nginx添加模块徐重新编译,先stop
#tar zxf nginx-sticky-module-1.1.tar.gz
#cd nginx-1.4.2
#make clean#./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module--with-http_stub_status_module--add-module=/root/nginx-sticky-module-1.1
#make && make install  

#vim /usr/local/lnmp/nginx/conf/nginx.conf     //配置文件中加入sticky模块
upstream ty {
sticky;
server 192.168.1.25:8080;
server 192.168.1.26:8080;
}  #nginx //启动nginx,就可以发现一个ip每次在有效时间内始终访问一台tomcat服务器
  

  https 加密web访问
  

cd /etc/pki/tls/certs
make cert.pem               //密钥和密文均在此文件
cp cert.pem /usr/local/lnmp/nginx/conf  

vim nginx.conf     //将HTTPSserver段打开,即去掉#
ssl_certificate      cert.pem;
ssl_certificate_key  cert.pem;  

  nginx -t
  nginx -s reload
  

  访问浏览器

  获取证书



  2.Mysql的源码安装
  



mysql-5.5.12.tar.gz


#yum install cmake make gcc gcc-c++
#tar zxf mysql-5.5.12.tar.gz
#cd mysql-5.5.
  
#cmake-DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql  \          #安装目录
>-DMYSQL_DATADIR=/usr/local/lnmp/mysql/data  \              #数据库存放目录
>-DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock  \     #Unixsocket 文件路径
>-DWITH_MYISAM_STORAGE_ENGINE=1  \                        #安装 myisam 存储引擎
>-DDEFAULT_CHARSET=utf8  \                                 #使用utf8 字符
>-DDEFAULT_COLLATION=utf8_general_ci  \                     #校验字符
>-DEXTRA_CHARSETS=all                                        #安装所有扩展字符集http://s3.运维网.com/wyfs02/M02/25/70/wKioL1NfuC3D3SDUAAGKJ1lmLNs537.jpg



出现此问题根据提示知道需要安装yuminstall ncurses-devel,安装完后删除缓存文件CMakeCache.txt,重新执行编译


make && make install
useradd -M -s /sbin/nologin mysql
cd /usr/local/lnmp/mysql
cd scripts/

./mysql_install_db --user=mysql--basedir=/usr/local/lnmp/mysql/--datadir=/usr/local/lnmp/mysql/data/                //可以使用./mysql_install_db--help查看参数信息



chown -R root.mysql/usr/local/lnmp/mysql/*
chown -R mysql data/cp support-files/my-medium.cnf/etc/my.cnf     //配置文件
cp mysql.server /etc/init.d/mysqld            //启动脚本
service mysqld start#vi /root/.bash_profile   

PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin
       // //现在直接使用mysql等命令,可能无法执行,需要配置环境变量,查找源码编译后的mysql命令路径为/usr/local/lnmp/mysql/bin,将其加入该文件PATH后,以分号相隔,即
#source .bash_profile        //使其生效




  3.php的源码安装
gd是一个用以生成图片的库
libiconv用于实现一个字符编码到另一个字符编码的转换
mhash是一个哈稀演函数库,它可以支持多种哈稀演算法,如MD5、SHA1
libmcrypt可以使php支持更多加密算法


tar zxf libiconv-1.13.1.tar.gz            #加强系统对支持字符编码转换的功能
cd libiconv-1.13.1
./configure--prefix=/usr/local/lnmp/modules/libiconv
make && make install

tar jxf libmcrypt-2.5.8.tar.bz2    # mcrypt mhash 是 php 加密算法扩展库
cd libmcrypt-2.5.8
./configure--prefix=/usr/local/lnmp/modules/libmcrypt
make && make install

cd libltdl/
./configure --prefix=/usr/local/lnmp/modules/libmcrypt/libltdl --enable-ltdl-install
make && make install

tar jxf mhash-0.9.9.9.tar.bz2
cd mhash-0.9.9.9
./configure--prefix=/usr/local/lnmp/modules/mhash
make && make install  

tar zxf mcrypt-2.6.8.tar.gz
cd  mcrypt-2.6.8
./configure--prefix=/user/local/lnmp/modules/mcrypt --with-libmcrypt-prefix=/user/local/lnmp/modules/libmcrypt






此处会报错如上,需要如下操作:
#vi /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/lnmp/modules/libmcrypt/lib
#ldconfig

重新编译会报mhash错误,如下

  

  

需操作
vi /etc/ld.so.conf         添加如下一条
/usr/local/lnmp/modules/mhash/lib
ln -s/usr/local/lnmp/modules/mhash/lib/* /usr/local/lib
ln -s/usr/local/lnmp/modules/mhash/include/* /usr/loca/include
ldconfig

再重新编译则OK
#make && make install


Php软件包依赖性:
yum install net-snmp-devel curl-devellibxml2-devel libpng-devel libjpeg-devel freetype-
devel gmp-devel


tar jxf php-5.4.12.tar.bz2
cd php-5.4.12
./configure--prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc \
--with-mysql=/usr/local/lnmp/mysql --with-openssl --with-snmp --with-gd \
--with-zlib --with-curl --with-libxml-dir --with-png-dir --with-jpeg-dir \
--with-freetype-dir --with-pear --with-gettext --with-gmp --enable-inline-optimization \
--enable-soap --enable-ftp \
--enable-sockets --enable-mbstring --with-mysqli=/usr/local/lnmp/mysql/bin/mysql_config \
--enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx \
--with-mcrypt=/usr/local/lnmp/modules/libmcrypt --with-mhash





#make ZEND_EXTRA_LIBS='-liconv'    #ZEND 加速php执行,手工指定将iconv加到php额外库中,
#一般来说这些库的增加php可以自动完成,但是iconv需要手工操作加入

#vi /etc/ld.so.conf
usr/local/lnmp/modules/libiconv/lib
#ln -s/usr/local/lnmp/modules/libiconv/lib/* /usr/local/lib
#ldconfig

#make install
#cd /usr/local/lnmp/php/etc


#cp php-fpm.conf.default php-fpm.conf
#vi php-fpm.conf
;pid = run/php-fpm.pid    //去掉前边的注释  


#cd php-5.4.12
#cp php.ini-production  /usr/local/lnmp/php/etc/php.ini            #适合php生产环境下的配置文件
#vi /usr/local/php/etc/php.ini
cgi.fix_pathinfo=0    #防止Nginx 文件类型错误解析漏洞
date.timezone = Asia/Shanghai    #设置时区

#cd sapi/fpm/
#cp init.d.php-fpm /etc/init.d/fpm          //fpm启动脚本,默认端口为9000
#chmod +x /etc/init.d/fpm
#/etc/init.d/fpm start

现在就可以配置nginx访问php测试页如下:
vi /usr/local/lnmp/nginx/conf/nginx.conf
server {
location / {
root   html;
index  index.phpindex.html index.htm;                 //记得要添加index.php
}
location ~ \.php$ {
root           html;
fastcgi_pass  127.0.0.1:9000;
fastcgi_index index.php;
#   fastcgi_param SCRIPT_FILENAME  /scripts$fastcgi_script_name;
include       fastcgi.conf;
}
}

#cat html/index.php

#nginx -s reload                                                //浏览器访问ip/index.php看到php测试页则成功
http://s3.运维网.com/wyfs02/M01/25/70/wKioL1NfvQDgTRjwAAKmacpR090044.jpg
现在LNMP架构已经搭建完成,接下来在lnmp架构上搭建一个bbs网站
软件下载地址
http://download.comsenz.com/DiscuzX/


1. 上传 upload目录中的文件到服务器
2. 设置目录属性(windows服务器可忽略这一步)
以下这些目录需要可读写权限
        ./config
        ./data 含子目录
3. 执行安装脚本/install/
请在浏览器中运行install 程序,即访问http://您的域名/论坛目录/install/

  • 参照页面提示,进行安装,直至安装完毕


安装完后如下
http://s3.运维网.com/wyfs02/M00/25/70/wKiom1NfvZ2hxr-tAAI7XdGMaUU454.jpg





  Tomcat动态页面:
Tomcat 服务器是一个免费的开放源代码的动态Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选
tomcat相当于jsp的解释器,主要用于动态页面,nignx适用于web静态页面


安装tomcat必须要安装jdk
安装jdk-6u32-linux-x64.bin
sh jdk-6u32-linux-x64.bin
mv jdk1.6.0_32/ /usr/local/jdk        //移动到指定目录
vim /etc/profile                      //设置java全局变量
export JAVA_HOME=/usr/local/jdk
exportCLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib       //指定java库目录
export PATH=$PATH:$JAVA_HOME/binsource /etc/profile                  //使其立即生效


tar zxf apache-tomcat-7.0.42.tar.gz -C/usr/local/lnmp/
cd/usr/local/lnmp/apache-tomcat-7.0.42/bin
./startup.sh              //tomcat默认打开端口为8080
浏览器访问192.168.1.25:8080就可以看到tomcat网页
http://s3.运维网.com/wyfs02/M00/25/70/wKioL1NfvkKDP3QAAAL4qIT2K-w672.jpg




每次访问都得加上:8080,若不想加可以修改nginx.conf
   location ~ \.jsp$ {
            proxy_pass  http://127.0.0.1:8080;
        }
这样就可以不用加:8080端口访问192.168.1.25/index.jsp,现在jsp动态网页是通过nginx访问
http://s3.运维网.com/wyfs02/M00/25/70/wKiom1NfvqTxLZOaAAIslUY7r9k365.jpg


因为nginx现在不支持图片功能,所以访问时不能正常显示图片,此时需要在ngix.conf加入一下字段:
    location ~\.(png|gif|css|jsp|js)${
            root/usr/local/lnmp/tomcat/webapps/ROOT;
    }
再次访问即可出现图片
测试页内容Thissystem's time is




  使用nginx实现tomcat动态页面的负载均衡
vi nginx.conf
http {
    upstream ty {
        server 192.168.1.25:8080;                                //25、26主机上都装有tomcat
        server 192.168.1.26:8080;
    }
}
server {
location ~ \.jsp$ {
            proxy_pass   http://ty;
        }
}


配置好各服务器的jsp动态网页文件
nginx -s reload
现在就可以访问实现负载均衡了




-----------------------------------------------------------


Memcached
是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
memcache为php的一个模块,使php能够使用内存存储,加载到内存提高访问速度


enterprise6的Package里提够memcached
RPM 包安装
yum install memcached
/etc/init.d/memcached start


  

telnet localhost 11211         //测试memcached是否成功打开
  stats 查看状态
  set 设置
  add 添加
  get 查看delete 删除

  

tomcat负载均衡的session控制
(正在访问的服务器宕机,直接切换至另台server,上次访问的记录仍可用)


session:  

http://s3.运维网.com/wyfs02/M01/25/71/wKioL1Nfv56yC8O4AAAZLrygU7Y333.jpg交叉存储memcache


Tomcat-1 (T1) 将session 存储在 memcached-2(T2)上。只有当 M2 不可用时,T1才将 session 存
储在memcached-1 上(M1 是T1 failoverNode)。使用这种配置的好处是,当T1 和 M1 同时崩
溃时也不会丢失session 会话,避免单点故障。


官网http://code.google.com/p/memcached-session-manager


首先A、B已经为tomcat负载均衡:
A:
1、
          asm-3.2.jar                             minlog-1.2.jar
   kryo-1.04.jar                           msm-kryo-serializer-1.6.5.jar
   kryo-serializers-0.10.jar               reflectasm-1.01.jar
  memcached-session-manager-1.6.3.jar      spymemcached-2.7.3.jar
  memcached-session-manager-tc7-1.6.3.jar         //tc7对应tomcat的版本7
                                 //将.jar包放至tomcat/lib目录,一定注意包的版本
2、
vim/tomcat/conf/context.xml
3、


cd /tomcat/webapps/ROOT
vi test.jsp              //创建测试页


ClusterApp Test

Server Info:

0) {
String dataValue =request.getParameter("dataValue");
session.setAttribute(dataName,dataValue);
}
out.print("Sessionlist");
Enumeration e =session.getAttributeNames();
while (e.hasMoreElements()) {
String name =(String)e.nextElement();
String value =session.getAttribute(name).toString();
out.println( name + " = "+ value+"");
System.out.println( name + " =" + value);
}
%>

name:

key:




4、


/etc/init.d/memcached start
/tomcat/bin/./shutdown.sh
/tomcat/bin/./startup.sh          //重启tomcat

tail -f /tomcat/logs/catalina.out  //查看日志,如初始化finished,则成功
INFO: MemcachedSessionServicefinished initialization……

B:中1、3、4步骤一样,2配置的内容稍微有改变










运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-641447-1-1.html 上篇帖子: 关于启动tomcat时端口号被占用的解决办法 下篇帖子: Linux学习总结(五十一)tomcat 搭建zrlog
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表