ElasticSearch(1)---Logstash同步Mysql数据到ElasticSearch

1. 单机部署-场景描述

elasticsearch只用过,没有部署或者维护过,从头完整走一遍,记录下,原创实战,有需要的朋友参考下。

2 . 解决方案

特别说下,以前win7下安装的3台虚拟机,没有联网,因为要安装elasticsearch-head需要安装前端报,调整为联网,安装yum、npm等,碰到了很多奇葩的问题,后续有时间发下。

2.1 下载

(1) 下载地址:https://www.elastic.co/cn/downloads/elasticsearch

(2) 下载效果图,282兆,还挺大的

2.2 部署es及启动

(1)上传目录

/opt

(2)解压

[root@w158 ~]# cd /opt/
[root@w158 opt]# tar -zxvf elasticsearch-7.6.2-linux-x86_64.tar.gz
[root@w158 opt]# mv elasticsearch-7.6.2 elasticsearch

(3)新增es操作账户

[root@w158 opt]# useradd laowang
[root@w158 opt]# passwd laowang

设置密码:
laowang
laowang

[root@w158 opt]# chown -R laowang:laowang /opt/elasticsearch

(4)修改配置文件

[root@w158 opt]# su laowang
[laowang@w158 opt]$ cd elasticsearch

[laowang@w158 elasticsearch]$ mkdir data
[laowang@w158 elasticsearch]$ cd config/
[laowang@w158 elasticsearch]$ cp elasticsearch.yml elasticsearch.yml.0328

#其余全部注释,直接复制进去,ip根据本机进行修改
vi elasticsearch.yml
discovery.seed_hosts: ["192.168.85.158"]
cluster.initial_master_nodes: ["node-1"]
cluster.name: es
node.name: node-1
path.data: /opt/elasticsearch/data
path.logs: /opt/elasticsearch/logs
network.host: 0.0.0.0
http.port: 9200
#discovery.zen.ping.unicast.hosts: ["192.168.85.158"]
http.cors.enabled: true
http.cors.allow-origin: "*"

(5)启动

[laowang@w158 elasticsearch]$ cd /opt/elasticsearch/bin
[laowang@w158 bin]$./elasticsearch -d

启动可能报错:

(1)ERROR: bootstrap checks failed
max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
原因:无法创建本地文件问题,用户最大可创建文件数太小
解决方案:
切换到 root 用户,编辑 limits.conf 配置文件, 添加类似如下内容:
vi /etc/security/limits.conf
添加如下内容:
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
备注: * 代表 Linux 所有用户名称(比如 es)
保存、退出、重新登录才可生效
(2)max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least
[262144]
原因:最大虚拟内存太小
大讲台科技
- 2 -
解决方案:切换到 root 用户下,修改配置文件 sysctl.conf
vi /etc/sysctl.conf
添加下面配置:
vm.max_map_count=655360
并执行命令(配置生效):
sysctl -p
然后重新启动 elasticsearch,即可启动成功。

(6)启动效果

进程图:

启动成功:

地址:http://192.168.85.158:9200

 

一、安装elasticsearch和可视化工具

有关整个教程参考:mac安装elasticsearch和可视化工具

1、安装elasticsearch

网址地址:官网

2、安装elasticsearch-head(可视化界面)

安装地址:https://github.com/mobz/elasticsearch-head

3、安装Node.js

安装地址:Mac 下安装node.js

4、grunt-cli(3、4主要配合2实现可视化界面)

命令:sudo npm install -g grunt-cli (我的是安装在Mac上,所以其它不一定适用其它)

在终端运行: grunt --version(成功QQ图)

5、elasticsearch和elasticsearch-head整合

修改 elasticsearch.yml 文件,在文档的最末端加入

http.cors.enabled: true
http.cors.allow-origin: "*"

查看查看结果:输入:localhost:9100

这里说明整个已经安装成功并已经连接成功,green代表很健康

 

二、安装logstash并同步MySQL数据库

 相关博客推荐:安装logstash并同步MySQL数据库

1、下载logstash

注意:下载的版本要和你的elasticsearch的版本号一致,我的版本elasticsearch6.3.2

