linux集群架构--tomact集群2
接入nginx

bash
[root@web03 /app/tools/tomact]#echo test >webapps/index.jsp
[root@web03 /app/tools/tomact]#curl 192.168.65.9:8080/index.jsp
-
发现页面不对,访问的是test,返回的信息是
在这里插入图片描述
-
为什么会成这样?
bash
tomcat访问的灵异事件
访问的时候 zrlog.wulinlinux.cn:8080/zrlog/
ROOT用户访问的时候不加上路径,直接访问文件,就会访问ROOT下面的内容.
zrlog.wulinlinux.cn:8080/wulin.jsp = webapps/ROOT/wulinssw.jsp
zrlog.wulinlinux.cn:8080/wulin/wulinssw.jsp
改名--因为与数据库db01是相连的
- 访问浏览器,这个时候安装一下zrlog
会发现现在不会在进行报错了,原因是因为没有zrlog目录 - 数据库配置文件
bash
[root@web03 /app/tools/tomcat/webapps/ROOT]#find -type f |xargs grep '172.16.1.51'
[root@web03 /app/tools/tomcat/webapps/ROOT]# cat
./WEB-INF/db.properties
#This is a database configuration file
#Wed jun 22 09:05:24 CST 2024
driverClass=com.mysql.cj.jdbc.Driver
user=zrlog
password=1
jdbcUrl=jdbc\:mysql\://172.16.1.51\:3306/zrlog?
characterEncoding\=UTF-8&allowPublicKeyRetrieval\=true&useSSL\=false&ser
verTimezone\=GMT
#jdbcUrl=jdbc\:mysql\://数据库地址\:3306/数据库名字?characterEncoding\UTF-8&allowPublicKEYRetrieval\=true&useSSL\=false&serverTimezone\GMT
[root@web03 /app/tools/tomcat/webapps/ROOT]#
- zrlog.war改名为ROOT.war然后部署.
- ngx配置文件web上的nginx,不是负载上的)
root@web03 \~\]# find /var/cache/yum/ -type f -name "\*.rpm" /var/cache/yum/x86_64/7/base/packages/price2-2--1.el7.ngx x86_64.rpm /var/cache/yum/x86_64/7/nginx-stable/packages/nginx-1.22.1.el7.ngx.x86_64.rpm
root@web03 \~\]# find /var/cache/yum/ -type f -name "\*.rpm" \|xargs cp -t /app/rpms/
#这里到时候安装一个内部的yum源,安装的就更快了
\[root@web03 /etc/nginx/conf.d\]# cat zrlog.wulinlinux.cn.conf
server {
listen 80;
server_name zrlog.wulinlinux.cn;
#思考,用户将请求发给nginx,nginx把进行发送给comact(有点类似于nginx代理
error_log /var/log/nginx/zrlog.wulinlinux.cn-error.log
notice;
access_log /var/log/nginx/zrlog.wulinlinux.cn-access.log main;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
}
}
\[root@web03 /etc/nginx/conf.d\]#nginx -t 检查语法
\[root@web03 /etc/nginx/conf.d\]#systemctl enable nginx #进行开机自启动
\[root@web03 /etc/nginx/conf.d\]#systemctl start nginx #开启nginx
#配置解析
#浏览器访问zrlog.wulinlinux.cn网站进行管理
## tomact+nginx动静分离
```bash
需要开发拆开代码,把静态资源拆分出来单独进行存放
```


```bash
[root@web03 /etc/nginx/conf.d]# cat zrlog.wulinlinux.cn.conf
server {
listen 80;
server_name zrlog.wulinlinux.cn;
#思考,用户将请求发给nginx,nginx把进行发送给comact(有点类似于nginx代理
error_log /var/log/nginx/zrlog.wulinlinux.cn-error.log
notice;
access_log /var/log/nginx/zrlog.wulinlinux.cn-access.log main;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
}
location ~* \.(js|html|css|png|jpg|jpeg)$ {
expries 7d;
#proxy_pass http://127.0.0.1:8080;
#proxy_set_header Host $http_host;
#proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;
}
}
[root@web03 /etc/nginx/conf.d]#nginx -t 检查语法
#访问网站,会发现一个问题
```

