现在web开发基本离不开nginx这个大名鼎鼎的工具,这次笔记从0开始把jdk+tomcat+mysql+nginx组建一下
nginx要特别注意一下.以后用的只会越来越多(rpm引入:redhat package management)
1.java环境
A. 注意开源很多用的是OpenJdk,推荐最好用Oracle的jdk.用java -version看看信息就知道了.
以前如果就自带了OpenJdk,需要先卸载一下.如何在所有安装过的包查看呢,使用rpm
1 | rpm -qa |grep python #查看跟python相关的包 |
B. 安装jdk
方法常见有两种,一是ftp上传之后解压安装,二是直接从linux下下载安装,第一种方式是必须掌握的.
因为有时候直接下载因为镜像源的问题很慢.而且动辄几百兆的安装包影响做其他事的效率.
一.FTP安装
其实也很简单:
1 | a. 找好稳定官方的安装包,用ftp软件直接丢到/root目录下(当然,最好直接放在指定的目录) |
2.mysql相关
1.检查是否安装过mysql(cent7.2还要检查整改,否则会报冲突)
同理先检查一下
1
2
3
4
5rpm -qa | grep mysql #查找如果没有就没安装
rpm -e --nodeps mysqlxxxxx #如果有需要卸载的命令
#cent7下要卸载系统自带的 mariadb-lib
rpm -qa|grep mariadb # mariadb-libs-5.5.44-2.el7.centos.x86_64
rpm -e --nodeps mariadb-libs-5.5.44-2.el7.centos.x86_64 #有时候后面不提示也行
上传之后安装步骤(同java)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34A. ftp直接丢到/root目录下(当然,最好直接放在指定的目录)
B. cd /usr/local &&mkdir mysql #目录下自己创建一个mysql文件夹,然后把文件复制进去解压
C. tar -xvf Mysql.... #tab自动补全
D. yum install glibc.i686 #安装mysql的依赖,这里注意不同cent版本需要不同,报错要注意看,不可一概而论,安装以mysql5.5为例
#cent7.2 下最少需要这两个(看具体情况)
d.1 yum -y install libaio.so.1 #server包需要
d.2 yum -y install libncurses.so.5 #client包需要
E. rpm -ivh MySQL-server-xxxx.rpm #安装server
rpm -ivh MySQL-client-xxxx.rpm #安装client
F. service mysql status && service mysql start #启动mysql服务
G. mysql -uroot #第一次要设置mysql密码,不然以后登录不了
#修改密码:
use mysql;
show tables;
update user set password =password('sakura') where user ='root'; #这里字符串你就是你要设置 的密码(不过官方说以后要换个方法改,自行关注后续可以修改此文档)
flush privileges #刷新-->以后就需要 mysql -uroot -p 登录了
H. grant all privileges on *.* to 'root' @'%' identified by 'sakura';#开启root远程访问权限赋给所有表,不然其他人无法访问,当然这是比较简单粗暴的,考虑安全最好还是稳重一点
flush privileges;
#补充,如果上面授权不成功,可以看
mysql> use information_schema
mysql> select * from user_privileges;
查询到有下面的结果:’admin’@’%',说明mysql已经授权远程连接。
#Ubuntu 14server专属
还需要修改 /etc/mysql/my.cnf文件中注释掉地址绑定配置bind-address = 127.0.0.1这行
I. /sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT#3306端口放行,修改iptables
/etc/rc.d/init.d/iptables save#持久化规则.cen7.2或者ubuntu不是必须的且文件不一样,根据实际情况看.
J. chkconfig --add mysql #加到系统服务中
chkconfig mysql on #设置开机自动启动mysql服务
3.tomcat相关
1.安装步骤
1 | A. 前面步骤同上,不累赘,在/usr/local/tomcat7目录下复制安装包,然后解压. |
4.部署项目
1.发布所需
数据库跟表
备份本地数据库
windows下命令
1
mysqldump -uroot -pxx dbName > D:/rec.sql #xx代表root密码,备份dbName到本地D盘
linux下操作
1
2
3mysql -uroot -u#sql上传,然后登录mysql
create dbName #创建同名database
source /root/rec.sql #进入database.然后加载sql
2.上传导入项目文件
一般导入java项目是先打包成war包(类似zip包),然后加载.并不是原生直接加载class文件配置之类的
在tomcat的 /webapps 目录下,tomcat启动之后,war就会自动解压
war包其实也可以直接右键项目源文件保存为zip然后重命名一下..但是不太推荐这样做
打包上传移动到tomcat7/webapps目录下之后.会发现自动就解压了,然后直接访问就行了.
5.nginx引入
nginx是这次笔记的学习重点.一般简说nginx是一个高性能http跟反向代理服务器(俄罗斯猿设计的哦)
主要特点是:性能好,占内存少.反向代理,负载均衡,动静分离. (常用)
A.反向代理
要了解反向代理,就得先了解正向代理–>比如说Breaking the GFW
1.正向代理
用户自己设置ip, 端口,找一个服务器,然后去连接目标的服务器.如图:
2.反向代理
服务器给自己的代理,用户无需任何设置.简单说可以理解为真实服务器的一个替身.就像电影里,观众看以为是某个明星本人,其实只是他的替身罢了.如图:
B.负载均衡
负载均衡是比较好理解的,就相当于一种分流机制.大家一起来做事,分散服务器的压力,提高利用率
比如说银行柜台,如果只有一个口,那么自然压力巨大,排队很长.
如果开多个柜台口,自然就好很多.那么服务器中重点就在于集群的问题.
C.动静分离
动静分离说起来比较抽象,简单来说,有两种场景,一是前后台分离.nginx跑前台,tomcat之类的跑后台.
二是把图片,或者一些不变得东西存储在nginx所在的服务器,后续的一堆服务器都不需要去管这种静态资源的问题了,只需要处理动态的数据.
D.windows上搭建nginx集群相关
集群,顾名思义>1个服务器,demo来说用两个就可以看出效果了
随便启动两个jsp页面输出一句话的项目.两个项目端口不一样就行.(server.xml中修改)
我们要的最后的效果就是,两个项目,用户不需要不同路径去访问,而是通过nginx去分配.
windows直接双击解压之后的nginx.exe就行了,非常简单,默认就是80端口,直接可以在localhost:80就可以看到
1 | tasklist /fi "imagename eq nginx.exe" #cmd下查看命令,正常会有两个,一个是守护进程 |
在nginx中配置集群
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18nginx/conf 目录下打开nginx.conf '#'代表注释
#找到http开头的部分 http{xxxx server{xxx } }
A. 在 location / {
root html;
index index.html index.htm;#在这下面加一行
proxy_pass http://localhost:8080;#
}
B. 在http{ }中添加一个
upstream xxx{ #xxx为任意名
server localhost:8080;#本地下是127 其他自行变动,包括端口. 后面可以加weight 表示权重
server localhost:8070;这里有多台服务器,端口不同,由xx共同代理
}
然后,在A的基础上,把之前的proxy_pass注释,改成http://xxx;如下
location / {
root html;
index index.html index.htm;#在这下面加一行
proxy_pass http://xxx;#xxx跟上面upstream 的名字保持一致
}
3.这里就引入了一个很重要的问题—Session共享
同一个用户访问的时候,sessionId需要一致,但是只是简单实现负载均衡之后并不能达到这种效果,就会导致有很严重的问题,如何解决呢.有一些基本的方案
- web服务器解决(采用广播机制) –tomcat下这种方式性能低,weblogic很好 (windows下才合适)
- 保证一个ip地址访问的一直是同一台服务器 –nginx配置upstream中添加ip_hash(Linux下常用)
- redis存储sessionId然后共享 (推荐+趋势) —以后单独再谈
这里先说简单的web服务实现方式,那么就需要修改两个地方:
修改tomcat的server.xml 支持共享(多个tomcat都需要修改添加Cluster [集群]项)
1
2
3<Engin name="Catalina" defaultHost="localhost">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/><!--这行默认是被注释了的 -->
</Engin>修改项目的配置文件(多个项目的web.xml文件都需要修改)
1
2<!--项目的web.xml文件中添加一个distributable节点 -->
<distributable/>
做完以上,就会发现极其简单就能完成一次windows下带session共享的ngingx负载均衡.当然,推荐还是在linux搭服务器.
E.linux上跑nginx
linux下直接上传nginx然后解压先.步骤完全同前,直接跳到解压之后
1 | #1.这里不同于windows下直接可以运行nginx.exe,需要先编译一次,再安装(提前要安装依赖包) |
补充说明一下,关于nginx中upstream的权重,建议不要随便配置,windows下测试发现,如果一个tomcat崩掉了,不加权重的时候回很快只使用余下正常的tomcat,但是加了权重就很可能会一直处于loading状态.
是否有其他参数避免这种情况,有待补充或者讨论.

