ElasticSearch分布式搜索引擎搭建

  |   3,060 浏览

以下内容主要介绍给网站建立全局站内搜索服务的业务场景。
接下主要介绍以下内容:
a、ElasticSearch分布式搜索引擎搭建。
b、LogStash分布式数据收集处理管道搭建。
c、演示将mysql中的数据发布到ElasticSearch建立索引,提示搜索服务。

a、ElasticSearch分布式搜索引擎搭建

1、官网下载es安装包:elasticsearch-6.6.2.tar.gz

2、上传到Linux服务器上并解压:tar -xzf elasticsearch-6.6.2.tar.gz

3、进入到解压目录发现目录结构遵循apache老传统。

4、进入到bin目录使用指令./elasticsearch直接运行起来。到这里一般会报错:can not run elasticsearch as root。

错误信息很明显,不要用root账号去启动,该限制是官方强制执行。我们只需要给Linux再创建一个账号即可如:

groupadd elsearch

useradd elsearch -g elsearch -p elasticsearch

chown -R elsearch:elsearch elasticsearch

特别注意:修改elsearch需要使用到的所有目录的拥有者,确保新建的账号对目录有权限。

5、切换到新账号上,再执行4步中的命令启动服务。到这里一般又会报错:max virtual memory areas vm.max_map_count [65530] is too low

解决该错误,只需要切回root账号并将上述参数改大点如执行命令:sysctl -w vm.max_map_count=655360

6、不出意外启动成功后,浏览器访问主机localhost:9200可以看到如下内容,即代表安装成功。

7、到这里我们发现搜索引擎服务启动是启动了,但是他并不是分布式集群环境,只是个单结点的玩单机。那么接下来看如下配置集群环境。

比如有如下三台服务器
主机1,192.168.56.101
主机2,192.168.56.102
主机3,192.168.56.103

我们只需要按单机版的部署方式,先在三台服务器上都部署一波,步骤完全一致。
那么,如何让这三台服务器建立集群,互相协同工作呢。
只需要在主目录下的config目录找到配置文件:elasticsearch.yml

修改如下节点配置:
#集群名称(三台服务器上配置一样)
cluster.name: cbitedu-cluster
#节点名称(三台服务器上配置不同,例如以各自IP为后缀)
node.name: node_101
#索引等数据存放目录(三台服务器上配置一样)
path.data: /path/to/data
#日志存放目录(三台服务器上配置一样)
path.logs: /path/to/logs
#锁定物理内存地址,防止elasticsearch内存被交换出去,也就是避免es使用swap交换分区(三台服务器上配置一样)
bootstrap.memory_lock: true
#服务绑定IP(三台服务器上配置不同,分别配置各自IP地址)
network.host: 192.168.56.101
#服务绑定端口(三台服务器上配置一样)
http.port: 9200
#集群服务器各节点的IP地址,端口默认是9300可不配置(三台服务器上配置一样)
discovery.zen.ping.unicast.hosts: [“192.168.56.101”, “192.168.56.102”, “192.168.56.103”]
#通过配置这个参数来防止集群脑裂现象 (集群总节点数量/2)+1(三台服务器上配置一样)
discovery.zen.minimum_master_nodes: 2
#一个集群中的N个节点启动后,才允许进行数据恢复处理,默认是1(三台服务器上配置一样)
gateway.recover_after_nodes: 3

配置完成后群集环境就弄好,三台服务器上的服务全部启动起来,就会建立搜索引擎集群环境。

附:elasticsearch-head可视化插件安装

#下载head插件源码
git clone https://github.com/mobz/elasticsearch-head.git
#下载node环境
wget https://npm.taobao.org/mirrors/node/latest-v11.x/node-v11.12.0-linux-x64.tar.gz
vi /etc/profile
将下载并解压出来的node主目录下的bin目录配置到环境变量中去,并执行source /etc/profile使之生效
#安装head
npm install phantomjs-prebuilt@2.1.16 –ignore-scripts
#启动head插件
npm run start
访问9100端口即可看到可视化界面
界面是出来了,但不要高兴得太早,我们会发现这个界面并不能连接上我们所搭建的ES集群服务,这是因为我们还缺少一个步骤,解决跨域问题。
只需要在ES配置文件中加上以下两行代码即可解决:
http.cors.enabled: true
http.cors.allow-origin: “*”
至此大功告成

b、LogStash分布式数据收集处理管道搭建。

1、 官网下载安装包:logstash-6.6.2.tar.gz

2、 解压后进入其bin目录执行./logstash-plugin install logstash-input-jdbc安装jdbc插件

3、 下载jdbc mysql驱动包

4、 新建两个文件jdbc.conf和jdbc.sql,其中jdbc.conf是同步配置文件,jdbc.sql同步的mysql脚本。首先编辑jdbc.conf,填入内容:

input {
 stdin {

 }
 jdbc {
 # mysql jdbc connection string to our backup databse 后面的ktsee对应mysql中的test数据库
 
 jdbc_connection_string => "jdbc:mysql://localhost:3306/cbitedu"
 
 # the user we wish to excute our statement as

 jdbc_user => "root"

 jdbc_password => "password"

 # the path to our downloaded jdbc driver 这里需要设置正确的mysql-connector-java-5.1.46.jar路径,找不到可以从网上下载后放在配置路径中

 jdbc_driver_library => "/elasticsearch-6.6.2/lib/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_filepath => "/creatorblue/data/es/jdbc.sql"

# 定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新

 schedule => "* * * * *"

# 设定ES索引类型

 type => "cbitedu_index"

 }

}

filter {

 json {

 source => "message"

 remove_field => ["message"]

 }

}

output {

 elasticsearch {

#ESIP地址与端口(上面搭建的ES集群)

 hosts => ["192.168.56.101:9200","192.168.56.102:9200","192.168.56.103:9200"]

#ES索引名称(自己定义的)

 index => "cbitedu_index"

#自增ID编号

 document_id => "%{id}"

 }

 stdout {

#以JSON格式输出

 codec => json_lines

 }

}

接下来就是编写jdbc.sql文件了,里面的脚本就是你想要提供给搜索引擎检索的数据,例如 select * from t_news_info 将所有新闻数据发布出去让elasticsearch提供检索服务

最后就是启动logstash服务了,cd到主目录,执行以下命令:
nohup bin/logstash -f cbitedu/cbitedu.conf > logs/logstash.out &

到这里Logstash就成功启动了,但是依然是单节点单机,要部署多结点,只需要复制一份,确保data目录不一致即可。
这个时候可以回过去看ES head插件可视化安装章节中的示例图,图中的数据就是上面sql查询出来的数据了

#查看ES集群中所有索引
http://127.0.0.1:9200/_cat/indices?v
#查看cbitedu_index索引中的内容
http://127.0.0.1:9200/cbitedu_index/_search?pretty