Linux企业化运维
实验所用系统为Redhat-rhel7.6。
目录
Linux企业化运维–(4)tomcat配置之负载均衡+反向代理、tomcat结合memcache交互存储、goaccess日志可视化
一、配置tomcat
可以将tomcat部署在server2主机,与nginx主服务器分开,便于进行交互存储。
下载安装jdk
与tomcat
,并开启服务,便可以在浏览器进行访问。
下载
lftp 172.25.254.250
> ls
> cd pub/docs/lamp/
> get jdk-8u121-linux-x64.rpm
> get apache-tomcat-7.0.37.tar.gz
> exit
ls
安装并开启服务
rpm -ivh jdk-8u121-linux-x64.rpm
tar zxf apache-tomcat-7.0.37.tar.gz
mv apache-tomcat-7.0.37 /usr/local/
cd /usr/local/
ln -s apache-tomcat-7.0.37/ tomcat
cd tomcat/
ls
cd bin/ ##命令目录
ls
./startup.sh ##开启服务
netstat -antlp ##检测是否有此端口:8080
访问
###真机浏览器
172.25.24.2:8080----->apache tomcat
二、负载均衡与反向代理
在server1
中设定反向代理,则可以通过server1访问到server2
主机的tomcat
。
###server1
cd /usr/local/nginx/conf
ls
vim nginx.conf
///
location ~ \.jsp$ {
proxy_pass http://172.25.24.2:8080;
}
///
nginx -s reload
当在真机浏览器进行访问时,只能访问到静态的tomcat
页面。
###真机
浏览器http://172.25.24.1/index.jsp
静态数据由nginx支持,所以通过server1访问tomcat打不开图形
下载一个jsp测试页,在网页上对tomcat进行操作时,可以在日志中查看到tomcat的记录。
先下载测试页,在浏览器中进行访问并测试。
###server2
cd ..(tomcat)
pwd ##/usr/local/tomcat
cd webapps/ROOT
ls
lftp 172.25.254.250
> ls
> cd /pub/docs/lamp
> get test.jsp ##tomcat测试页
> exit
在浏览器中进行测试,添加用户和密码。
###真机浏览器
172.25.24.1/test.jsp ##此时服务器为server2
user1=111
user2=222
如果将server2
主机中的tomcat
服务停掉,则不能通过server1
访问。
###server2
cd /usr/local/tomcat
bin/shutdown.sh ##关闭服务
###真机浏览器
172.25.24.1/test.jsp ##打不开,报错
此时可以在server2
主机日志中看到新建的用户和密码。
###server2
cd logs
cat catalina.out ##日志,可以看到测试页里新建的用户与密码
将tomcat复制到server3主机中,并解压,开启服务。
cd /usr/local/
scp -r tomcat/ server3:/usr/local/ ##复制到server3主机
scp jdk-8u121-linux-x64.rpm server3:
###server3
rpm -ivh jdk-8u121-linux-x64.rpm
cd /usr/local/tomcat
bin/startup.sh ##开启服务
重新开启server2
主机中tomcat
服务。
###server2
cd /usr/local/tomcat/
bin/startup.sh
在server1主机nginx
配置文件中设定负载均衡与反向代理,重启服务。
###server1
cd /usr/local/nginx/conf
vim nginx.conf
///
http {
upstream westos {
server 172.25.24.2:80;
server 172.25.24.3:80;
}
upstream tomcat { ##负载均衡
sticky;
server 172.25.24.2:8080;
server 172.25.24.3:8080;
}
location ~ \.jsp$ { ##反向代理
proxy_pass http://tomcat;
}
///
nginx -s reload
在浏览器中新建一个用户user3,然后关闭server2
主机的tomcat
。
###真机浏览器
172.25.24.1/test.jsp
user3=333
###server2
bin/shutdown.sh
但是用户并不知道server2
关闭,nginx将自动调度server3
主机进行信息存储。此时服务器为server3,因为server2与server3信息不共享,因此信息消失。
###真机浏览器
172.25.24.1/test.jsp
刷新,user3会消失
附:测试页test.jsp
源码
<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>
三、tomcat结合memcache交互存储
tomcat
本身存储所有的信息,memcache
只是为了session
共享,是tomcat
的额外存储。
nginx调用其中一台主机的tomcat,并将信息交叉存储在另一台主机的memcache中,即就是,tomcat1将信息存在memcache2中。
如果tomcat1不能使用,nginx则自动调度tomcat2,此时将信息存储在本机memcache2中,信息此时是完整的。如果tomcat1恢复,则重新调度tomcat1,将信息继续存储在memcache2中,信息依旧完整。
如果memcache2不能使用,tomcat1将把信息存放在memcache1中,此时信息仍然完整,因为,tomcat1本身将所有的信息存储在本机memory中,memcache只是为了额外存储。
这样,无论什么情况,都最大限度的保证了数据的完整性,且信息同步共享。
分别在server2和server3中安装并启用memcache。
###server2
yum install -y memcached
systemctl start memcached
###server3
yum install -y memcached
systemctl start memcached
在server2主机中对tomcat
的配置文件进行编辑,设定交叉存储
,将自身memcache
设为n1
,server3
主机的memcache设为n2
,正常运行
时将信息存放在n2
,不能正常运行
时,将信息存储在n1
,即自身memcache。
###server2
cd /usr/local/tomcat/conf/
ls--->context.xml
vim context.xml
///
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.24.2:11211,n2:172.25.24.3:11211"
failoverNodes="n1"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
///
cd ..(tomcat)
cd lib
lftp 172.25.254.250
> cd pub/docs/lamp/jar
> mget *
> exit
ls
rm -rf memcached-session-manager-tc6-1.6.3.jar ##版本需对应,这个不对应
cd ..
bin/startup.sh
在真机浏览器里进行测试,此时tomcat3
将信息存放在memcache2
,即n1。
server Info:172.25.24.3:8080 ##此时tomcat3将信息存放在memcache2,即n1
ID xxx-n1
此时在server2
可以看到记录,但server3
不能看到。
###server2
tail -f logs/catalina.out ##INFO:[n1][n2]
yum install -y telnet
telnet localhost 11211-->get xxx-n1 ##可以看到用户建立记录
此时先配置server3
的tomcat
服务,编辑配置文件,设定交叉存储
,正常运行
时将信息存放在n1
,不能正常运行
时,将信息存储在n2
,即自身memcache。
###server3
cd /usr/local/tomcat/conf
vim context.xml
///
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.24.2:11211,n2:172.25.24.3:11211"
failoverNodes="n2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
///
cd ..
cd lib
lftp 172.25.254.250
> cd pub/docs/lamp/jar
> mget *
rm -rf memcached-session-manager-tc6-1.6.3.jar
bin/shutdown.sh
bin/startup.sh
tail -f logs/catalina.out ##INFO:[n1][n2]
###server3
yum install -y telnet
telnet localhost 11211-->get xxx-n1 ##为空
bin/shutdown.sh
关闭server3服务,tomcat3挂掉
,由tomcat2接管
,新建用户后,将信息存放在memcache2
,即本机存储,因此可以在server2中看到新建的用户。
###真机浏览器
server Info:172.25.24.3:8080
ID xxx-n1
user3=333
user4=444
写入后回车,tomcat2
接管,即n2,但信息存储本机memcache2
,即n1。
在server2
可以看到新建的用户。
###server2
get xxx-n1 ##可以看到user3,user4
开启server3
服务,关闭server
2服务,tomcat3重新接管
服务,在浏览器新建新用户,信息存放在memcache2
,在server2就可以看到用户记录。
###server3
bin/startup.sh
###server2
bin/shutdown.sh
###真机浏览器
server Info:172.25.24.3:8080
ID xxx-n1
user5=555
user6=666
###server2
telnet localhost 11211-->get xxx-n1 ##可以看到用户建立记录user5,user6
关闭server2的memcache2
,tomcat3
将把信息存放在memcache3
中,即本机存储,注意memcache为额外存储,tomcat3本身拥有全部的信息,所以此时memcache3
中的信息全是从新存储的(user1~user7)。
###server2
systemctl stop memcached
###浏览器
server Info:172.25.24.3:8080
ID xxx-n2
user7-777
###server3
telnet localhost 11211
get xxx-n2---->user1~user7
实验完成,重新开启所有服务。
###server2
systemctl start memcached ##重新开启memcached
bin/startuo.sh
四、goaccess日志可视化
1、软件安装及编译
###server1
wget https://tar.goaccess.io/goaccess-1.4.tar.gz
或者
lftp 172.25.254.250
> cd pub/docs/lamp
> get goaccess-1.4.tar.gz
> get GeoIP-devel-1.5.0-13.el7.x86_64.rpm
> exit
tar -xzf goaccess-1.4.tar.gz
yum install GeoIP-devel-1.5.0-13.el7.x86_64.rpm -y
cd goaccess-1.4/
./configure --enable-utf8 --enable-geoip=legacy
make
make install
2、可视化日志监控
cd /usr/local/bin
ls--->goaccess
cd /usr/local/nginx/logs
goaccess access.log -o /usr/local/nginx/html/report.html --log-format=COMBINED --real-time-html
在浏览器访问,可以看到图形化日志。
172.25.24.1/report.html
如果需要增加请求量,可以在真机进行压力测试。
ab -c10 -n 1000 http://172.25.24.1/index.html