* 浏览器解析,说明网站nginx出现问题
* 重新启动nginx服务
* 解决问题
* 但是这种严格上来说这种拆开代码不算是真正的动静分类
> > #生产环境
>
> user nginx; worker_processes 4; worker_cpu_affinity 0001 0010 0100
>
> 1000;
>
> error_log /data/logs/nginx/error.log warn; pid /logs/nginx.pid;
>
> worker_rlimit_nofile 65535; events {
>
> use epoll;
>
> workera_connections 10240; }
>
> http {
>
> include mime.types;
>
> default_type application/octet-stream;
>
> log_format main '$remote-addr - $remote_user [$time_local] "$request"'
> '$status $body_bytes_sent "$http_referer"'
> '"$http_user_agent" "$http_x_forwarded_for"';
>
> access_log /data/logs/nginx/access.log main;
>
> charset utf-8;
>
> server_names_hash_bnucket_size 128;
> client_header_buffer_size 32k;
> large_client_header_buffers 4 32k;
> client_max_body_size 300m;
> sendfile on;
> tcp_nopush on;
> keepalive_timeout 60;
> tcp_nodelay on;
> server_tokens off;
> client_body_buffer_size 512k;
>
> client_header_timeout 3m;
> client_body_timeout 3m;
> send_timeout 3m;
>
> ##cache##
> proxy_connect_timeout 5;
> proxy_read_timeout 5;
> proxy_send_timeout 60;
> proxy_buffer_size 64k;
> proxy_buffers 4 256k;
> proxy_temp_path /tmp/proxy_temp;
> proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=3000m;
> proxy_cache_key "$scheme$request_method$host$request_uri";
>
> ##end##
>
> gzip on;
> gzip_min_length 1100;
> gzip_comp_level 5;
> gzip_buffers 4 8k;
> gzip_types text/xml text/plain text/css text/javascript application/javascript application/json;
>
> # output_buffers 1 32k;
> # postpone_output 1460;
>
> #limit_buffers 1 32k;
> #postpone_output 1460;
>
> limit_rate_after 3m;
> limit_rate 512k;
>
> #自动补全"/"
> #if (-d $request_filename){
> #rewrite ^/([^/]$ http://$host/$1$2/ last;
>
> }
> #online server
> server {
> listen 80;
> server_name dbjyj.wulin.com www.wulin.com.cn vpn.wulin.com;
> index index.jsp;
> proxy_set_header Host $host:$server_port;
> proxy_set_header REMOTE-HOST $remote_addr;
> proxy_set_header X-Real-IP $remote_addr;
> proxy_cache cache one;
>
> location ~ / {
> rewrite ^/$ http://$host:8081/online last;
> }
> ###############动静分离配置###############
>
> ###############设定访问静态文件直接读取不经过tomact###########
> location ~ \.(html|html|gif|jpg|jpeg|png|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)(.*)$
>
> {
>
> expries max;
>
> }
>
> location \~ .(js\|css\|jsp\|json)$ {
>
> root /data/www;
>
> expries 1d;
>
> }
>
> ####################动静分离-配置完成############
>
> location ~ .*/api/mc/custormer/deliverAddress/list.json* {
> return 404;
> }
> location ^~ /online/ {
> proxy_pass http://10.0.0.6:8081;
> proxy_cache cache_one;
> proxy_cache_valid 200 1h;
> proxy_cache_valid 302 10m;
> proxy_cache_valid any 1m;
> }
> location ^~ /onlinethread/ {
> proxy_pass http://10.0.0.6:8081;
> proxy_cache cache_one;
> proxy_cache_valid 200 1h;
> proxy_cache_valid 302 10m;
> proxy_cache_valid any 1m;
> }
> location ^~ /mobile/ {
> proxy_pass http://10.0.0.6:8081;
> proxy_cache cache_one;
> proxy_cache_valid 200 1h;
> proxy_cache_valid 302 10m;
> proxy_cache_valid any 1m;
> }
> }
> #12200 server
> server {
> listen 8080;
> server_name wulin.c0m www.b-long.com.cn brainlong.gcip.net;
> proxy_set_header Host:$server_port;
> proxy_set_header REMOTE-HOST $remote_addr;
> proxy_set_header X-Real-IP $remote_addr;
> proxy_cache cache_one;
>
> index index.jsp;
> }
> location ~ \.(html|html|gif|jpg|jpeg|png|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)(.*)$
>
> {root /data/www;
>
> expries max;
>
> }
>
> location \~ /data/www;
>
> expries 1d;
>
> }
>
> #### 8080 ##### location \^\~ /ccbs/ {
>
> proxy_pass http://10.0.0.6:8080;
> proxy_cache cache_one;
> proxy_cache_valid 200 1h;
> proxy_cache_valid 302 10m;
> proxy_cache_valid any 1m; }
>
> ## console server location \^\~ /console/ {
>
> proxy_pass http://10.0.0.6:8080;
> proxy_cache cache_one;
> proxy_cache_valid 200 1h; }
* 浏览器访问
zrlog.wulinlinux.cn:8081/test.jsp

