搭建环境:Redhat6.5php
建议:将全部包放到/root下,与本文路径相同css
安装mysqlhtml
下载mysql:前端
官网:https://www.mysql.com/java
连接:https://pan.baidu.com/s/1kSVk-2ibHxpPijtKIty0ow node
提取码:ke57mysql
解压mysql源码包:linux
tar zxf mysql-boost-5.7.11.tar.gz -C /root #这里解压到/root下,由于后面编译的时候调用的是/root/mysql-5.7.11/自带的boost库nginx
安装cmake工具:c++
连接:https://pan.baidu.com/s/19Fftaqhq8ilcJPYZGr4e1g
提取码:4rop
yum localinstall cmake-2.8.12.2-4.el6.x86_64.rpm -y
安装依赖性:
yum install gcc gcc-c++ ncurses-devel bison -y #这些包Redhat镜像中自带
cd mysql-5.7.11/
编译:
#若是编译报错,首先删除编译过程当中生成的CMakeCache.txt文件,解决完报错后再使用cmake从新编译
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_INNOBASE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_BOOST=/root/mysql-5.7.11/boost/boost_1_59_0/
安装:
make install
#安装过程很长(大约30min),机器内存建议至少2G
建立mysql用户:
[root@server1 ~]# groupadd -g 27 mysql
[root@server1 ~]# useradd -u 27 -g 27 -M -d /usr/local/lnmp/mysql/ mysql
-M:不自动建立用户家目录
-d:指定用户家目录
[root@server1 ~]# usermod -s /sbin/nologin mysql
#设置mysql用户不能登陆系统
将mysql命令加入系统指令:
[root@server1 ~]# vim /root/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin
[root@server1 ~]# source /root/.bash_profile
修改mysql配置文件:
[root@server1 ~]# vim /etc/my.cnf
datadir=/usr/local/lnmp/mysql/data
socket=/usr/local/lnmp/mysql/data/mysql.sock
复制mysql启动脚本到系统目录下:
[root@server1 ~]# cd /usr/local/lnmp/mysql/support-files/
[root@server1 support-files]# cp mysql.server /etc/init.d/mysqld
数据库初始化:
#初始化以后会在/usr/local/lnmp/mysql目录下生成data目录
#这个过程会有卡顿,等待片刻就行
[root@server1 support-files]# mysqld --initialize --user=mysql
...
2018-01-27T14:44:19.987069Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2018-01-27T14:44:19.989551Z 1 [Note] A temporary password is generated for root@localhost: /2UMx3Btelb9 #这个码是随机生成的数据库初始密码
修改文件权限:
[root@server1 support-files]# cd /usr/local/lnmp/mysql/
[root@server1 mysql]# chown mysql.mysql . -R
[root@server1 mysql]# chown root . -R
[root@server1 mysql]# chown mysql data -R
[root@server1 mysql]# ll
total 60
drwxr-xr-x 2 root mysql 4096 Jan 27 22:22 bin
-rw-r--r-- 1 root mysql 17987 Feb 2 2016 COPYING
drwxr-x--- 5 mysql mysql 4096 Jan 27 22:46 data
drwxr-xr-x 2 root mysql 4096 Jan 27 22:21 docs
drwxr-xr-x 3 root mysql 4096 Jan 27 22:21 include
drwxr-xr-x 4 root mysql 4096 Jan 27 22:22 lib
drwxr-xr-x 4 root mysql 4096 Jan 27 22:21 man
drwxr-xr-x 10 root mysql 4096 Jan 27 22:22 mysql-test
-rw-r--r-- 1 root mysql 2478 Feb 2 2016 README
drwxr-xr-x 28 root mysql 4096 Jan 27 22:23 share
drwxr-xr-x 2 root mysql 4096 Jan 27 22:23 support-files
启动服务:
[root@server1 mysql]# /etc/init.d/mysqld start
第一次使用数据库须要设定密码:
#随机生成的密码没法正常登录数据库
[root@server1 mysql]# mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root: #输入刚才随机生成的数据库初始密码
The existing password for the user account root has expired. Please set a new password.
New password: #输入新密码
Re-enter new password: #确认新密码
... #后面的内容是让选择密码复杂度等,若是不想设定这些,直接一路按回车便可完成
登录数据库:
[root@server1 mysql]# mysql -p
Enter password: #输入刚才设定的新密码
安装php
php安装包及其依赖包汇总:
连接:https://pan.baidu.com/s/1E7Gal6zkBcozuAU7rTsF6A
提取码:tvoo
php官网:
解压源码包:
[root@server1 ~]# tar jxf php-5.6.20.tar.bz2
安装依赖性:
yum install gmp-devel net-snmp-devel libxml2-devel openssl-devel curl-devel -y
#下面这几个包redhat6.5镜像中没有,从分享的连接中下载
yum localinstall libmcrypt-devel-2.5.8-9.el6.x86_64.rpm gd-devel-2.0.35-11.el6.x86_64.rpm re2c-0.13.5-1.el6.x86_64.rpm libmcrypt-2.5.8-9.el6.x86_64.rpm -y
编译安装php:
[root@server1 ~]# cd php-5.6.20/
[root@server1 php-5.6.20]# ./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 --without-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
[root@server1 php-5.6.20]# make && make install #时间较长,7分钟左右
创建php-fpm配置文件:(php-fpm至关因而php的监听服务,由它守护(控制)着php服务的运行)
[root@server1 php-5.6.20]# cd /usr/local/lnmp/php/etc/
[root@server1 etc]# cp php-fpm.conf.default php-fpm.conf
创建php配置文件:
#回到解压出来的php包目录中,我以前是在/root下解压的包,所以到/root目录下寻找php配置模板
[root@server1 etc]# cd /root/php-5.6.20
[root@server1 php-5.6.20]# cp php.ini-production /usr/local/lnmp/php/etc/php.ini
创建php-fpm启动脚本:
[root@server1 php-5.6.20]# cd /root/php-5.6.20/sapi/fpm/
[root@server1 fpm]# cp init.d.php-fpm /etc/init.d/php-fpm
[root@server1 fpm]# chmod +x /etc/init.d/php-fpm
修改php-fpm配置文件:
[root@server1 fpm]# cd /usr/local/lnmp/php/etc/
[root@server1 etc]# vim php-fpm.conf
25 pid = run/php-fpm.pid
修改php配置文件:
修改时区:
[root@server1 etc]# vim php.ini
925 date.timezone = Asia/Shanghai
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
在编译php的时候已经指定了nginx用户(与nginx服务作接口),但目前还未安装nginx,所以先建立nginx用户,将php服务启动起来:
[root@server1 etc]# useradd -u 800 -M -d /usr/local/lnmp/nginx nginx
启动php服务:(php-fpm在9000端口运行)
[root@server1 etc]# /etc/init.d/php-fpm start
[root@server1 etc]# netstat -antlp |grep :9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 502/php-fpm
安装nginx
安装包:
连接:https://pan.baidu.com/s/1JJlEc-fLeB1MssLznpYIGA
提取码:yl3o
[root@server1 ~]# tar zxf nginx-1.10.1.tar.gz
[root@server1 ~]# cd nginx-1.10.1
[root@server1 nginx-1.10.1]# vim src/core/nginx.h
14 #define NGINX_VER "nginx" #去掉版本号后缀
[root@server1 nginx-1.10.1]# vim auto/cc/gcc
178 # debug
179 #CFLAGS="$CFLAGS -g" #去掉debug过程,减小编译时间
安装依赖包、编译:
[root@server1 nginx-1.10.1]# yum install pcre-devel -y
[root@server1 nginx-1.10.1]# ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --with-file-aio --with-threads --user=nginx --group=nginx
[root@server1 nginx-1.10.1]# make && make install
nginx启动脚本作软连接并加入系统指令中,方便使用:
[root@server1 nginx-1.10.1]# ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/
vim /root/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/nginx/sbin
source /root/.bash_profile
修改nginx配置文件,使之支持php:
[root@server1 nginx-1.10.1]# vim /usr/local/lnmp/nginx/conf/nginx.conf
2 user nginx;
27 sendfile on;
28 tcp_nopush on; #去掉注释
29 tcp_nodelay on; #增长一行
34 gzip on;
46 index index.php index.html index.htm; #将默认网页换为php网页
66 location ~ \.php$ {
67 root html;
68 fastcgi_pass 127.0.0.1:9000;
69 fastcgi_index index.php;
70 # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
71 include fastcgi.conf;
72 }
#修改66~72行时注意格式保持不变,以下图:
新建php网页前端文件:
[root@server1 nginx-1.10.1]# vim /usr/local/lnmp/nginx/html/index.php
<?php
phpinfo()
?>
检查nginx配置文件是否有语法错误:
[root@server1 nginx-1.10.1]# nginx -t
nginx: the configuration file /usr/local/lnmp/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/lnmp/nginx/conf/nginx.conf test is successful
启动服务:
[root@server1 nginx-1.10.1]# nginx
测试:(server1主机ip=172.25.254.1)
#通常这里须要设置防火墙规则,容许相关服务经过,这里选择直接关闭安全规则(关闭防火墙和selinux),执行如下两条命令:
iptables -F
setenforce 0
测试结果:
安装discuz:
建立虚拟主机:
mkdir /bbs
vim /usr/local/lnmp/nginx/conf/nginx.conf #倒数第二行增长以下内容
117 server { 118 listen 80; 119 server_name bbs.vaon.org; 120 location / { 121 root /bbs; 122 index index.php; 123 } 124 location ~ \.php$ { 125 root /bbs; 126 fastcgi_pass 127.0.0.1:9000; 127 fastcgi_index index.php; 128 include fastcgi.conf; 129 } 130 } 131 } #注意这个括号是配置文件中原本就有的括号,实际并不加这行
nginx -s reload
安装论坛:
软件包:
连接:https://pan.baidu.com/s/1mf5e4MGkH6EiJcoe1X4bzA
提取码:fn33
yum install unzip -y
unzip Discuz_X3.2_SC_UTF8.zip
cd upload/
mv * /bbs/
修改discuz里面文件的权限:
cd /bbs/
chmod 777 config/ data/ -R
chmod 777 uc_client/ uc_server/ -R
修改数据库权限:
cd /usr/local/lnmp/mysql/
chmod 755 data/
nginx -s reload
浏览器访问bbs.vaon.org,完成discuz论坛安装:
#在访问以前须要在客户端(windows)设置解析(若是是linux客户机配置文件在/etc/hosts):打开C:\Windows\System32\drivers\etc\hosts文件,在最后面加上一条解析(服务器ip+域名)172.25.254.1 bbs.vaon.org
安装memcache
server2(172.25.254.2):
[root@server2 ~]# yum install -y memcached
[root@server2 ~]# /etc/init.d/memcached start
[root@server2 ~]# rpm -qa |grep memcache
memcached-1.4.4-3.el6.x86_64
[root@server2 ~]# yum install telnet -y
[root@server2 ~]# telnet localhost 11211
set name 0 0 6
vaon
STORED
get name
VALUE name 0 6
vaon
END
quit
关闭server2的防火墙规则:iptables -F && setenforce 0
server1:
#将php命令加入全局变量中:
[root@server1 ~]# vim /root/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/nginx/sbin:/usr/local/lnmp/php/bin
[root@server1 ~]# source /root/.bash_profile
连接:https://pan.baidu.com/s/12PVjMOEM-ddFBUGenjn5Mw
提取码:99ym
[root@server1 ~]# tar zxf memcache-2.2.5.tar.gz
[root@server1 ~]# cd memcache-2.2.5
[root@server1 memcache-2.2.5]# phpize
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
[root@server1 memcache-2.2.5]# ./configure --prefix=/usr/local/lnmp/php/memcache
[root@server1 memcache-2.2.5]# make && make install
...
Installing shared extensions: /usr/local/lnmp/php/lib/php/extensions/no-debug-non-zts-20131226/
[root@server1 memcache-2.2.5]# ls /usr/local/lnmp/php/lib/php/extensions/no-debug-non-zts-20131226/
memcache.so opcache.a opcache.so
#修改php配置文件(去掉注释并修改参数便可):
[root@server1 etc]# vim /usr/local/lnmp/php/etc/php.ini
862 extension=memcache.so
[root@server1 etc]# /etc/init.d/php-fpm reload
[root@server1 etc]# cd /root/memcache-2.2.5
[root@server1 memcache-2.2.5]# cp memcache.php /usr/local/lnmp/nginx/html/
[root@server1 memcache-2.2.5]# cp example.php /usr/local/lnmp/nginx/html/
[root@server1 memcache-2.2.5]# cd /usr/local/lnmp/nginx/html/
[root@server1 html]# vim example.php #注意这里写的是server2的ip
3 $memcache = memcache_connect('172.25.254.2', 11211);
[root@server1 html]# vim memcache.php
23 define('ADMIN_PASSWORD','redhat'); // Admin Password
28 $MEMCACHE_SERVERS[] = '172.25.254.2:11211'; // add more as an array
29 #$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an ar ray
#访问到这个页面表示memcache安装成功
#访问这个状态页面须要输入memcache.php文件中设置过的用户名密码才能进入(用户名memcache密码redhat)
#压力测试(root@station是真机,充当客户端):
[root@station ~]# ab -c 100 -n 5000 http://172.25.254.1/index.php
...
Complete requests: 5000 #全部请求
Failed requests: 488 #失败的请求
...
openresty
和nginx功能同样
转自:https://kb.cnblogs.com/page/117183/
server3:
yum install -y memcached
/etc/init.d/memcached start
关闭iptables和selinux
server1:
#关闭以前的nginx:
[root@server1 ~]# nginx -s stop
#安装openresty:
连接:https://pan.baidu.com/s/1FBSeGYT3iENmqCXcYdJdgQ
提取码:7icl
[root@server1 ~]# tar zxf openresty-1.13.6.1.tar.gz
[root@server1 ~]# cd openresty-1.13.6.1
[root@server1 openresty-1.13.6.1]# ./configure
[root@server1 openresty-1.13.6.1]# gmake && gmake install
[root@server1 openresty-1.13.6.1]# cd /usr/local/openresty/nginx/
[root@server1 nginx]# vim html/index.php
<?php
phpinfo()
?>
[root@server1 nginx]# vim conf/nginx.conf
3 worker_processes 1;
17 http {
18
19 upstream memcache {
20 server 172.25.254.2:11211;
21 server 172.25.254.3:11211;
22 keepalived 512 single;
23 }
24 include mime.types;
25 default_type application/octet-stream;
49 location / {
50 root html;
51 index index.php index.html index.htm;
52 }
69 location /memc {
70 internal;
71
72 memc_connect_timeout 100ms;
73 memc_send_timeout 100ms;
74 memc_read_timeout 100ms;
75
76 set $memc_key $query_string;
77 set $memc_exptime 300;
78
79 memc_pass memcache;
80 }
81 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9 000
82 #
83 location ~ \.php$ {
84 set $key $uri$args;
85 srcache_fetch GET /memc $key;
86 srcache_store PUT /memc $key;
87 root html;
88 fastcgi_pass 127.0.0.1:9000;
89 fastcgi_index index.php;
90 # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name ;
91 include fastcgi.conf;
92 }
#开启服务:
[root@server1 nginx]# ./sbin/nginx
nginx: [emerg] unknown directive "keepalived" in /usr/local/openresty/nginx/conf/nginx.conf:22 #报错,未解决
server2|3:
/etc/init.d/memcached restart
宿主机:
作压力测试
安装jsp、tomcat
server2:
#安装jsp:
redhat6.5镜像中带的java是open-jdk,但与原生的java还有区别的(缺乏一些模块)。下载jdk-7u79-linux-x64
连接:https://pan.baidu.com/s/15KRKL22D2PtCC8urUCucsw
提取码:uou9
[root@server2 ~]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
c[root@server2 ~]# cd /usr/local/
[root@server2 local]# ln -s jdk1.7.0_79/ java
[root@server2 local]# vim /etc/profile
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
# .表示本地目录(java运行时的当前目录) :表示分隔
export PATH=$PATH:SJAVA_HOME/bin
[root@server2 local]# source /etc/profile
#安装tomcat:
连接:https://pan.baidu.com/s/1V0CZpjkeNpZzdCmuSRnwtA
提取码:2co9
[root@server2 ~]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/
[root@server2 ~]# cd /usr/local/
[root@server2 local]# ln -s apache-tomcat-7.0.37/ tomcat
[root@server2 local]# cd tomcat/
[root@server2 tomcat]# bin/startup.sh #启动tomcat服务
[root@server2 tomcat]# cd webapps/ROOT/
[root@server2 ROOT]# vim test.jsp #写一个jsp网页文件
server2 time is <%=new java.util.Date() %> #表示显示当前时间,在浏览器上每刷新一下变一次
#将java和tomcat复制一份到server3上去:
cd /usr/local
scp -r java/ tomcat/ root@server3:/usr/local/
server3:
vim /etc/profile
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:SJAVA_HOME/bin
source /etc/profile
cd /usr/local/tomcat
bin/startup.sh
cd webapps/ROOT/
vim test.jsp
server3 time is <%=new java.util.Date() %>
memcache交叉互备
server1:
#重新编译nginx,增长sticky模块:
连接:https://pan.baidu.com/s/15VIYlem8XURIQlV_zhn_AQ
提取码:solc
[root@server1 ~]# tar zxf nginx-sticky-module-ng.tar.gz
[root@server1 ~]# cd nginx-1.10.1
[root@server1 nginx-1.10.1]# make clean #清除以前编译残留的Makefile文件
[root@server1 nginx-1.10.1]# ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --with-file-aio --with-threads --user=nginx --group=nginx --add-module=/root/nginx-sticky-module-ng
[root@server1 nginx-1.10.1]# make && make install
[root@server1 nginx-1.10.1]# cd /usr/local/lnmp/nginx/
[root@server1 nginx]# vim conf/nginx.conf
17 http {
18
19 upstream tomcat {
20 sticky;
21 server 172.25.254.2:8080;
22 server 172.25.254.3:8080;
23 }
24
25 include mime.types;
26 default_type application/octet-stream;
27
67 location ~ \.jsp$ {
68 proxy_pass http://tomcat;
69 }
[root@server1 nginx]# /etc/init.d/php-fpm reload
[root@server1 nginx]# nginx #在安装openresty的时候已经停了nginx,所以这里直接开启nginx便可
server2:
#写一个jsp页面
[root@server2 local]# cd /usr/local/tomcat/webapps/ROOT/
[root@server2 ROOT]# vim 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>
#server3与server2保持一致:
[root@server2 ROOT]# scp test.jsp server3:/usr/local/tomcat/webapps/ROOT/
#server2和server3上增长交叉备份模组:
连接:https://pan.baidu.com/s/1BHQoxDP5rqA_CQorME4XaQ
提取码:etc9
#这些jar文件就是java的memcache交叉备份的模块:
asm-3.2.jar minlog-1.2.jar
kryo-1.04.jar msm-kryo-serializer-1.6.3.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
#将他们放到server2和server3的/usr/local/tomcat/lib/目录下
server2|3:
vim /usr/local/tomcat/conf/context.xml #直接将下面这段放到19行<Context>下面便可,注意要删除中文注释以及注释前的两个空格:
...
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.2.2:11211,n2:172.25.2.3:11211"
failoverNodes="n1" #故障转移节点,在server3上是n2
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
...
/etc/init.d/memcached start
cd /usr/local/tomcat
bin/startup.sh
测试:
当客户端访问172.25.254.1(server1)时,会自动分配给server2或者server3(基于缓存的)。当分配给server2上的tomcat时,关闭server2服务(bin/shutdown.sh),会自动取server2在server3主机上备份的session,使用户操做不消失