接 ElasticSearch服务集群搭建以及应用(二)
一:ES集群的搭建
ES通常以集群方式工作,这样做不仅能够提高 ES的搜索能力还可以处理大数据搜索的能力,同时也增加了系统的容错能力及高可用。
1.集群的一些概念
(1)、结点
ES集群由多个服务器组成,每个服务器即为一个Node结点(该服务只部署了一个ES进程)。
(2)、分片
片是存储在不同的节点上,当我们的文档量很大时,由于内存和硬盘的限制,同时也为了提高ES的处理能力、容错能力及高可用能力,我们将索引分成若干分片,每个分片可以放在不同的服务器,这样就实现了多个服务器共同对外提供索引及搜索服务。一个搜索请求过来,会分别从各各分片去查询,最后将查询到的数据合并返回给用户。
(3)、副本
为了提高ES的高可用同时也为了提高搜索的吞吐量,我们将分片复制一份或多份存储在其它的服务器,这样即使当前的服务器挂掉了,拥有副本的服务器照常可以提供服务。
(4)、主结点
一个集群中会有一个或多个主结点,主结点的作用是集群管理,比如增加节点,移除节点等,主结点挂掉后ES会重新选一个主结点。
(5)、结点转发
每个结点都知道其它结点的信息,我们可以对任意一个结点发起请求,接收请求的结点会转发给其它结点查询数据。
2.节点的三个角色
主节点:master节点主要用于集群的管理及索引 , 比如新增节点 , 分片分配 , 索引的新增和删除等.
数据节点 :data节点保存数据分片,负责索引和搜索操作
客户端节点 : client节点作为请求客户端存在 , client的作用也作为负载均衡器 , client节点不存数据 , 只将请求均衡的转发到其他节点
3.ES集群配置
(1)解压3个elasticsearch文件,三个文件夹依次命名为elasticsearch-6.2.1,elasticsearch-6.2.1-bak1,elasticsearch-6.2.1-bak2,三个配置文件elasticsearch.yml依次配置为:
注意:这里如果是把elasticsearch-6.2.1直接复制3份在进行配置,那么一定要记得将data文件夹里面的索引数据删除,不然会出现failed to send join request to master,从节点的2个服务连不上主节点
(2)ik分词器的配置参考elasticsearch-6.2.1里面的配置
(3)分别启动三个ES服务,在head页面上,新建索引,副本数为节点数减1
二:logstash的安装及使用
采用Logstash实现,Logstash版本和ES版本保持一致,会从MySQL中将数据采集到ES索引库。当数据库数据被删除,需要手动写程序删除索引库数据
1.下载Logstash,解压
2.安装logstash-input-jdbc插件
这个插件的作用就是负责从mysql中采集数据,此插件是ruby语言开发的,需要安装ruby,logstash5.x以上版本本身自带有logstash-input-jdbc,6.x版本本身不带logstash-input-jdbc插件,需要手动安装
安装成功后我们可以在logstash根目录下的以下目录查看对应的插件版本
3.logstash使用的2个重要的配置文件
(1)在logstash的config目录下配置mysql.conf文件供logstash使用,logstash会根据mysql.conf文件的配置的地址从MySQL中读取数据向ES中写入索引。 设置如下:
根据配置文件mysql.conf中每隔一分钟扫描,一旦发现update_time大于logstash_metadata文件中的时间,就会把符合条件的数据重新导入到索引库,实现了更新
(2)logstash的工作是从MySQL中读取数据,向ES中创建索引,这里需要提前创建mapping的模板文件以便logstash 使用。 在logstash的config目录创建es_course_template.json,内容如下:
{
"mappings" : {
"es_course" : {
"properties" : {
"course_name" : {
"analyzer" : "ik_max_word",
"search_analyzer":"ik_smart",
"type" : "text"
},
"course_description" : {
"analyzer" : "ik_max_word",
"search_analyzer":"ik_smart",
"type" : "text"
},
"id" : {
"type" : "keyword"
},
"course_pic" : {
"index" : false,
"type" : "keyword"
}
}
}
},
"template" : "es_course"
}
3.logstash从mysql导数据到ES的测试
(1)建表数据如下
(2)使用head新建单机索引es_course,并使用postman添加映射关系
(3)在logstash的bin目录下,启动logstash
logstash.bat ‐f …/config/mysql.conf
(4)启动成功之后,会看到mysql数据库数据被导入到ES,如下
(5)注意:我们在导入成功之后,如果是测试,修改了数据或者删除了索引库准备重新导入,一定有2个步骤不能忘记
1.删除es服务下的data目录的原有索引数据
2.修改logstash/config/logstash_metadata文件里面的最后修改时间,不然会导致因为时间原因不能导入进去