一、前言:
这段时间,在学习服务器集群的搭建,其中遇到过很多的问题,自己也是一边看博客一边找资料,慢慢的去研究,然后搭成了一个简单的集群环境。希望对刚刚接触这方面的哥们有所帮助。
二、博客分布介绍:
1、首先话不多说,你在做这个实验前所需要的资料,我放在百度网盘上
https://pan.baidu.com/s/1B6-JtTJuO-JgirnXKDVWoQ
提取密码:25s1
2、本实验我分为三步走战略思想实现:
(1)、部署Linux环境:安装Linux软件,部署:jdk环境、tomcat服务器、Nginx服务器
(2)、负载均衡实现
(3)、session共享实现
3、个人总结与个人对理论的理解
三、环境搭建与部署:
1、Linux环境搭建:
(1)、前期的Linux软件的安装与xshell的安装,我就不详细讲解了,网上搜索一大堆,这里主要说怎么样去快速的搭建我们需要的虚拟机环境。
(2)、将我的资料上传到你的虚拟机中,存放在 /usr/local/tmp 中,这里作为我们外部文件的存放目录,如果没有该目录的自己创建即可。
(3)、上传完压缩包后,就开始我们的环境搭建
1、安装jdk:
a、解压解压各个压缩包
# tar -zxvf 压缩包名
b、把解压后的文件复制到 /usr/local/jdk7 中
# cp 文件名 /usr/local/jdk7
c、配置环境变量,执行命令
# vim /etc/profile
在最下面添加文件中的内容:
分割使用 : 冒号
变量名用 $ 美元符号进行引用
添加或者修改变量用 export
export JAVA_HOME=/usr/java/jdk1.7.0_67(这里的jdk7是你前面复制的jdk7的文件名)
export PATH=$PATH:$JAVA_HOME/bin
d、解析文件(或重新启动系统)
# source /etc/profile
e、验证配置是否成功
# java -version
出现jdk版本就安装成功了!
2、tomcat安装
a、压缩包前面已经解压了
# tar -zxvf 压缩包名
b、把解压后的文件复制到 /usr/local/tomcat中
# cp 文件名 /usr/local/tomcat
c、和上面jdk一样,配置环境变量,执行命令
# vim /etc/profile
在刚刚配置的jdk环境变量下面配置tomcat的环境变量
export TOMCAT_HOME=/usr/local/tomcat
export CATALINA_HOME=/usr/local/tomcat
d、一样的先解析文件:
# source -etc/profile
e、这里要将一个端口的开放:因为Linux系统默认是开放22端口的,其他端口都被防火墙拦截
了的,所以有两种方案:一个是关闭防火墙,第二个是修改防火墙文件开放tomcat需要的默认
端口8080,方法如下:
命令进入,编辑文件
# vim /etc/sysconfig/iptables
插入你指定的放行的端口号:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT(你看默认开放的22
端口就知道怎么做了)
d、放行端口后,需要重启防火墙
# service iptables restart
重启是:restart
启动是:start
停止是:stop
3、测试tomcat能否正常运行:
a、进入tomcat的bin目录
# cd /usr/local/tomcat/bin/
b、启动tomcat
# ./startup.sh(启动后,会有启动成功的提示!)
4、在window环境的浏览器下,看能不能访问tomcat主页
这个就是和访问tomcat一样的方式,只不过你要知道你虚拟机的IP地址,通过下面命令查看虚拟机
地址:
# ifconfig
inet addr:(虚拟机的IP地址)
这样通过IP地址+8080端口号就能访问tomcat默认主页。我的访问是:192.168.191.141:8080
成功访问小猫主页,tomcat环境就搭建成功!
5、Nginx环境的搭建
a、Nginx不需要依赖什么环境,只需要安装好软件就OK了
b、这里 Nginx运用的是编译安装,进入Nginx文件中
# cd /usr/local/tmp/nginx-1.6.2/
c、执行命令安装
# ./configure --prefix=/usr/local/nginx (就像你window安装软件一样,要执行一个文件,然后
会弹出一个安装界面一样,Linux中 你执行configure文件后,然后指定安装的路径:
/usr/local/nginx 后,他就编译好Nginx软件的安装路径了)
d、在执行编译安装命令
# make && make install
然后在 /usr/local目录下就有安装好的 nginx 软件了。
e、执行命令启动nginx服务器:
# /usr/local/nginx/sbin/nginx (启动nginx服务器)
# /usr/local/nginx/sbin/nginx -s reload(重启nginx服务器)
# /usr/local/nginx/sbin/nginx -s stop (关闭nginx服务器)
f、这里nginx服务器默认走的是80端口,所以需要和上面一样防火墙开放80端口:
# vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT(开放默认的80端口)
g、重启防火墙
# service iptables restart (会显示重启成功的提示!)
这里nginx服务器就安装成功了,
# /usr/local/nginx/sbin/nginx (启动nginx服务器)
然后window浏览器下面进行测试,弹出nginx成功页面就OK了(成功页面就一些nginx的介
绍)
至此,我们需要的环境就搭建完了,下面开始克隆虚拟机,模拟负载均衡实验。
(4)、关于虚拟机的克隆问题,我们最好用‘快照链接’,这样速度快,所占的存储空间少,快照链接克隆的方法,可以看我的博客(Linux从入门到挣扎版块)。
(5)、到此为止,前期的准备工作就已经搞完了,下面用一个拓扑图来介绍一下我的实验环境:
四、按照拓扑图实现先实现负载均衡
1、编写nginx服务器的配置文件:
# vim /usr/local/nginx/conf/nginx.conf(编辑nginx配置文件)
1、在http中,sever之外指定upstream(upstream是nginx内置的变量,相当于一个全局变量,里面
可以写你需要轮循的IP地址,也是你负载均衡的服务器)
(weight:是权重 max_fails 、 fail_timeou这两个没什么,不用管,只是一些连接过期的配置)
.........
upstream myapp {
(我的两台装虚拟机的IP地址,你的话,要写自己装虚拟机的IP地址,这里定义的‘myapp’是用作下
面负载均衡使用的,upstream是一个内置的变量,不用管它,就这样写就行了)
server 192.168.191.142:8080 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.191.143:8080 weight=1 max_fails=2 fail_timeout=30s;
}
............
server {
listen 80;
server_name abc;
charset utf-8;
access_log logs/host.access.log main;
location / {
proxy_pass http://myapp;
root html;
index index.html;
}
最后附着一张个人配置截图:
2、将nginx配置文件配置完后,需要修改一下两个tomcat的默认访问页面,修改的目的是测试显示用的(我的两个tomcat是分别装在两个Linux中的IP地址分别是:192.168.191.142和192.168.191.143);下面是配置文件内容,可以直接复制粘贴:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test Page</title>
</head>
<body>
Test1 Page<br/>
192.168.191.142<br/>//这里的IP地址就写你Linux的IP地址,两台LinuxIP地址是不一样的
session Id : <%=session.getId()%><br>//这里是最后做session共享时用到的,先不管
,先把负载均衡搭建起来
<%= session.getCreationTime() %>//这里是创建session的时间,也是session共享时使用的
</body>
</html>
3、修改完,tomcat的页面后,就开始负载均衡实验:
a、分别启动两台tomcat,我这里就给启动一台的例子:
# cd /usr/local/tomcat/bin/
# ./startup.sh (执行文件,启动tomcat)
另一台tomcat一样的方法
b、启动nginx服务器
# /usr/local/nginx/sbin/nginx (nginx服务器的启动、重启、关闭上面有)
4、启动完后就可以开始负载均衡实验了:
a、在客户端浏览器,输入nginx服务器所在虚拟机的IP地址+端口号,记住如果访问不了,可能就是端口的问题或者nginx配置文件的问题,好好检查一下
b、实验截图:
下面是刷新后的结果:
有我所描述的效果,那么恭喜,你的负载均衡实现了,但是,我们观察到,负载均衡实现了,但是我们的session却在不停的刷新,那么对于我们现在的网站实现由很大的弊端。我们用户的登录状态无法进行保存,也就是,你跳转一次tomcat服务器,你就需要重新登录,这样是不好的,所以我们利用下面的memcached缓存实现session的存储,也就是用户的session不再存在tomcat中,而是找个第三方缓存存储,需要用时,就在这个第三方寻找,简单点说,就是需要建立一个中转站存储session。这样session就不会丢失了,还不懂的,可以去百度看看,很多介绍的。
五、memcached实现session共享:
关于实现session共享的原理很简单,大家可以百度一下,其实就是不再将用户访问产生的session存放在单个tomcat服务器中,而是将session存放在第三方的缓存memcached中,这样memcached就作为一个中转站,不会tomcat服务器的影响。原理图上面有。
这里主要将实现session共享的步骤:
1、前面已经实现的负载均衡,但是我们的session老是刷新变动,这里我们需要让这个session不再改变
2、安装memcached缓存,该缓存软件安装在装有nginx服务器的Linux中,我的是192.168.191.141
3、由于memcached依赖于libevent,因此需要安装libevent。由于Linux系统可能已经默认安装了libevent,所以具体命令如下:
rpm -qa|grep libevent 查看系统是否已经安装该软件,如果安装了就执行命令:
rpm -e libevent-1.4.13-4.el6.x86_64 --nodeps(由于系统自带的版本旧,忽略依赖删除)
安装libevent命令:
# tar -zxvf libevent-2.0.21-stable.tar.gz(该压缩包可以自己去找)
# cd libevent-2.0.21-stable
# ./configure --prefix=/usr/local/libevent (进入bin目录,执行该文件)
# make && make install (编译安装,好了后,你的/usr/local 目录下就有 libevent文件了)
至此安装就完成,如果编译安装过程中出现错误:configure: error : no acceptable C compiler found in $PATH错误时是没有安装gcc
是因为你没有gcc编译器,利用yum安装即可:
# yum install gcc* make*
4、安装memcached命令:
# tar zxvf memcached-1.4.2.tar.gz (解压memcached压缩包)
# cd memcached-memcached-1.4.2 (进入文件)
# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/ (指定编译安
装路径和指定需要的依赖)
# make && make install (编译安装)
至此memcached安装完毕;
5、至此,memcached就安装成功了。
6、然后,需要对tomcat服务器下手,因为tomcat服务器并不知道需要将浏览器访问产生的session存放在哪里,所以我们需要为每个tomcat服务器指定session存放的位置,也就是配置文件的配置:
a、进入tomcat配置文件目录
# cd /usr/local/tomcat/conf/
b、修改配置文件 context.xml(该配置文件是专门用来配置服务器资源的存储的,具体去百度)
# vim context.xml(编辑配置文件,将我的进行赋值粘贴,修改一下IP路径即可)
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.191.141:11211"(这里指定路径和端口号,也就是你
memcached安装的路径,配置他走的是11211端口)
lockingMode="auto"
sticky="false"
sessionBackupAsync="false"
sessionBackupTimeout= "1000"
copyCollectionsForSerialization="true"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
7、两台tomcat配置好后,我们所有的配置环境啥的,就都准备好了,接下来开始做session共享测试实验。。。。。。。。。。。。。。好鸡冻。。。。。。。。。。。。。
8、鸡冻时刻:
a、启动两台tomcat:(前面启动了的话,记得关闭再启动,因为配置文件修改了)
# cd /usr/local/tomcat/bin
# ./startup.sh
b、重启nginx
# /usr/local/nginx/sbin/nginx -s reload
c、启动memcached,并且指定运行端口号,这是要看看你的端口11211是否开启
# ./usr/local/memcached/bin/memcached -d -m 256 -u root -p 11211 -c 1024 –P /tmp/memcached.pid
9、做了一上午了吧,查了很多资料了吧,下面开始负载均衡+session共享的实验:
a、和前面一样,输入nginx所在虚拟机的地址,然后不同的刷新,然后你会发现,IP地址在不停的作轮循变化,但是我们的session编号,和创建session的时间却始终没有变,这样我们的session共享就完成了。。。。。。
六、结束语:
希望这篇帖子对大家能有帮助,如果有想做大数据的没有学习资源的,可以评论一下,我会将百度网盘链接分享给您,本人大数据这是也是网上找资料学的野路子,希望能多多交流。最后请用您的装X神器 肾X或者别的更牛比的手机,打开你的马爸爸免费发钱,领一下在下的红包,打赏一下下,领了就快快买个鸡腿,给自己加个餐把!!!!