elasticsearch与MySQL数据同步

Logstash

什么是Logstash

Logstash是一款轻量级的日志搜集处理框架,可以方便的把分散的、多样化的日志搜集
起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件。

Logstash安装与测试

解压,进入bin目录
logstash ‐e ‘input { stdin { } } output { stdout {} }’
控制台输入字符,随后就有日志输出
注意:双引号不能改成单引号否则可能会报

ERROR: Unknown command ‘{‘
enter image description here
stdin,表示输入流,指从键盘输入
stdout,表示输出流,指从显示器输出
命令行参数:
-e 执行
–config 或 -f 配置文件,后跟参数类型可以是一个字符串的配置或全路径文件名或全路径
路径(如:/etc/logstash.d/,logstash会自动读取/etc/logstash.d/目录下所有*.conf 的文
本文件,然后在自己内存里拼接成一个完整的大配置文件再去执行)

MySQL数据导入Elasticsearch

(1)在logstash-5.6.8安装目录下创建文件夹mysqletc (名称随意)
(2)文件夹下创建mysql.conf (名称随意) ,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
input {
jdbc {
# mysql jdbc connection string to our backup databse 后面的test
对应mysql中的test数据库
jdbc_connection_string =>
"jdbc:mysql://127.0.0.1:3306/tensquare_article?characterEncoding=UTF8"
# the user we wish to excute our statement as
jdbc_user => "root"
jdbc_password => "123456"
# the path to our downloaded jdbc driver
jdbc_driver_library => "D:/logstash‐5.6.8/mysqletc/mysql‐
connector‐java‐5.1.46.jar"
# the name of the driver class for mysql
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
#以下对应着要执行的sql的绝对路径。
statement => "select id,title,content from tb_article"
#定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为
每分钟都更新
schedule => "* * * * *"
}
} o
utput {
elasticsearch {
#ESIP地址与端口
hosts => "localhost:9200"
#ES索引名称(自己定义的)
index => "tensquare"
#自增ID编号
document_id => "%{id}"
document_type => "article"
} s
tdout {
#以JSON格式输出
codec => json_lines
}
}

(3)将mysql驱动包mysql-connector-java-5.1.46.jar拷贝至D:/logstash-
5.6.8/mysqletc/ 下 。D:/logstash-5.6.8是你的安装目录
(4)命令行下执行

logstash ‐f ../mysqletc/mysql.conf

观察控制台输出,每间隔1分钟就执行一次sql查询。
enter image description here
再次刷新elasticsearch-head的数据显示,看是否也更新了数据。

Elasticsearch Docker环境下安装

容器的创建与远程连接

(1)下载镜像(此步省略)

docker pull elasticsearch:5.6.8

(2)创建容器

docker run ‐di ‐‐name=tensquare_elasticsearch ‐p 9200:9200 ‐p 9300:9300
elasticsearch:5.6.8

(3)浏览器输入地址:
http://192.168.184.134:9200/ 即可看到如下信息

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"name" : "WmBn0H‐",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "2g‐VVbm9Rty7J4sksZNJEg",
"version" : {
"number" : "5.6.8",
"build_hash" : "688ecce",
"build_date" : "2018‐02‐16T16:46:30.010Z",
"build_snapshot" : false,
"lucene_version" : "6.6.1"
},
"tagline" : "You Know, for Search"
}

(4)我们修改demo的application.yml

1
2
3
4
spring:
data:
elasticsearch:
cluster‐nodes: 192.168.184.135:9300

(5)运行测试程序,发现会报如下错误

1
2
3
4
5
6
7
8
9
10
11
12
13
NoNodeAvailableException[None of the configured nodes are available:
[{#transport#‐1}{exvgJLR‐RlCNMJy‐hzKtnA}{192.168.184.135}
{192.168.184.135:9300}]
]
at
org.elasticsearch.client.transport.TransportClientNodesService.ensureNodes
AreAvailable(TransportClientNodesService.java:347)
at
org.elasticsearch.client.transport.TransportClientNodesService.execute(Tra
nsportClientNodesService.java:245)
at
org.elasticsearch.client.transport.TransportProxyClient.execute(TransportP
roxyClient.java:59)

这是因为elasticsearch从5版本以后默认不开启远程连接,需要修改配置文件
(6)我们进入容器

docker exec ‐it tensquare_elasticsearch /bin/bash

此时,我们看到elasticsearch所在的目录为/usr/share/elasticsearch ,进入config看到了
配置文件
elasticsearch.yml
我们通过vi命令编辑此文件,尴尬的是容器并没有vi命令 ,咋办?我们需要以文件挂载的
方式创建容器才行,这样我们就可以通过修改宿主机中的某个文件来实现对容器内配置
文件的修改
(7)拷贝配置文件到宿主机
首先退出容器,然后执行命令:

docker cp
tensquare_elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml
/usr/share/elasticsearch.yml

(8)停止和删除原来创建的容器

docker stop tensquare_elasticsearch
docker rm tensquare_elasticsearch

(9)重新执行创建容器命令

docker run ‐di ‐‐name=tensquare_elasticsearch ‐p 9200:9200 ‐p 9300:9300 ‐v
/usr/share/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch
.yml elasticsearch:5.6.8

(10)修改/usr/share/elasticsearch.yml 将 transport.host: 0.0.0.0 前的#去掉后保
存文件退出。其作用是允许任何ip地址访问elasticsearch .开发测试阶段可以这么做,生
产环境下指定具体的IP
(11)重启启动

docker restart tensquare_elasticsearch

重启后发现重启启动失败了,这时什么原因呢?这与我们刚才修改的配置有关,因为
elasticsearch在启动的时候会进行一些检查,比如最多打开的文件的个数以及虚拟内存
区域数量等等,如果你放开了此配置,意味着需要打开更多的文件以及虚拟内存,所以
我们还需要系统调优。
(12)系统调优
我们一共需要修改两处
修改/etc/security/limits.conf ,追加内容

  • soft nofile 65536
  • hard nofile 65536

nofile是单个进程允许打开的最大文件个数 soft nofile 是软限制 hard nofile是硬限制

修改/etc/sysctl.conf,追加内容
vm.max_map_count=655360

限制一个进程可以拥有的VMA(虚拟内存区域)的数量
执行下面命令 修改内核参数马上生效

sysctl ‐p

(13)重新启动虚拟机,再次启动容器,发现已经可以启动并远程访问

IK分词器安装

(1)快捷键alt+p进入sftp , 将ik文件夹上传至宿主机

sftp> put ‐r d:\setup\ik

(2)在宿主机中将ik文件夹拷贝到容器内 /usr/share/elasticsearch/plugins 目录下。

docker cp ik tensquare_elasticsearch:/usr/share/elasticsearch/plugins/

(3)重新启动,即可加载IK分词器

docker restart tensquare_elasticsearch

HEAD插件安装

(1)修改/usr/share/elasticsearch.yml ,添加允许跨域配置

http.cors.enabled: true
http.cors.allow‐origin: “*”

(2)重新启动elasticseach容器

(3)下载head镜像(此步省略)

docker pull mobz/elasticsearch‐head:5

(4)创建head容器

docker run ‐di ‐‐name=myhead ‐p 9100:9100 docker pull mobz/elasticsearch‐
head:5

最后更新: 2019年03月18日 22:24

原始链接: https://zem12345678.github.io/2019/03/18/elasticsearch与MySQL数据同步/

× 请我吃糖~
打赏二维码