Linux云计算SRE-第二十周
完成ELK综合案例里面的实验,搭建完整的环境
一、
1、安装nginx和filebeat,配置node0(10.0.0.100),node1(10.0.0.110),node2(10.0.0.120),采用filebeat收集nignx日志。
#node0、node1、node2采用以下相同方式收集nginx日志# 更新软件包列表并安装nginx
[root@node0 ~]# apt update && apt -y install nginx# 编辑nginx的主配置文件,以自定义日志格式
[root@node0 ~]# vim /etc/nginx/nginx.conf
# 在http块中定义一个新的日志格式access_json,该格式将日志记录为JSON
http {...log_format access_json '{"@timestamp": "$time_iso8601", # 日志时间戳"host": "$server_addr", # 服务器IP地址"clientip": "$remote_addr", # 客户端IP地址"size": $body_bytes_sent, # 发送的字节数"responsetime": $request_time, # 请求处理时间"upstreamtime": "$upstream_response_time", # 上游服务器响应时间"upstreamhost": "$upstream_addr", # 上游服务器地址"http_host": "$host", # 请求的host头"uri": "$uri", # 请求的URI"domain": "$host", # 同http_host,请求的域名"xff": "$http_x_forwarded_for", # X-Forwarded-For头,用于识别通过HTTP代理或负载均衡器连接到web服务器的客户端的原始IP地址"referer": "$http_referer", # Referer头,表示请求的来源页面"tcp_xff": "$proxy_protocol_addr", # 如果使用了Proxy Protocol,这是客户端的真实IP地址"http_user_agent": "$http_user_agent", # 用户代理字符串"status": "$status", # HTTP响应状态码"request_method": "$request_method" # 请求方法(GET, POST等)}';
# 使用新定义的日志格式记录访问日志
access_log /var/log/nginx/access_json.log access_json;
# 错误日志配置保持不变
error_log /var/log/nginx/error.log;
}# 编辑nginx的默认站点配置文件,注释掉默认的try_files指令
[root@node0 ~]# vim /etc/nginx/sites-available/default
location / {...#try_files $uri $uri/ =404; # 注释掉这一行,意味着可以自定义处理请求的方式
}# 重启nginx以应用更改
[root@node0 ~]# systemctl restart nginx.service# 安装filebeat的deb包
[root@node0 ~]# dpkg -i filebeat-8.12.2-amd64.deb # 安装filebeat# 备份filebeat的配置文件
[root@node0 ~]# cp /etc/filebeat/filebeat.yml{,.bak}# 编辑filebeat的配置文件
[root@node0 ~]# vim /etc/filebeat/filebeat.yml
# 配置filebeat的输入,包括nginx访问日志、错误日志和系统日志
filebeat.inputs:- type: logenabled: truepaths:- /var/log/nginx/access_json.logjson.keys_under_root: true # 将JSON字段作为顶级字段输出json.overwrite_keys: true # 如果键冲突,覆盖旧值tags: ["nginx-access"]- type: logenabled: truepaths:- /var/log/nginx/error.logtags: ["nginx-error"]- type: logenabled: truepaths:- /var/log/syslogtags: ["syslog"]# 配置filebeat的输出到Redis
output.redis:hosts: ["10.0.0.130:6379"] # Redis服务器地址和端口password: "123456" # Redis密码db: 0 # 使用Redis的0号数据库# 启用并启动filebeat服务
[root@node0 ~]# systemctl enable --now filebeat
2、安装redis和logstash,配置node3(10.0.0.130),node4(10.0.0.140),采用logstash转发nginx日志到elasticsearch集群。
# 在node3节点上更新软件包列表并安装Redis服务器
[root@node3 ~]# apt update && apt -y install redis# 编辑Redis配置文件,以允许来自任何IP地址的连接,并禁用自动保存功能
[root@node3 ~]# vim /etc/redis/redis.conf
# 允许Redis监听所有网络接口
bind 0.0.0.0
# 禁用所有的save命令,这意味着Redis不会将数据自动保存到磁盘上
# 下面的三行是被注释掉的,表示原本的保存策略被禁用
#save 900 1
#save 300 10
#save 60 10000
# 设置Redis的访问密码
requirepass 123456# 重启Redis服务以应用配置更改
[root@node3 ~]# systemctl restart redis# 在node4节点上更新软件包列表并安装OpenJDK 17
[root@node4 ~]# apt update && apt -y install openjdk-17-jdk# 安装Logstash,logstash-8.12.2-amd64.deb包已经传输到node4节点
[root@node4 ~]# dpkg -i logstash-8.12.2-amd64.deb # 编辑Logstash的配置文件,设置从Redis读取数据并输出到Elasticsearch
[root@node4 ~]# vim /etc/logstash/conf.d/redis-to-es.conf
# 输入部分,配置Logstash从Redis读取数据
input {redis {# Redis服务器的主机地址host => "10.0.0.130"# Redis服务器的端口port => 6379# Redis的访问密码password => "123456"# 使用Redis的哪个数据库db => 0# Redis中数据的keykey => "filebeat"# 数据类型,这里设置为listdata_type => "list"}
}# 输出部分,根据条件将数据输出到不同的Elasticsearch索引
output {# 如果数据标签中包含"syslog",则输出到指定的Elasticsearch索引if "syslog" in [tags] {elasticsearch {# Elasticsearch集群的节点地址hosts => ["10.0.0.160:9200", "10.0.0.170:9200", "10.0.0.180:9200"]# 使用的索引名称,包含日期信息index => "syslog-%{+YYYY.MM.dd}"}}# 如果数据标签中包含"nginx-access",则输出到另一个索引if "nginx-access" in [tags] {elasticsearch {hosts => ["10.0.0.160:9200", "10.0.0.170:9200", "10.0.0.180:9200"]index => "nginx-accesslog-%{+YYYY.MM.dd}"# 允许覆盖模板设置template_overwrite => true}}# 如果数据标签中包含"nginx-error",则输出到另一个索引if "nginx-error" in [tags] {elasticsearch {hosts => ["10.0.0.160:9200", "10.0.0.170:9200", "10.0.0.180:9200"]index => "nginx-errorlog-%{+YYYY.MM.dd}"template_overwrite => true}}
}# 重启Logstash服务以应用配置更改
[root@node4 ~]# systemctl restart logstash
3、安装elasticsearch集群、kibana、cerebro,配置node6(10.0.0.160),node7(10.0.0.170),node8(10.0.0.180),利用kibana和cerebro查看收集的日志。
# 在node6节点上安装Kibana的deb包
[root@node6 ~]# dpkg -i kibana-8.12.2-amd64.deb# 编辑Kibana的配置文件,设置监听端口、主机地址、公共基础URL、Elasticsearch集群地址以及界面语言
[root@node6 ~]# vim /etc/kibana/kibana.yml
server.port: 5601 # Kibana服务监听端口
server.host: "0.0.0.0" # Kibana监听的主机地址,0.0.0.0表示监听所有IP
server.publicBaseUrl: "http://kibana.zhangyao.com" # Kibana的公共基础URL
elasticsearch.hosts: # Elasticsearch集群的地址列表["http://10.0.0.160:9200","http://10.0.0.170:9200","http://10.0.0.180:9200"]
i18n.locale: "zh-CN" # 界面语言设置为中文# 重启Kibana服务以应用更改
[root@node6 ~]# systemctl restart kibana# 在node6节点上安装OpenJDK 11 JDK
[root@node6 ~]# apt -y install openjdk-11-jdk# 在node6节点上安装Cerebro的deb包,Cerebro是一个Elasticsearch的Web UI管理工具
[root@node6 ~]# wegt https://github.com/lmenezes/cerebro/releases/download/v0.9.4/cerebro_0.9.4_all.deb
[root@node6 ~]# dpkg -i cerebro_0.9.4_all.deb# 编辑Cerebro的配置文件,设置数据存储路径
[root@node6 ~]# vim /etc/cerebro/application.conf
data.path: "/var/lib/cerebro/cerebro.db" # Cerebro的数据存储路径
#data.path = "./cerebro.db" # 注释掉默认路径# 重启Cerebro服务以应用更改
[root@node6 ~]# systemctl restart cerebro.service# 在node6、node7、node8节点上分别安装Elasticsearch的deb包
[root@node6 ~]# dpkg -i elasticsearch-8.12.2-amd64.deb
[root@node7 ~]# dpkg -i elasticsearch-8.12.2-amd64.deb
[root@node8 ~]# dpkg -i elasticsearch-8.12.2-amd64.deb # 编辑node6上的Elasticsearch配置文件,设置集群名称、节点名称、监听主机、发现主机列表、禁用安全功能以及初始主节点列表
[root@node6 ~]# vim /etc/elasticsearch/elasticsearch.yml
cluster.name: cls-cluster # 集群名称
node.name: node-1 # 节点名称
network.host: 0.0.0.0 # 监听主机地址
discovery.seed_hosts: ["10.0.0.160","10.0.0.170","10.0.0.180"] # 发现主机列表
xpack.security.enabled: false # 禁用安全功能
cluster.initial_master_nodes: ["10.0.0.160","10.0.0.170","10.0.0.180"] # 初始主节点列表# 编辑JVM选项,设置最小和最大堆内存大小
[root@node6 ~]# vim /etc/elasticsearch/jvm.options
-Xms512m # 最小堆内存大小
-Xmx512m # 最大堆内存大小# 使用rsync将Elasticsearch的配置文件同步到node7和node8节点
[root@node6 ~]# rsync /etc/elasticsearch/elasticsearch.yml 10.0.0.170:/etc/elasticsearch/elasticsearch.yml
[root@node6 ~]# rsync /etc/elasticsearch/elasticsearch.yml 10.0.0.180:/etc/elasticsearch/elasticsearch.yml
[root@node6 ~]# rsync /etc/elasticsearch/jvm.options 10.0.0.170:/etc/elasticsearch/jvm.options
[root@node6 ~]# rsync /etc/elasticsearch/jvm.options 10.0.0.180:/etc/elasticsearch/jvm.options # 分别编辑node7和node8上的Elasticsearch配置文件,仅更改节点名称
[root@node7 ~]# vim /etc/elasticsearch/elasticsearch.yml
node.name: node-2
[root@node8 ~]# vim /etc/elasticsearch/elasticsearch.yml
node.name: node-3# 在node6、node7、node8节点上分别重新加载systemd守护进程、启用Elasticsearch服务并启动服务
[root@node6 ~]# sudo systemctl daemon-reload
[root@node6 ~]# sudo systemctl enable elasticsearch.service
[root@node6 ~]# sudo systemctl restart elasticsearch.service
[root@node7 ~]# sudo systemctl daemon-reload
[root@node7 ~]# sudo systemctl enable elasticsearch.service
[root@node7 ~]# sudo systemctl start elasticsearch.service
[root@node8 ~]# sudo systemctl daemon-reload
[root@node8 ~]# sudo systemctl enable elasticsearch.service
[root@node8 ~]# sudo systemctl start elasticsearch.service# 在node6节点上使用curl命令检查Elasticsearch集群中的节点信息
[root@node6 ~]# curl 'http://127.0.0.1:9200/_cat/nodes?v'
# 输出显示了集群中每个节点的IP地址、各种性能指标以及节点名称等信息
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
10.0.0.180 44 95 5 0.56 0.38 0.29 cdfhilmrstw * node-3
10.0.0.170 39 95 5 0.32 0.19 0.12 cdfhilmrstw - node-2
10.0.0.160 33 60 1 0.19 0.28 0.22 cdfhilmrstw - node-1# 在node6节点上使用curl命令访问nginx服务器,生成访问日志
[root@node6 ~]# curl http://10.0.0.100
[root@node6 ~]# curl http://10.0.0.110
[root@node6 ~]# curl http://10.0.0.120#修改windows的配置文件C:\Windows\System32\drivers\etc
10.0.0.160 kibana.zhangyao.com
二、
1、安装nginx和filebeat,配置node0(10.0.0.100),node1(10.0.0.110),node2(10.0.0.120),采用filebeat收集nignx日志,并发送到kafka集群。
#node0、node1、node2采用以下相同方式收集nginx日志# 更新软件包列表并安装nginx
[root@node0 ~]# apt update && apt -y install nginx# 编辑nginx的主配置文件,以自定义日志格式
[root@node0 ~]# vim /etc/nginx/nginx.conf
# 在http块中定义一个新的日志格式access_json,该格式将日志记录为JSON
http {...log_format access_json '{"@timestamp": "$time_iso8601", # 日志时间戳"host": "$server_addr", # 服务器IP地址"clientip": "$remote_addr", # 客户端IP地址"size": $body_bytes_sent, # 发送的字节数"responsetime": $request_time, # 请求处理时间"upstreamtime": "$upstream_response_time", # 上游服务器响应时间"upstreamhost": "$upstream_addr", # 上游服务器地址"http_host": "$host", # 请求的host头"uri": "$uri", # 请求的URI"domain": "$host", # 同http_host,请求的域名"xff": "$http_x_forwarded_for", # X-Forwarded-For头,用于识别通过HTTP代理或负载均衡器连接到web服务器的客户端的原始IP地址"referer": "$http_referer", # Referer头,表示请求的来源页面"tcp_xff": "$proxy_protocol_addr", # 如果使用了Proxy Protocol,这是客户端的真实IP地址"http_user_agent": "$http_user_agent", # 用户代理字符串"status": "$status", # HTTP响应状态码"request_method": "$request_method" # 请求方法(GET, POST等)}';
# 使用新定义的日志格式记录访问日志
access_log /var/log/nginx/access_json.log access_json;
# 错误日志配置保持不变
error_log /var/log/nginx/error.log;
}# 编辑nginx的默认站点配置文件,注释掉默认的try_files指令
[root@node0 ~]# vim /etc/nginx/sites-available/default
location / {...#try_files $uri $uri/ =404; # 注释掉这一行,意味着可以自定义处理请求的方式
}# 重启nginx以应用更改
[root@node0 ~]# systemctl restart nginx# 安装filebeat的deb包
[root@node0 ~]# dpkg -i filebeat-8.12.2-amd64.deb # 安装filebeat# 备份filebeat的配置文件
[root@node0 ~]# cp /etc/filebeat/filebeat.yml{,.bak}# 编辑filebeat的配置文件
[root@node0 ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:- type: logenabled: truepaths:- /var/log/nginx/access_json.logjson.keys_under_root: truejson.overwrite_keys: truetags: ["nginx-access"]- type: logenabled: truepaths:- /var/log/nginx/error.logtags: ["nginx-error"]- type: logenabled: truepaths:- /var/log/syslogtags: ["syslog"]output.kafka:hosts: ["10.0.0.130:9092", "10.0.0.140:9092", "10.0.0.150:9092"]topic: filebeat-logpartition.round_robin:reachable_only: truerequired_acks: 1compression: gzipmax_message_bytes: 1000000# 启用并启动filebeat服务
[root@node0 ~]# systemctl enable --now filebeat
2、安装kafka集群和logstash,mysql,配置node3(10.0.0.130),node4(10.0.0.140),node5(10.0.0.150)采用logstash转发nginx日志到elasticsearch集群。
# 在 node3 节点上执行 install_kafka_cluster.sh 脚本,用于安装 Kafka 集群相关组件
[root@node3 ~]# bash install_kafka_cluster.sh
# 在 node4 节点上执行 install_kafka_cluster.sh 脚本,用于安装 Kafka 集群相关组件
[root@node4 ~]# bash install_kafka_cluster.sh
# 在 node5 节点上执行 install_kafka_cluster.sh 脚本,用于安装 Kafka 集群相关组件
[root@node5 ~]# bash install_kafka_cluster.sh# 在 node3 节点上启动 Kafka 服务,使用指定的配置文件
[root@node3 ~]# /usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties
# 在 node4 节点上启动 Kafka 服务,使用指定的配置文件
[root@node4 ~]# /usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties
# 在 node5 节点上启动 Kafka 服务,使用指定的配置文件
[root@node5 ~]# /usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties# 在 node4 节点上更新系统软件包列表,并安装 OpenJDK 17,因为 Logstash 依赖 Java 环境
[root@node4 ~]# apt update && apt -y install openjdk-17-jdk
# 在 node4 节点上使用 dpkg 工具安装 Logstash 的 deb 包
[root@node4 ~]# dpkg -i logstash-8.12.2-amd64.deb # 在 node4 节点上使用 vim 编辑器编辑 Logstash 的配置文件 kafka-to-es.conf
# 此配置文件用于将 Kafka 中的数据转发到 Elasticsearch
[root@node4 ~]# vim /etc/logstash/conf.d/kafka-to-es.conf
# Logstash 的输入配置部分,使用 Kafka 作为数据源
input {kafka {# 指定 Kafka 集群的引导服务器地址,用于连接 Kafka 集群bootstrap_servers => "10.0.0.130:9092,10.0.0.140:9092,10.0.0.150:9092"# 指定要消费的 Kafka 主题topics => "filebeat-log"# 指定消息的编解码器为 JSON,用于解析 Kafka 中的消息codec => "json"}
}# Logstash 的输出配置部分,根据日志的标签将数据输出到不同的 Elasticsearch 索引
output {# 如果日志标签包含 "nginx-access",则将数据发送到 Elasticsearchif "nginx-access" in [tags] {elasticsearch {# 指定 Elasticsearch 集群的节点地址hosts => ["10.0.0.160:9200", "10.0.0.170:9200", "10.0.0.180:9200"]# 指定 Elasticsearch 中的索引名称,按日期生成index => "logstash-kafka-nginx-accesslog-%{+YYYY.MM.dd}"# 允许覆盖现有的索引模板template_overwrite => true}jdbc {# 配置 JDBC 连接字符串connection_string => "jdbc:mysql://10.0.0.150/elk?user=elk&password=123456&useUnicode=true&characterEncoding=UTF8"# 配置 SQL 插入语句,使用占位符statement => "INSERT INTO elklog (clientip, responsetime, uri, status) VALUES (?, ?, ?, ?)"# 配置占位符对应的字段statement_params => {"1" => "clientip","2" => "responsetime","3" => "uri","4" => "status"}}} # 如果日志标签包含 "nginx-error",则将数据发送到 Elasticsearchelse if "nginx-error" in [tags] {elasticsearch {# 指定 Elasticsearch 集群的节点地址hosts => ["10.0.0.160:9200", "10.0.0.170:9200", "10.0.0.180:9200"]# 指定 Elasticsearch 中的索引名称,按日期生成index => "logstash-kafka-nginx-errorlog-%{+YYYY.MM.dd}"# 允许覆盖现有的索引模板template_overwrite => true}} # 如果日志标签包含 "syslog",则将数据发送到 Elasticsearchelse if "syslog" in [tags] {elasticsearch {# 指定 Elasticsearch 集群的节点地址hosts => ["10.0.0.160:9200", "10.0.0.170:9200", "10.0.0.180:9200"]# 指定 Elasticsearch 中的索引名称,按日期生成index => "logstash-kafka-syslog-%{+YYYY.MM.dd}"# 允许覆盖现有的索引模板template_overwrite => true}}
}# 在node4节点上,使用dpkg命令安装mysql-connector-j的deb包,该包适用于ubuntu22.04系统,版本为8.0.33
[root@node4 ~]# dpkg -i mysql-connector-j_8.0.33-1ubuntu22.04_all.deb # 在node4节点上,创建目录路径 /usr/share/logstash/vendor/jar/jdbc,如果父目录不存在则一并创建
[root@node4 ~]# mkdir -p /usr/share/logstash/vendor/jar/jdbc # 在node4节点上,将mysql-connector-j-8.0.33.jar文件从 /usr/share/java/ 复制到 /usr/share/logstash/vendor/jar/jdbc/ 目录下
[root@node4 ~]# cp /usr/share/java/mysql-connector-j-8.0.33.jar /usr/share/logstash/vendor/jar/jdbc/ # 在node4节点上,递归修改 /usr/share/logstash/vendor/jar/ 目录及其所有子目录和文件的所有者为logstash用户,所属组为logstash组
[root@node4 ~]# chown -R logstash.logstash /usr/share/logstash/vendor/jar/ # 在node4节点上,更新软件包列表并安装ruby语言环境
[root@node4 ~]# apt update && apt -y install ruby # 在node4节点上,修改ruby的gem源,添加国内的ruby-china源,并移除默认的rubygems.org源
[root@node4 ~]# gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/ # 在node4节点上,使用logstash的插件安装命令,安装logstash-output-jdbc插件
[root@node4 ~]# /usr/share/logstash/bin/logstash-plugin install logstash-output-jdbc
#如果无法在线安装,可以先从已经安装的主机导出插件,再导入
[root@ubuntu22 ~]# /usr/share/logstash/bin/logstash-plugin prepare-offline-pack logstash-output-jdbc
[root@node4 ~]# /usr/share/logstash/bin/logstash-plugin install file:///usr/share/logstash-offline-plugins-8.12.2.zip
#检查插件安装成功
[root@node4 ~]# /usr/share/logstash/bin/logstash-plugin|grep jdbc# 在node4节点上,重启logstash服务
[root@node4 ~]# systemctl restart logstash # 在node5节点上,更新软件包列表并安装mysql服务器
[root@node5 ~]# apt update && apt -y install mysql-server # 在node5节点上,使用vim编辑器打开mysql配置文件mysqld.cnf,修改其中的绑定地址相关配置
[root@node5 ~]# vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 将mysql服务的绑定地址修改为0.0.0.0,允许所有IP地址访问
bind-address = 0.0.0.0
# 将mysqlx协议的绑定地址也修改为0.0.0.0,允许所有IP地址访问
mysqlx-bind-address = 0.0.0.0 # 在node5节点上,重启mysql服务使配置生效
[root@node5 ~]# systemctl restart mysql.service # 在node5节点上,进入mysql命令行客户端
[root@node5 ~]# mysql # 在mysql中,创建名为elk的数据库
[root@node5 ~]# create database elk; # 在mysql中,创建用户elk,允许来自10.0.0.0/24网段的主机连接,密码为123456
[root@node5 ~]# create user elk@"10.0.0.%" identified by '123456'; # 在mysql中,授予用户elk对elk数据库下所有表的所有权限
[root@node5 ~]# grant all privileges on elk.* to elk@"10.0.0.%"; # 在mysql中,刷新权限使配置立即生效
[root@node5 ~]# flush privileges; # 在mysql中,切换到elk数据库
[root@node5 ~]# use elk; # 在elk数据库中,创建名为elklog的表,包含clientip、responsetime、uri、status、time字段,time字段默认值为当前时间戳
[root@node5 ~]# CREATE TABLE elklog ( clientip VARCHAR(39),responsetime DECIMAL(10, 3),uri VARCHAR(256),status CHAR(3),time TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
3、安装elasticsearch集群、kibana、cerebro,配置node6(10.0.0.160),node7(10.0.0.170),node8(10.0.0.180),利用kibana和cerebro查看收集的日志。
# 在node6节点上安装Kibana的deb包
[root@node6 ~]# dpkg -i kibana-8.12.2-amd64.deb# 编辑Kibana的配置文件,设置监听端口、主机地址、公共基础URL、Elasticsearch集群地址以及界面语言
[root@node6 ~]# vim /etc/kibana/kibana.yml
server.port: 5601 # Kibana服务监听端口
server.host: "0.0.0.0" # Kibana监听的主机地址,0.0.0.0表示监听所有IP
server.publicBaseUrl: "http://kibana.zhangyao.com" # Kibana的公共基础URL
elasticsearch.hosts: # Elasticsearch集群的地址列表["http://10.0.0.160:9200","http://10.0.0.170:9200","http://10.0.0.180:9200"]
i18n.locale: "zh-CN" # 界面语言设置为中文# 重启Kibana服务以应用更改
[root@node6 ~]# systemctl restart kibana# 在node6节点上安装OpenJDK 11 JDK
[root@node6 ~]# apt -y install openjdk-11-jdk# 在node6节点上安装Cerebro的deb包,Cerebro是一个Elasticsearch的Web UI管理工具
[root@node6 ~]# dpkg -i cerebro_0.9.4_all.deb# 编辑Cerebro的配置文件,设置数据存储路径
[root@node6 ~]# vim /etc/cerebro/application.conf
data.path: "/var/lib/cerebro/cerebro.db" # Cerebro的数据存储路径
#data.path = "./cerebro.db" # 注释掉默认路径# 重启Cerebro服务以应用更改
[root@node6 ~]# systemctl restart cerebro.service# 在node6、node7、node8节点上分别安装Elasticsearch的deb包
[root@node6 ~]# dpkg -i elasticsearch-8.12.2-amd64.deb
[root@node7 ~]# dpkg -i elasticsearch-8.12.2-amd64.deb
[root@node8 ~]# dpkg -i elasticsearch-8.12.2-amd64.deb # 编辑node6上的Elasticsearch配置文件,设置集群名称、节点名称、监听主机、发现主机列表、禁用安全功能以及初始主节点列表
[root@node6 ~]# vim /etc/elasticsearch/elasticsearch.yml
cluster.name: zjy-cluster # 集群名称
node.name: node-6 # 节点名称
network.host: 0.0.0.0 # 监听主机地址
discovery.seed_hosts: ["10.0.0.160","10.0.0.170","10.0.0.180"] # 发现主机列表
xpack.security.enabled: false # 禁用安全功能
cluster.initial_master_nodes: ["10.0.0.160","10.0.0.170","10.0.0.180"] # 初始主节点列表# 编辑JVM选项,设置最小和最大堆内存大小
[root@node6 ~]# vim /etc/elasticsearch/jvm.options
-Xms1g # 最小堆内存大小
-Xmx1g # 最大堆内存大小# 使用rsync将Elasticsearch的配置文件同步到node7和node8节点
[root@node6 ~]# rsync /etc/elasticsearch/elasticsearch.yml 10.0.0.170:/etc/elasticsearch/elasticsearch.yml
[root@node6 ~]# rsync /etc/elasticsearch/elasticsearch.yml 10.0.0.180:/etc/elasticsearch/elasticsearch.yml
[root@node6 ~]# rsync /etc/elasticsearch/jvm.options 10.0.0.170:/etc/elasticsearch/jvm.options
[root@node6 ~]# rsync /etc/elasticsearch/jvm.options 10.0.0.180:/etc/elasticsearch/jvm.options # 分别编辑node7和node8上的Elasticsearch配置文件,仅更改节点名称
[root@node7 ~]# vim /etc/elasticsearch/elasticsearch.yml
node.name: node-7
[root@node8 ~]# vim /etc/elasticsearch/elasticsearch.yml
node.name: node-8# 在node6、node7、node8节点上分别重新加载systemd守护进程、启用Elasticsearch服务并启动服务
[root@node6 ~]# sudo systemctl daemon-reload
[root@node6 ~]# sudo systemctl enable elasticsearch.service
[root@node6 ~]# sudo systemctl restart elasticsearch.service
[root@node7 ~]# sudo systemctl daemon-reload
[root@node7 ~]# sudo systemctl enable elasticsearch.service
[root@node7 ~]# sudo systemctl restart elasticsearch.service
[root@node8 ~]# sudo systemctl daemon-reload
[root@node8 ~]# sudo systemctl enable elasticsearch.service
[root@node8 ~]# sudo systemctl restart elasticsearch.service# 在node6节点上使用curl命令检查Elasticsearch集群中的节点信息
[root@node6 ~]# curl 'http://127.0.0.1:9200/_cat/nodes?v'
# 输出显示了集群中每个节点的IP地址、各种性能指标以及节点名称等信息
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
10.0.0.170 36 97 2 0.31 0.16 0.07 cdfhilmrstw - node-7
10.0.0.180 31 95 4 0.54 0.38 0.27 cdfhilmrstw - node-8
10.0.0.160 31 96 13 2.38 1.43 0.73 cdfhilmrstw * node-6# 在node6节点上使用curl命令访问nginx服务器,生成访问日志
[root@node6 ~]# curl http://10.0.0.100
[root@node6 ~]# curl http://10.0.0.110
[root@node6 ~]# curl http://10.0.0.120#修改windows的配置文件C:\Windows\System32\drivers\etc
10.0.0.160 kibana.zhangyao.com
浏览器访问kibana.zhangyao.com:5601和kibana.zhangyao.com:9000
相关文章:
Linux云计算SRE-第二十周
完成ELK综合案例里面的实验,搭建完整的环境 一、 1、安装nginx和filebeat,配置node0(10.0.0.100),node1(10.0.0.110),node2(10.0.0.120),采用filebeat收集nignx日志。 #node0、node1、node2采用以下相同方式收集ngin…...
springcloud gateway搭建及动态获取nacos注册的服务信息信息
前言 Spring Cloud Gateway 通过集成 Nacos 服务发现,可以动态获取注册到 Nacos 的微服务实例信息,并根据服务名(Service Name)自动生成路由规则或手动配置路由规则,实现请求的动态路由和负载均衡。 一个最简单的网关就…...
SSM基础专项复习6——Spring框架AOP(3)
系列文章 1、SSM基础专项复习1——SSM项目整合-CSDN博客 2、SSM基础专项复习2——Spring 框架(1)-CSDN博客 3、SSM基础专项复习3——Spring框架(2)-CSDN博客 4、SSM基础专项复习4——Maven项目管理工具(1ÿ…...
【嵌入式linux】网口和USB热插拔检测
在Linux常常需要对网口和USB等外设接口进行插拔检测,从而执行部分初始化操作。下面简要介绍Linux的Netlink机制,并在C程序中使用Linux的Netlink机制完成网口和USB口插拔检测。 Netlink 是 Linux 内核与用户空间进程通信的一种机制,主要用于内…...
C++(13)—类和对象(中) ③拷贝构造函数
文章目录 一、拷贝构造函数的基本概念1.1 什么是拷贝构造函数?1.2 拷贝构造函数的调用场景 二、拷贝构造函数的核心特性2.1 拷贝构造函数的参数2.2 默认拷贝构造函数 三、深拷贝与浅拷贝3.1 浅拷贝的问题 四、拷贝构造函数的实际应用4.1 何时需要显式定义拷贝构造函…...
【GPT入门】第17课 RAG向量检索分类、原理与优化
【GPT入门】第16课 RAG向量检索分类、原理与优化 1.向量检索概念1.1 文本检索的两类方式1.2 向量的定义1.3 文本向量(Text Embeddings)1.4 文本向量如何得到1.5 向量间相似度计算1.6 向量数据库功能对比1.7 open ai发布的两个向量模型2.向量数据库1.8 向量检索的优化3.检索后…...
Operator <=> (spaceship operator)
operator <>动机 在C20以前定义比较运算符:其他比较运算符基于<和实现 struct Type {int value;// 相等运算符friend bool operator(const Type& a, const Type& b) {return a.value b.value;}// 不等运算符friend bool operator!(const Type&a…...
队列的简单例题
题目如下 模拟队列 首先你要明白队列的话 只有队尾才能进行新增,也就是入队 只有队首才能出队,也就是删除 队首队尾指针一开始默认都是0 相当于队列中一开始是有一个元素的就是 0的位置 队首指针head0 队尾指针tail0 1.入队也就是队尾要先赋值…...
Calibre-Web-Automated:打造你的私人图书馆
有没有小伙伴在工作、学习或生活中喜欢保存一些书籍或PDF文件,结果过一段时间想找的时候却怎么也找不到,最后只能无奈放弃?你是否已经厌倦了手动管理电子书的繁琐?是否梦想拥有一个私人图书馆,随时随地都能轻松访问自己…...
第27周JavaSpringboot 前后端联调
电商前后端联调课程笔记 一、项目启动与环境搭建 1.1 项目启动 在学习电商项目的前后端联调之前,需要先掌握如何启动项目。项目启动是整个开发流程的基础,只有成功启动项目,才能进行后续的开发与调试工作。 1.1.1 环境安装 环境安装是项…...
【实战ES】实战 Elasticsearch:快速上手与深度实践-8.2.1AWS OpenSearch无服务器方案
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 8.2.1AWS OpenSearch 无服务器方案深度解析与实践指南1. Serverless架构的核心价值与行业趋势1.1 传统Elasticsearch集群的运维挑战1.2 Serverless技术演进路线技术特性对比…...
鸿蒙开发者社区资源的重要性
鸿蒙系统,作为华为公司自主研发的操作系统,旨在为各类智能设备提供统一的平台。它不仅支持手机、平板电脑等移动设备,还涵盖了物联网(IoT)设备和其他智能家居产品。鸿蒙系统的开发环境和工具链对于开发者来说至关重要&…...
【QT】事件系统入门——QEvent 基础与示例
一、事件介绍 事件是 应用程序内部或者外部产生的事情或者动作的统称 在 Qt 中使用一个对象来表示一个事件。所有的 Qt 事件均继承于抽象类 QEvent。事件是由系统或者 Qt 平台本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候&…...
⚡️Jolt -- 通过JSON配置来处理复杂数据转换的工具
简介:一个能够通过JSON配置(特定的语法)来处理复杂数据转换的工具。 比如将API响应转换为内部系统所需的格式,或者处理来自不同来源的数据结构差异。例如,将嵌套的JSON结构扁平化,或者重命名字段࿰…...
2025-03-13 禅修-错误的做法
摘要: 2025-03-13 禅修-错误的做法 禅修-错误的做法 我们今天的课程是这个禅修防误。主要是有一些我们所明令禁止的。在整个禅修过程中,会对我们禅修出现一些弊端的这部分,我们会给大家介绍。第一,在禅修中要防止自由联想,防止幻…...
uni-app学习笔记——自定义模板
一、流程 1.这是一个硬性的流程,只要按照如此程序化就可以实现 二、步骤 1.第一步 2.第二步 3.第三步 4.每一次新建页面,都如第二步一样;可以选择自定义的模版(vue3Setup——这是我自己的模版),第二步的…...
【医院绩效管理专题】8.医院绩效数据的收集与整理方法:洞察现状,引领未来
医院成本核算、绩效管理、运营统计、内部控制、管理会计专题索引 一、引言 在当今医疗行业竞争日益激烈的背景下,医院绩效管理已成为提升医疗服务质量、优化运营效率、增强综合竞争力的关键因素。而绩效数据的收集与整理作为绩效管理的基础环节,其科学性、准确性和完整性直…...
麒麟系统如何安装Anaconda
在银河麒麟操作系统(Kylin OS)中安装 Anaconda 的步骤相对简单,以下是基于搜索结果整理的详细安装指南: 步骤 1:下载 Anaconda 安装脚本 打开浏览器,访问 Anaconda 官方下载页面。选择适合 Linux 系统的安…...
Linux网络套接字编程——UDP服务器
Linux网络套接字编程——创建并绑定-CSDN博客 前面已经介绍了网络套接字的创建和绑定,这篇文章会通过UDP套接字实现一个UDP服务器。 先介绍将使用的接口。 recvfrom ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr,…...
deepseek+kimi做ppt教程记录
1.首先注册deepseek和kimi deepseek官网:https://chat.deepseek.com/ kimi官网:https://kimi.moonshot.cn/ 以下以一篇工作总结报告为例 2.使用deepseek生成ppt大纲 让deepseek生成kimi生成ppt所需要的内容时,需要注意提示词内容,…...
Cursor 终极使用指南:从零开始走向AI编程
Cursor 终极使用指南:从零开始走向AI编程 问什么是cursor? mindmaproot(Cursor核心功能)智能编码代码生成自动补全错误修复项目管理多窗口布局版本控制终端集成个性设置主题定制快捷键配置插件扩展AI协作对话编程知识检索文档生成前些天发现了一个巨牛的人工智能学…...
TiDB 观测性解读(一)丨索引观测:快速识别无用索引与低效索
导读 可观测性已经成为分布式系统成功运行的关键组成部分。如何借助多样、全面的数据,让架构师更简单、高效地定位问题、分析问题、解决问题,已经成为业内的一个技术焦点。本系列文章将深入解读 TiDB 的关键参数,帮助大家更好地观测系统的状…...
批量将 Excel 文档中的图片提取到文件夹
前面我们介绍过如何批量删除 Excel 文档中的所有图片或者指定的图片,其中就需要用到批量提取 Excel 文档中图片的操作。我们如何才能够将 Excel 文档中的图片快速的提取出来呢?其实单个 Excel 文档中的图片提取到文件夹中是有多种方法可以完成的…...
postgresql 数据库使用
目录 索引 查看索引 创建 删除索引 修改数据库时区 索引 查看索引 select * from pg_indexes where tablenamet_table_data; 或者 select * from pg_statio_all_indexes where relnamet_table_data; 创建 CREATE INDEX ix_table_data_time ON t_table_data (id, crea…...
怎样进行相关论文的调研——How to conduct research on relevant papers?
怎样进行相关论文的调研 写在前面1.打开Web of Science2.检索同类表达3.构建“检索式”什么是“检索式” 参考内容 写在前面 偶然间刷到一篇知乎文章,顺着文章的推荐看了钟澄老师的科研论和在B站上的教学视频,深入了解后发现读文章还有这么多讲究&#…...
蓝桥杯备赛-基础练习 day1
1、闰年判断 问题描述 给定一个年份,判断这一年是不是闰年。 当以下情况之一满足时,这一年是闰年:1.年份是4的倍数而不是100的倍数 2.年份是400的倍数。 其他的年份都不是闰年。 输入格式 输入包含一个…...
本地算力部署大模型详细流程(一)
1、版本选择 本地部署就是自己部署deepseek模型,使用本地的算力。 主要瓶颈:内存显存的大小。特点:此方案不用联网。适合:有数据隐私方面担忧的或者保密单位根本就不能上网的。 2、部署过程 比较流行的是使用ollama:ht…...
便利店商品推荐数字大屏:基于python和streamlit
基于python和streamlit实现的便利店商品推荐大屏,针对选择困难症消费者。 import streamlit as st import pandas as pd import numpy as np import altair as alt from datetime import datetime, timedelta import time# 模拟数据生成 def generate_data():np.ra…...
机器视觉工程师红外相机的选择:红外长波工业相机和短波红外工业相机玄机大总结
红外长波(LWIR)和短波(SWIR)工业相机在原理、应用场景和技术特点上有显著差异。以下是它们的对比分析: 1. 波长范围与成像原理 2. 技术特点 3. 典型应用场景 4. 优缺点对比 LWIR优势: 无需光照,适用于完全黑暗环境。 直接反映物体温度分布。 对烟雾、灰尘穿透能力强。…...
AI重构SEO关键词布局
内容概要 在搜索引擎优化(SEO)领域,AI技术的深度应用正在颠覆传统关键词布局逻辑。通过机器学习算法与语义分析模型,智能系统能够实时解析海量搜索数据,构建动态词库并精准捕捉用户意图。相较于依赖人工经验的关键词筛…...
c语言经典基础编程题
c语言经典基础编程题 一、输出输出1.1温度输出1.2排齐数据1.3进制转换 二、选择分支2.1求最大值2.2成绩评定2.3分段函数求值2.4 利润计算2.5判断闰年2.6二次方程根 三、循环结构3.1倒数求和3.2最大数3.3判断素数3.4判断完全数3.5打印菱形🚀🚀Ὠ…...
【每日学点HarmonyOS Next知识】防截屏、作用域问题、观察器问题、对话框关闭、判断对象包含某个字段
1、HarmonyOS 防截屏功能如何实现? 防截屏功能如何实现 参考demo: aboutToDisappear(): void {let windowClass: window.Window | undefined undefined;window.getLastWindow(getContext(this)).then((win) > {this.window win }) window.getLas…...
linux操作系统实战
第一题 创建根目录结构中的所有的普通文件 [rootlocalhost ~]# cd /[rootlocalhost /]# mkdir /text[rootlocalhost /]# cd /text[rootlocalhost text]# mkdir /text/boot /text/root /text/home /text/bin /text/sbin /text/lib /text/lib64 /text/usr /text/opt /text/etc /…...
MKS HA-MFV:半导体制造中的高精度流量验证技术解析
引言 在半导体先进制程(如3nm节点)中,工艺气体流量的精准控制直接决定刻蚀、沉积等关键步骤的均匀性和良率。MKS Instruments推出的 HA-MFV(High Accuracy Mass Flow Verifier) 通过创新设计解决了传统流量验证技术的…...
图论part2|200. 岛屿数量、695. 岛屿的最大面积
200、岛屿数量 🔗:200. 岛屿数量 - 力扣(LeetCode)思路: 1. 深度优先算法 二叉树中dfs要素:1、访问左右相邻子节点 2、判断base case(终止条件)参考二叉树中的dfs看网格问题1. 网格…...
小白学Agent技术[5](Agent框架)
文章目录 Agent框架Single Agent框架BabyAGIAutoGPTHuggingGPTHuggingGPT工作原理说明GPT-EngineerAppAgentOS-Copilot Multi-Agent框架斯坦福虚拟小镇TaskWeaverMetaGPT微软UFOAgentScope现状 常见Agent项目比较概述技术规格和能力实际应用案例开发体验比较ChatChain模式 Agen…...
SpringBoot为什么流行以及能解决什么问题?
Spring Boot 之所以流行,主要是因为它极大地简化了 Spring 应用的开发,提供了一种开箱即用的体验,使开发者能够快速构建独立运行的、生产级的 Spring 应用。 Spring Boot 为什么流行? 简化配置 传统 Spring 需要大量 XML 或 Java…...
MySQL -- 数据类型
1、数据库的基础数据类型 TINYINT INT BIGINT FLOAT DECIMAL CHAR VARCHAR TEXT BLOB DATE DATETIME TIMESTAMP SET ENUM 2、不同数据类型区别以及作用 1、数值类型 1.1 整数类型 1.1.1 TINYINT 这里我们以TINYINT这个类型为例,解释一下在mysql中…...
TypeScript 中 interface 与 type的使用注意事项 及区别详细介绍
interfact 与 type 的区别及使用方法 一、 interfact 与 type主要区别 二、 interfact 与 type具体用法 1. 定义对象类型 interface 的典型用法: interface Person {name: string;age: number;greet(): void; }type 的等效定义: type Person {name…...
使用位运算如何找到数组中只出现一次的数?
题目链接:137. 只出现一次的数字 II - 力扣(LeetCode) 算法解析 位运算是用于二进制的运算符号。而对于多次出现的数字,其二进制都是一模一样的,这里是3次重复的出现是数字。由此我们可以想到,如果我们由低…...
复变函数摘记1
复变函数摘记1 1. 基本概念1.1 复数、复变函数1.2 复变函数的极限、连续性1.3 复变函数的导数、微分1.4 解析函数、柯西-黎曼方程 2. 复变函数的积分2.1 复变函数的曲线积分2.2 柯西-古萨基本定理、复合闭路定理2.3 复变函数的不定积分2.4 柯西积分公式、高阶导数 \quad 本文摘…...
(2025|ICLR|厦大华为,LoSA,基于表示互信息的动态层级稀疏率,基于重构误差的秩分配)LLM 的动态低秩稀疏自适应
Dynamic Low-Rank Sparse Adaptation for Large Language Models 目录 1. 引言 1.1 关键词 2. 方法 2.1 预备知识 2.2 层级稀疏率确定 2.3 稀疏感知的秩分配 2.4 动态稀疏与适配 3. 实验 3.1 实验设置 3.2 语言建模 3.3 零样本任务 3.4 N:M 稀疏性 3.5 消融实验 …...
暨南大学智科人工智能复试模拟
本人初试统招线以外,复试逆袭上岸!!!复试中的笔试和面试尤为重要,笔试固然重要但是面试的不确定性更强。另外,很多同学在复试之前可能都没有完整的走过一遍复试面试的流程,这里建议大家最好是能…...
编译器视角下的 C++ 异常:探究 throw 与 catch 的编译原理
目录 0.写在前面 1.C异常概念 异常的定义: 异常处理的基本组成部分: 1. throw表达式 2. try块 3. catch块 2. 异常的使用 异常的抛出和匹配原则: 在函数调用链中异常栈展开匹配原则: 3.异常的重新抛出 4.异常安全 异…...
测试淘宝评论接口返回数据的详细说明
在电商数据分析、用户体验优化和竞品分析中,获取商品评论数据是一项重要的功能。淘宝开放平台提供了商品评论的 API 接口,允许开发者通过合法的方式获取商品的用户评论数据。本文将详细介绍如何测试淘宝评论接口的返回数据,包括接口调用步骤、…...
【微知】plantuml在泳道图中如何将几个步骤放入一个框中?(group “sub框1“; end !! “sub框1“)
背景 将几个步骤放在一起画个框,分区方便 命令 用法: group 和 end 关键字 用法: group "sub框1"User -> User: 模板渲染User -> User: 返回 HTMLend !! "sub框1" 这里!!是注释实操 修改前: 修改…...
深入解析 React 最新特性:革新、应用与最佳实践
深入解析 React 最新特性:革新、应用与最佳实践 1. 引言 React 作为前端开发的核心技术之一,近年来不断推出 新的 API 和优化机制,从 Concurrent Rendering(并发模式) 到 Server Components(服务器组件&a…...
C语言之数据结构:理解什么是数据结构和算法(启航)
引言 启航篇,理解什么是数据结构和算法 在 C 语言编程领域,数据结构和算法是两个核心且紧密相关的概念 一、数据结构 定义 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合(比如数组),它是组织和存储数…...
【21】单片机编程核心技巧:if语句逻辑与真假判断
【21】单片机编程核心技巧:if语句逻辑与真假判断 七律 条件分野 if语句判真假,括号条件定乾坤。 非零为真零为假,大括号内藏玄门。 省略虽简风险在,代码规范护本根。 单片逻辑由心控,条件分支自成文。 注释…...
hackme靶机通关攻略
第一步:确定靶机IP 第二步:使用御剑后台扫描工具扫描敏感文件 第三步:访问register.php注册登录,进入welcome.php页面 第四步:访问一个不存在的页面,确定网站使用的中间件是Apache(无用…...