2、配置logstash-jdbc-input

据说2.x以上就不用配置了,不过我还是配置了

3、添加mysql-connector驱动jar包

把这个jar包放入logstash中:mysql-connector-java-5.1.21.jar

4、添加配置文件(用于连接elasticsearch和mysql数据库)很重要!

具体的解释推荐博客:logstash input jdbc连接数据库

input {
  stdin {
  }

  jdbc {
  type => "news_info"
  #后面的test对应mysql中的test数据库
  jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/news"
  jdbc_user => "root"
  jdbc_password => "root"
  tracking_column => "auto_id"
  record_last_run => "true"
  use_column_value => "true"
  #代表最后一次数据记录id的值存放的位置,它会自动在bin目录创建news,这个必填不然启动报错
  last_run_metadata_path => "news"
  clean_run => "false"

  # 这里代表mysql-connector-java-5.1.21.jar放在bin目录
  jdbc_driver_library => "mysql-connector-java-5.1.21.jar"
  # the name of the driver class for mysql
  jdbc_driver_class => "Java::com.mysql.jdbc.Driver"
  jdbc_paging_enabled => "true"
  jdbc_page_size => "500"
  statement => "select auto_id,title,content,up_count,down_count,origin_create_time,grade from t_live_news_origin where auto_id > :sql_last_value and similar_score>0.5"
#定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
  schedule => "* * * * *"
#设定ES索引类型
  }

    jdbc {
  type => "press_info"
  # mysql jdbc connection string to our backup databse 后面的test对应mysql中的test数据库
  jdbc_connection_string => "jdbc:mysql:////127.0.0.1:3306/news"
  jdbc_user => "root"
  jdbc_password => "root"
  tracking_column => "auto_id"
  record_last_run => "true"
  use_column_value => "true"
  last_run_metadata_path => "news"
  clean_run => "false"
  jdbc_driver_library => "mysql-connector-java-5.1.21.jar"
  jdbc_driver_class => "Java::com.mysql.jdbc.Driver"
  jdbc_paging_enabled => "true"
  jdbc_page_size => "500"
  statement => "select auto_id,title,source_mc,read_count,summary,summary_img,origin_create_time from t_live_press_origin where auto_id > :sql_last_value"
#定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
  schedule => "* * * * *"
  }
}

filter {
mutate {
  convert => [ "publish_time", "string" ]
 }

date {
  timezone => "Europe/Berlin"
  match => ["publish_time" , "ISO8601", "yyyy-MM-dd HH:mm:ss"]
}
#date {
 # match => [ "publish_time", "yyyy-MM-dd HH:mm:ss,SSS" ]
  # remove_field => [ "publish_time" ]
  # }
json {
  source => "message"
  remove_field => ["message"]
  }
}

output {

if [type]=="news_info" {
  elasticsearch {
#ESIP地址与端口
  hosts => "127.0.0.1:9200"
#ES索引名称(自己定义的)
  index => "wantu_news_info"
#自增ID编号
  document_id => "%{auto_id}"
  }
}

if [type]=="press_info" {
  elasticsearch {
#ESIP地址与端口
  hosts => "127.0.0.1:9200"
#ES索引名称(自己定义的)
  index => "wantu_press_info"
#自增ID编号
  document_id => "%{auto_id}"
  }
}

}
5、启动logstash
#我这里的mysql.yml放到了bin的上层目录
./logstash -f ../mysql.yml

6、实际效果

连接成功,已经成功把MySQL数据库表中的数据存储到Elasticsearch中,并且logstash每一分钟去数据库读取最新数据。

最后看下我的logstash文件存放位置

 

三、坑和注意事项的总结  

1、如下报错说明没有找到你的mysql-connectorjar包,很可能你的jar没有放到配置文件指定的目录。 

2、需要重新让查询从0开始。

那就删除last_run_metadata_path => "news"的news文件,当然也要记得删除该索引好让它重新读取数据库表中数据。

相关其它坑博客地址:坑的总结

再遇到其它相关坑,百度吧,都能快速找到答案。

posted @ 2022-02-16 20:15  hanease  阅读(107)  评论(0编辑  收藏  举报