一.mysql的编译
1.获得 解压 mysql-boost-5.7.11.tar.gz
tar zxf mysql-boost-5.7.11.tar.gz
2.进入解压后的目录中,开始源码编译三部曲
3.安装工具包和依赖包
yum install -y gcc gcc-c++ ncurses-devel bison openssl-devel zlib-devel
4.获取安装cmake工具,系统带的版本太低,cmake-2.8.12.2-4.el6.x86_64.rpm
yum install cmake-2.8.12.2-4.el6.x86_64.rpm
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 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_BOOST=./boost/boost_1_59_0/
6.编译完成后安装,时间较长,耐心等待(如果是虚拟机的话,可以增加内存和cpu)
make && make install
大约过了半小时,编译安装完了
7.保留原配置文件
mv /etc/my.cnf /etc/my.cnf.bak
8.把启动脚本放到正常位置/etc/init.d/
cd /usr/local/lnmp/mysql/support-files
cp mysql.server /etc/init.d/mysqld -p
9.新建mysql用户
useradd mysql
10.设置环境变量
vim ~/.bash_profile
--PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin
source ~/.bash_profile
11.初始化
mysqld --initialize --user=mysql --basedir=/usr/local/lnmp/mysql/ --datadir=/usr/local/lnmp/mysql/data
(初始化密码:phlrCyiw=2lw)
12.权限问题
除了date其他所有人应该是root
chown root.mysql /usr/local/lnmp/mysql/* -R
chown mysql.mysql /usr/local/lnmp/mysql/data -R
13.ok重启数据库服务,登陆,修改密码
/etc/init.d/mysqld start
mysql -p密码 ##登陆
alter user root@localhost identified by 'redhat';
#万一忘记了密码:
/etc/init.d/mysqld stop
mysqld_safe --skip-grant-tables &
mysql
select * from user\G;
update user set authentication_string=password('westos') where user='root';
二.php-fmp
1.获得解压php-5.6.20.tar.bz2
tar jxf php-5.6.20.tar.bz2
2.进入解压后的目录
[root@host1 ~]# cd php-5.6.20
3.解决依赖问题
这些仓库可以提供
yum install libxml2-devel-2.7.6-14.el6.x86_64
yum install openssl-devel-1.0.1e-15.el6.x86_64
yum install libcurl-devel.x86_64
yum install libjpeg-turbo-devel-1.2.1-1.el6.x86_64
yum install libpng-devel-1.2.49-1.el6_2.x86_64
yum install freetype-devel-2.3.11-14.el6_3.1.x86_64
yum install gmp-devel-4.3.1-7.el6_2.2.x86_64
yum install net-snmp-devel.x86_64
这几个第三方下载:这里已经下好了再家目录下
libmcrypt-2.5.8-9.el6.x86_64.rpm
libmcrypt-devel-2.5.8-9.el6.x86_64.rpm
re2c-0.13.5-1.el6.x86_64.rpm
4.解决依赖问题安装
5编译
./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc --enable-mysqlnd --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --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 --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-mcrypt --with-mhash
报错缺个依赖包
安装好后继续编译:总之却那个依赖包安装就行
出现这个标示ok
6.安装
make && make install
7.文件的配置:刚才编译使我们指定路径/usr/local/lnmp/,来看看有没有东西
有东西,看上去好了
7.1新建个nginx用户
useradd nginx
7.2进入到/usr/local/lnmp/php/etc
复制php-fpm.conf.default 为php-fpm.conf
复制刚才解压的目录/root/php-5.6.20/下的php.ini-production(开发配置文件)到当前目录(/usr/local/lnmp/php/etc)下的php.ini
cd /usr/local/lnmp/php/etc
cp -p php-fpm.conf.default php-fpm.conf
cp /root/php-5.6.20/php.ini-production /usr/local/lnmp/php/etc/php.ini
7.3修改时区
vim php.ini (/usr/local/lnmp/php/etc)
------->>date.timezone =Asia/Shanghai
7.4配置启动脚本
复制刚解压的目录下的sapi/fpm/init.d.php-fpm到 /etc/init.d/php-fpm,给x权限(看清楚,别复制错了)
cp -p /root/php-5.6.20/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
/etc/init.d/php-fpm start
三.nginx安装
1.获得解压nginx-1.10.1.tar.gz和nginx-sticky-module-ng.tar.gz(模块)
2.解压两个包
3.进入 nginx-1.10.1.tar.gz解压的目录中
[root@host1 ~]# tar zxf nginx-1.10.1.tar.gz
[root@host1 ~]# tar zxf nginx-sticky-module-ng.tar.gz
取消bug测试
vim /root/nginx-1.10.1/auto/cc/gcc
取消版本号(安全考虑)
vim /root/nginx-1.10.1/src/core/nginx.h
4.编译(注意依赖)
./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --add-module=/root/nginx-sticky-module-ng
如果报错安装对应依赖,这里缺少pcre-devel.x86_64 0:7.8-6.el6
yum install pcre-devel.x86_64 0:7.8-6.el6
安装完再次编译
5.安装
[root@host1 nginx-1.10.1]# make && make install
6.刚才指定编译路径/usr/local/lnmp/进去看看
cd /usr/local/lnmp/nginx/html/
vim index.php
----<?php
phpinfo()
?>
7.配置nginx文件
cd /usr/local/lnmp/nginx/conf
vim nginx.conf
---->>
2 user nginx;
3 worker_processes auto;
12 events {
13 worker_connections 65535;
14 }
43 location / {
44 root html;
45 index index.php index.html index.htm;
46 }
65 location ~ \.php$ {
66 root html;
67 fastcgi_pass 127.0.0.1:9000;
68 fastcgi_index index.php;
69 # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
70 include fastcgi.conf;
71 }
注意点:nginx配置文件第13行1024标示nginx缓存最大文件数,再/etc/security/limits.conf 修改
vim /etc/security/limits.conf
-- nginx - nofile 65535
保存退出,查看是否有问题,没有问题启动nginx
/usr/local/lnmp/nginx/sbin/nginx -t
/usr/local/lnmp/nginx/sbin/nginx
8浏览器查看nginx的默认发布目录/usr/local/lnmp/nginx/html
三.论坛为例数据库的链接说明
1.获得论坛模块解压
yum install unzip
unzip Discuz_X3.2_SC_UTF8.zip -d /usr/local/lnmp/nginx/html/ ##解压到nginx默认发布目录
[root@host1 ~]# unzip Discuz_X3.2_SC_UTF8.zip -d /usr/local/lnmp/nginx/html/
2.进入到nginx默认发布目录
这里新建了一个目录bbs,把upload下的所有东西移到了bbs目录下
[root@host1 ~]# cd /usr/local/lnmp/nginx/html/
[root@host1 html]# ls
50x.html index.html index.php readme upload utility
[root@host1 ~]# cd /usr/local/lnmp/nginx/html/
[root@host1 html]# ls
50x.html index.html index.php readme upload utility
浏览器前端论坛怛建
点击我同意,好多x得解决问题
加权限注意功过目录在那
cd /usr/local/lnmp/nginx/html/bbs/
chmod 777config/ -R
chmod 777 data/ -R
chmod 777 uc_client/ -R
chmod 777 uc_server/ -R
刷新下网页就可以进行下一步了
填写数据库密码,管理员密码等信息,点击下一步
报错,数据库链接错误
3.数据库配置
#3.1配置/usr/local/lnmp/php/etc/php.ini
vim /usr/local/lnmp/php/etc/php.ini
--->
1001 pdo_mysql.default_socket=/usr/local/lnmp/mysql/data/mysql.sock
1150 mysql.default_socket =/usr/local/lnmp/mysql/data/mysql.sock
1209 mysqli.default_socket =/usr/local/lnmp/mysql/data/mysql.sock
#3.2配置/usr/local/lnmp/mysql/date
chmod 755 /usr/local/lnmp/mysql/data/
#3.3重新加载php服务开启数据库
/etc/init.d/php-fpm reload
刷新网页,ok
数据库查看下
四.memcache 再pfp-fpm
1.lnmp服务端安装yum install memcached.x86_64(仓库就有)
yum install memcached
2.开启memcached服务
/etc/init.d/memcached start (netstat -anlpute | grep 11211 11211端口要开启)
3.环境变量 为了使用phpize
vim ~/.bash_profile
----->>PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/php/bin
source ~/.bash_profile
4.获得解压memcache-2.2.5.tgz
tar xf memcache-2.2.5.tgz
5.6.进入到解压后的目录memcache-2.2.5
[root@host1 ~]# cd memcache-2.2.5
[root@host1 memcache-2.2.5]# phpize
6.编译,安装
[root@host1 memcache-2.2.5]# ./configure --enable-memcache
[root@host1 memcache-2.2.5]#make && make install
7.查看模块
cd /usr/local/lnmp/php/lib/php/extensions/no-debug-non-zts-20131226/
ls
`
####8.php -m | grep memcache什么也没有正常(php加载的模块)
php -m | grep memcache
9.给php加入memcahce模块
vim /usr/local/lnmp/php/etc/php.ini
-----862 extension=memcache.so
/etc/init.d/php-fpm reload
再次检查模块有没有加载,加载则正常,否则有问题
php -m | grep memcache
----->>memcache
10.进入memcache-2.2.5.tgz解压后的目录,cp两个文件到nginx的默认发布目录中
[root@host1 ~]# cd memcache-2.2.5
[root@host1 memcache-2.2.5]# cp memcache.php /usr/local/lnmp/nginx/html/
[root@host1 memcache-2.2.5]# cp example.php /usr/local/lnmp/nginx/html/
11.修改memcache.php
cd /usr/local/lnmp/nginx/html/
vim memcache.php
22 define('ADMIN_USERNAME','memcache'); // Admin Username
23 define('ADMIN_PASSWORD','123'); // Admin Password 改密码为123
28 $MEMCACHE_SERVERS[] = 'localhost:11211'; // add more as an array ##服务器ip这里是本地服务器
29 #$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array 注释掉只有一台服务器
12.浏览器查看
http://172.25.254.1/memcache.php
http://172.25.254.1/example.php
http://172.25.254.1/example.php每刷新一次,http://172.25.254.1/memcache.php的hits率就会上升,memcache缓存
真机测试:
ab -c 10 -n 1000 http://172.25.254.1/memcache.php
ab -c 10 -n 1000 http://172.25.254.1/example.php
五.memcache 再nginx
1.获得解压openresty-1.13.6.1.tar.gz
[root@host1 ~]# tar zxf openresty-1.13.6.1.tar.gz
2.进入解压后的目录编译
cd openresty-1.13.6.1
./configure --add-module=/root/nginx-sticky-module-ng --without-http_ssl_module
gmake
gmake install
3.关闭 /usr/local/lnmp/nginx/sbin/nginx
/usr/local/lnmp/nginx/sbin/nginx -s stop
4.把/usr/local/lnmp/nginx/html/下的几个网页复制到/usr/local/openresty/nginx/html/
cp /usr/local/lnmp/nginx/html/index.php /usr/local/openresty/nginx/html/
cp /usr/local/lnmp/nginx/html/example.php /usr/local/openresty/nginx/html/
cp/usr/local/lnmp/nginx/html/memcache.php /usr/local/openresty/nginx/html/
5.编辑/usr/local/openresty/nginx的配置文件
vim /usr/local/openresty/nginx/nginx.conf
--->>
2 user nginx;
3 worker_processes auto;
12 events {
13 worker_connections 65535;
18 upstream memcache{
19 server 172.25.254.6:11211;
20 keepalive 512;
21 }
66 location /memc{
67 internal;
68 memc_connect_timeout 100ms;
69 memc_send_timeout 100ms;
70 memc_read_timeout 100ms;
71 set $memc_key $query_string;
72 set $memc_exptime 300;
73 memc_pass memcache;
74 }
77 location ~ \.php$ {
78 set $key $uri$args;
79 srcache_fetch GET /memc $key;
80 srcache_store PUT /memc $key;
81 root html;
82 fastcgi_pass 127.0.0.1:9000;
83 fastcgi_index index.php;
84 # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
85 include fastcgi.conf;
86 }
/usr/local/openresty/nginx/sbin/nginx -s reload ##重新加载
6.浏览器查看 出现以下标识成功默认发布目录/usr/local/openresty/nginx/html/
http://172.25.254.1/
真机shell
ab -c 10 -n 1000 http://172.25.254.1/memcache.php
ab -c 10 -n 1000 http://172.25.254.1/example.php
对比memcache再php-fmp和nginx的Requests per second: 1167.27 [#/sec] (mean)每秒请求数据帧,要比memcache再php-fmp高出许多
六.Tomcat+nginx+memcache
1.get jdk-7u79-linux-x64.tar.gz和get apache-tomcat-8.5.24.tar.gz
2.解压到/usr/local/
tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
tar zxf apache-tomcat-8.5.24.tar.gz -C /usr/local/
3.做个链接或者重命名复制等都可以,为了方便
ln -s /usr/local/jdk1.7.0_79/ /usr/local/java
ln -s /usr/local/apache-tomcat-8.5.24/ /usr/local/tomcat
4.java环境变量设置
vim /etc/profile
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
echo $PATH ##查看
5.再/mnt下写一个简单的java程序
cd /mnt
vim test.java
-----
public class test{
public static void main(String[] args)
{
System.out.println("hello world!");
}
}
ok,没问题
6.启动tomcat
/usr/local/tomcat/bin/startup.sh ##启用tomcat
浏览器测试
7.写一个test.jsp(Tomcat的默认发布目录 cd /usr/local/tomcat/webapps/ROOT/)
vim /usr/local/tomcat/webapps/ROOT/test.jsp
-------host1 time is:<%=new java.util.Date() %>
浏览器:http://172.25.254.1:8080/test.jsp
8.我们让每次访问不需要输入端口号8080
vim /usr/local/openresty/nginx/conf/nginx.conf
------>>
63 location ~ \.jsp$ {
64 proxy_pass http://127.0.0.1:8080;
65 }
/usr/local/openresty/nginx/sbin/nginx -s reload
浏览器查看
或者再前边定义tomcat,后边引用也行
9.添加两台tomcat服务器
#1.把host1的/usr/local/tomcat 和java各考份到host2的/usr/local下
cd /usr/local
scp -r tomcat/ host2:/usr/local/
scp -r java/ host2:/usr/local/
2.把host1下的/etc/profile考份给host2的/etc/profile,环境变量,也可以手动添加
vim /etc/profile
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
echo $PATH ##检查下
3.进入到host2的/usr/local/tomcat/webapps/ROOT修改test.jsp
vim /usr/local/tomcat/webapps/ROOT/test.jsp
host2 time is:<%=new java.util.Date() %>
/usr/local/tomcat/bin/startup.sh 重启tomcat服务
4.host1修改nginx配置文件
vim /usr/local/openresty/nginx/conf/nginx.conf
22 upstream tomcat {
23 sticky;
24 server 172.25.254.1:8080;
25 server 172.25.254.2.8080;
26 }
5.浏览器查看,不管怎么刷新就是不会显示2的test.jsp,这是因为memcache起作用了,第4步的nginx配置文件23行sticky模块,浏览器缓存了,第一次访问请求到的数据缓存起来,后边访问直接返还,
172.25.254.1/test.jsp
基于上边的实验,修改nginx配置文件注释掉sticky行,重新加载nginx
浏览器再次查看:
nginx+tomcat+memcached
系统环境:rhel6 x64 selinux and iptables disabled
主机角色:node1: 192.168.0.91:nginx tomcat memcached
node2: 192.168.0.92:tomcat memcached
软件下载:http://www.nginx.org
http://code.google.com/p/memcached-session-manager/
session 的序列化方案官方推荐的有 4 种:
1. java serialization
2. msm-kryo-serializer
3. msm-javolution-serializer
4. msm-xstream-serializer
其中性能最好的序列化方案是 Kryo,此实验我们采用 kryo 方式。
1.把如下软件包放置到host1和host2的/usr/local/tomcat/lib 目录中
kryo-1.03.jar
kryo-serializers-0.8.jar
memcached-2.5.jar
memcached-session-manager-1.5.1.jarmemcached-session-manager-tc7-1.5.1.jar
minlog-1.2.jar
msm-kryo-serializer-1.5.1.jar
reflectasm-0.9.jar
host1
host2
2.编辑tomcat的配置文件
host1
vi /usr/local/tomcat/conf/context.xml
<Context>
......
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.254.1:11211,n2:172.25.254.2:11211"
failoverNodes="n1" #在 node2 上此项设置为“n2”
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context>
/usr/local/tomcat/bin/startup.sh
/etc/init.d/memcached start
开启memcache,重启tomcat
host2
vim /usr/local/tomcat/conf/context.xml
<Context>
......
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.254.1:11211,n2:172.25.254.2:11211"
failoverNodes="n2" #在 node2 上此项设置为“n2”
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context>
/usr/local/tomcat/bin/startup.sh
完成后重启tomcat,安装mamcached,并启动
至此,ok
为了实验效果,我们再host1和host2写个明显的测试页test.jsp(保存到/usr/local/tomcat/webapps/ROOT/)
vim /usr/local/tomcat/webapps/ROOT/test.jsp
内容:
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br> ID " + session.getId()+"<br>");
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session list</b>");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"<br>");
System.out.println( name + " = " + value);
}
%>
<form action="test.jsp" method="POST">
name:<input type=text size=20 name="dataName">
<br>
key:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>
完成后给host2考份
scp /usr/local/tomcat/webapps/ROOT/test.jsp host2:/usr/local/tomcat/webapps/ROOT/
这个时候浏览器测试,什么也不会显示,因为我们用的是tomcat8以上版本,换个低点的:测试,实验步骤同上
apache-tomcat-7.0.37.tar.gz
完成配之后nginx注释掉了sticky,默认轮询,启动各自的tomcat检测下:
host1的tomcat服务正常
host2的tomcat服务正常
实验:
输入user1,123;user2,234,提交
cd /usr/local/tomcat/logs
cat cat catalina.out
host2查看缓存
关闭host1的tomcat,浏览器再怎么刷新数据也不会丢失