* 过滤

> 未来生产上,可以直接把tomcat+应用整体打包,使用的时候直接解压即可
## Tomact监控功能
### 概述
* 未来通过各种监控工具(Zabbix/Grafana/Prometheus/...),监控Tomcat/java.
* 需要我们开启java远程监控功能(JMX remote)
### 步骤
* tomcat配置中修改tomcat启动的选项.开启jmx远程监控功能.
* 交给zbx就可以了(使用windows jdk连接tomcat).
```bash
catalina.sh文件中125后面
CATALINA_OPTSjava环境变量,指定java启动的时候的选项
[root@web03 /app/tools ~]#vim tomact/bin/catalina.sh
CATALINA_OPTS="$CATALINA_OPTS \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname=10.0.0.9"
[root@web03 /app/tools ~]#systemctl restart tomact
[root@web03 /app/tools ~]#ps -ef |grep java
/app/tools/jdk/bin/java -Djava.util.logging.config.file=/app/tools/tomcat/conf/logging.properties
-Diava.util.logging.manager=org.apache.juli.classLoaderLogManager
-Djdk.tls.ephemeralDHkeysize-2048
-Djdk.protocol .handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SeeurityListener.UMASK=8827-Dcom,sun.management.imxremote -Dcom,sun.management,imxremote,port=12345 -Dcom,sun.management.imxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server,hostname=18.0.0.9 -Dignore.endorsed.dirs= -classpath /app/toolstomcat/bin/bootstrap.iar: /app/tools/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/app/tools/tomcat -Dcatalina.home=/app/toolstomcat -Djava.io.tmpdir=/app/tools/tomcat/temp org.apache.catalina.startup.Bootstrap start
[root@web03 /app/tools ~]#ss -lntup |grep java (有两个随机端口)
```

````bash
> ```bash
> > 温馨提示:
> > 1.从tomcat 8.5开始配置的每一行要通过\进行续行
>
> > 修改后java进程中增加了上面添加的那些选项 ```/app/tools/jdk/bin/java
> - Djava.util.logging.config.file=/app/tools/tomcat/con f/logging.properties
> - Djava.util.logging.manager=org.apache.juli.ClassLoad erLogManager -Djdk.tls.ephemeralDHKeySize=2048
> - Djava.protocol.handler.pkgs=org.apache.catalina.webr esources -Dorg.apache.catalina.security.SecurityListener.UMASK
> =0027 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.0.0.9 -Dignore.endorsed.dirs= -classpath /app/tools/tomcat/bin/bootstrap.jar:/app/tools/tomca t/bin/tomcat-juli.jar - Dcatalina.base=/app/tools/tomcat -
> Dcatalina.home=/app/tools/tomcat -
> Djava.io.tmpdir=/app/tools/tomcat/temp
> org.apache.catalina.startup.Bootstrap start
````
* 在windows下,通过jdk连接tomcat(模拟监控软件连接)
> C:\\Program Files\\Java\\jdk1.8.0_201\\bin\\jconsole.exe
* 安装jdk_1.80_64bit.exe(一直选择进行下一步)









* 选择不安全的连接


当前jvm内存使用情况:

> 有一个执行GC(G)这个是垃圾回收站
>
> 以上这些页面,未来使用zabbix进行监控
>
> 掌握开启监控功能
## Java故障案例
### Java监控命令
````bash
```bash
命令(j打头)
jps(jdk提供的)
jstack
jmap
脚本,执行与查看结果即可
````
#### a.jps
```bash
[root@web03 /app/tools]#jps
78900 Bootstrap
68458 plugin-core.jar
7012 jps
[root@web03 /app/tools]#ps -ef |grep jagva
jps》》 java ps命令,只显示java进程.类似于ps -ef |grep java
[root@web03 /app/tools]#jps -lvm|grep tomcat-8081
```
#### b.jstack
> jstack查看java进程内部信息,线程信息.
>
> 进程:占空间,占系统资源,厂房.
>
> 线程:厂房里面的工人,处理与用户的请求.
>
> 需要代码使用多线程技术.通过ps aux查看进程是否支持线程(是否使用多线程技术)
> 先过滤出java进程的pid
> 查看java进程的线程信息
>
> jstack 1786
>
> 查看java线程状态
>
> jstack 1786 \|grep -i state
```bash
[root@web03 /app/tools]#jstack --help
Usage:
jstack [-l]