文章目录
- 一 日志采集模块
- 1 打包单机部署
- (1)修改gmall2022-logger中的logback.xml配置文件
- (2)修改SpringBoot核心配置文件application.propeties
- (3)测试
- (4)程序运行流程
- 2 Nginx
- (1)简介
- (2)正向代理和反向代理
- (3)Nginx安装以及相关命令
- a Nginx安装
- b Nginx相关命令
- (4)核心配置文件说明
- a 基本配置
- b events配置
- c http配置
- (5)配置反向代理
- 3 打包集群部署,并用Nginx进行反向代理
- 4 集群群起脚本
一 日志采集模块
1 打包单机部署
(1)修改gmall2022-logger中的logback.xml配置文件
<property name="LOG_HOME" value="/opt/module/rt_gmall/gmall2022" />
<logger name="com.hzy.gmall.controller.LoggerController"
注意:路径和上面创建的路径保持一致,根据自己的实际情况进行修改
(2)修改SpringBoot核心配置文件application.propeties
#指定使用的端口号
server.port=8081
(3)测试
启动kafka消费者进行测试。
bin/kafka-console-consumer.sh --bootstrap-server hadoop101:9092 --topic ods_base_log
运行hadoop101上的rt_gmall下的日志处理jar包
java -jar gmall2022-logger-0.0.1-SNAPSHOT.jar
运行rt_applog下的jar包,生产日志文件。
java -jar gmall2022-mock-log-2022-11-28.jar
cd /opt/module/rt_gmall/gmall2022
进入上述文件夹,查看是否有日志文件产生。
(4)程序运行流程
模拟日志产生,将生成的日志信息发送给hadoop101,8081端口的日志采集服务,日志采集服务接收到产生的日志信息,打印到控制台,落盘,最后发送到kafka主题中,kafka消费者消费到数据,打印到控制台。
这时出现一个问题,如果当一台日志采集服务器忙不过来时,就需要添加多台机器(集群),通过Nginx转发请求,如下图(待修改,完整图例见标题3)。
2 Nginx
(1)简介
Nginx (“engine x”) 是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx 是由俄罗斯人 Igor Sysoev 采用C语言开发编写的,第一个公开版本0.1.0发布于2004年10月4日。
(2)正向代理和反向代理
正向代理类似一个跳板机,代理访问外部资源。比如:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器,它能访问那个我不能访问的网站,于是我先连上代理服务器,告诉它我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器,如从租户的角度出发,房东将房子交给中介,中介再将房租给租户。
(3)Nginx安装以及相关命令
a Nginx安装
# 在hadoop101上运行yum,安装相关依赖包
sudo yum -y install openssl openssl-devel pcre pcre-devel zlib zlib-devel gcc gcc-c++
# 将nginx-1.12.2.tar.gz上传到/opt/software下
# 解压
tar -zxvf nginx-1.12.2.tar.gz
# 进入解压缩目录,执行
./configure --prefix=/opt/module/nginx
make && make install
# 在/opt/module/nginx/sbin目录下执行
./nginx
# 如果在给root用户下面启动会报错
# 原因:nginx占用80端口,默认情况下非root用户不允许使用1024以下端口
# 解决:让当前用户的某个应用也可以使用1024以下的端口
sudo setcap cap_net_bind_service=+eip /opt/module/nginx/sbin/nginx
# 注意:要根据自己的实际路径进行配置
# 查看启动情况
ps -ef |grep nginx
# 因为nginx不是用java写的,所以不能通过jps查看
# 在浏览器中输入http://hadoop101:80访问
结果如下图:
b Nginx相关命令
# 重启Nginx
./nginx -s reload
# 关闭Nginx
./nginx -s stop
# 通过配置文件启动
./nginx -c /opt/module/nginx/conf/nginx.conf
/opt/module/nginx/sbin/nginx -c /opt/module/nginx/conf/nginx.conf
# 其中-c是指定配置文件,而且配置文件路径必须指定绝对路径
# 配置检查
# 当修改Nginx配置文件后,可以使用nginx命令进行配置文件语法检查,用于检查Nginx配置文件语法是否正确
/sbin/nginx -c /opt/module/nginx/conf/nginx.conf -t
# 如果80端口号被占用,一般是网络服务启动造成(httpd)
sudo systemctl stop httpd
sudo systemctl disable httpd
# 部分机器启动时报错:
/usr/local/nginx/sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
# 解决:
ln -s /usr/local/lib/libpcre.so.1 /lib64
(4)核心配置文件说明
Nginx核心配置文件位于Nginx安装目录(/opt/module/nginx/conf)下,名字为nginx.conf。
a 基本配置
b events配置
c http配置
基本配置
server配置,可以有多个
(5)配置反向代理
# 在server内部配置,拦截请求
location /applog{
# 指定代理服务器
proxy_pass http://www.logserver.com;
}
# 在server外部,http内部配置
upstream www.logserver.com{
# 配置代理服务器
server hadoop101:8081 weight=1;
server hadoop102:8081 weight=2;
server hadoop103:8081 weight=3;
}
3 打包集群部署,并用Nginx进行反向代理
# 将日志采集的jar包同步到hadoop102和hadoop103
xsync.sh /opt/module/rt_gmall/
# 在三台机器上,启动采集服务
cd /opt/module/rt_gmall/
java -jar gmall2022-logger-0.0.1-SNAPSHOT.jar
# 启动一台kafka消费者
bin/kafka-console-consumer.sh --bootstrap-server hadoop101:9092 --topic ods_base_log
# 启动nginx
# 修改日志生成器中的
mock.url: "http://hadoop101:80/applog"
# 执行日志生成器
结果如图:
注意:图片中红色标记表示的程序的执行顺序。
整体架构如图:
4 集群群起脚本
将采集日志服务(nginx和采集日志数据的jar启动服务)放到脚本中。
在/home/hzy/bin目录下创建logger.sh,并授予执行权限。
#!/bin/bash
JAVA_BIN=/opt/module/jdk1.8.0_212/bin/java
APPNAME=gmall2022-logger-0.0.1-SNAPSHOT.jar
case $1 in
"start")
{
for i in hadoop101 hadoop102 hadoop103
do
echo "========: $i==============="
ssh $i "$JAVA_BIN -Xms32m -Xmx64m -jar /opt/module/rt_gmall/$APPNAME >/dev/null 2>&1 &"
done
echo "========NGINX==============="
/opt/module/nginx/sbin/nginx
};;
"stop")
{
echo "======== NGINX==============="
/opt/module/nginx/sbin/nginx -s stop
for i in hadoop101 hadoop102 hadoop103
do
echo "========: $i==============="
ssh $i "ps -ef|grep $APPNAME |grep -v grep|awk '{print \$2}'|xargs kill" >/dev/null 2>&1
done
};;
esac
启动zookeeper,kafka和一个kafka消费者。
启动脚本。
为在页面查看到结果,在三台机器上执行tail -f gmall20/app.log
。
执行日志生成脚本,查看结果。
目前程序框架图如下: