由于mysql数据量大时,like查询几乎无法使用,因此尝试采用搜索引擎ES执行like查询。
1. ES安装
1.1 升级java到11(由于logstash需要1.8的环境,此处升级被退回了)
yum -y install java-11-openjdk
mv /etc/alternatives/java /etc/alternatives/java.bak
# 此处根据实际情况修改新版本java的位置
ln -s /usr/lib/jvm/java-11-openjdk-11.0.11.0.9-1.el7_9.x86_64/bin/java /etc/alternatives/java
1.2 下载并解压es安装包
ES安装包的版本可前往官网自行选择
cd /opt/install
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.0-linux-x86_64.tar.gz
tar -zxvf elasticsearch-7.0.0-linux-x86_64.tar.gz -C /opt/
cd /opt
mv elasticsearch-7.0.0/ elasticsearch
1.3 添加启动用户(ES5.0以上需要非root用户),并配置用户资源
useradd elk
groupadd elk
useradd elk -g elk
# 创建日志目录
mkdir -pv /opt/elk/{data,logs}
# 赋予用户权限
chown -R elk:elk /opt/elk/
chown -R elk:elk /opt/elasticsearch/
vim /etc/security/limits.d/20-nproc.conf
elk soft nproc 65536
1.4 修改es配置文件
vim /opt/elasticsearch/config/elasticsearch.yml
# 节点主机名,根据实际情况配置
node.name: postprocess01_test
path.data: /opt/elk/data
path.logs: /opt/elk/logs
network.host: 0.0.0.0
http.port: 9200
# 集群所有主机名列表
cluster.initial_master_nodes: ["postprocess01_test"]
1.5 配置资源参数和内核参数
资源大小可根据实际情况修改
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 65536
* hard nproc 131072
内核参数
vim /etc/sysctl.conf
vm.max_map_count=262144
fs.file-max=65536
使配置生效
sysctl -p
1.6 启动es,并采用supervisor来维护
sudo -u elk /opt/elasticsearch/bin/elasticsearch
采用如下命令查看服务是否启动成功
curl <node_ip>:9200
2. logstash安装
mysql的数据迁移需要采用logstash配置,logstash需要1.8的java环境
2.1 下载安装包并解压
注意logstash的版本必须与es一致,否则会报错。
cd /opt/install
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.0.0.tar.gz
tar zxf logstash-7.0.0.tar.gz -C /usr/local/
cd /usr/local/
mv logstash-7.0.0/ logstash
2.2 添加用户
# 创建logstash用户
groupadd -r logstash
useradd -r -g logstash -d /usr/local/logstash -s /sbin/nologin -c "logstash" logstash
# 创建配置文件、日志等目录
mkdir -p /etc/logstash/conf.d/
mkdir /var/log/logstash
mkdir /var/lib/logstash
# 赋予用户权限
chown logstash /var/log/logstash
chown logstash:logstash /var/lib/logstash
chown -R logstash:logstash /usr/local/logstash/
2.3 启动logstash,并测试
配置logstash启动路径
vi /etc/init.d/logstash
program=/usr/local/logstash/bin/logstash
测试文件示例:
vi /opt/jlpost/simple.conf
input {
stdin {}
}
output {
stdout {
codec => rubydebug }
}
运行logstash,-f可以挂载文件
/usr/local/logstash/bin/logstash -f /opt/jlpost/simple.conf
3. mysql 数据迁移
3.1 下载mysql-connector-java的jar包
版本选择与jar包下载参见:https://blog.youkuaiyun.com/dylgs314118/article/details/102677942,本项目选择版本6.0.6
创建conf脚本,sql脚本
vi /opt/jlpost/post_process/bin/merge_mysql_to_es.conf
vi /opt/jlpost/post_process/bin/sql_to_es.sql
input {
jdbc {
jdbc_connection_string => "jdbc:mysql://10.30.239.196:3306/jinling_post?characterEncoding=UTF8&serverTimezone=UTC"
jdbc_user => "root"
jdbc_password => "123456"
jdbc_driver_library => "/opt/jlpost/mysql-connector-java-6.0.6.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
codec => plain { charset => "UTF-8"}
jdbc_default_timezone => "Asia/Shanghai"
statement_filepath => "/opt/jlpost/sql_to_es.sql"
schedule => "* * * * *"
type => "jdbc"
}
}
output {
elasticsearch {
hosts => ["10.30.239.196:9200"]
index => "abnormal_result"
}
# 在控制台打印输出,生产中可以关掉
stdout {
codec => json_lines
}
}
select * from abnormal_result limit 10
运行logstash,-f可以挂载文件
/usr/local/logstash/bin/logstash -f /opt/jlpost/post_process/bin/merge_mysql_to_es.conf
导入完成后,采用如下命令查看
http://10.30.239.196:9200/abnormal_result/_search?q=*&pretty