环境介绍
本人使用操作系统是centOS 7.0版本(当然集群推荐是在linux环境下咯)
服务器 | 是否可以成为主节点 | 是否为数据节点 |
192.168.1.220 | true | true |
192.168.1.221 | true | true |
192.168.1.222 | true | true |
1、安装jdk (推荐1.8)
详细安装步骤就不做介绍了,网上搜索一大堆,推荐Oracle jdk,卸载掉自带的openJdk,给个参考链接
2、Elasticsearch安装
下载es,,本人使用的是5.5版本,之所以不用最新版本,是spring boot目前还不支持最新版本的es,所以避免出现版本不对应的坑,这种坑非常浪费时间。如果大家关心springboot版本和对于的es的版本对于关系,请去spring官网查询。
下载编译好的版本,名称elasticsearch-5.5.0.tar.gz
拷贝下载好的文件,上传到服务上,新建文件夹/usr/local/elasticsearch,解压到当前目录。
tar -zxvf elasticsearch-5.5.0.tar.gz 最好重命名下,因为后面如果升级es,可以也放到该目录下。
新建log和data文件夹,注意:放在elasticsearch-5.5.0安装目录的同级,避免升级es版本或是重新安装数据和日志被不小心覆盖。
mkdir /usr/local/elasticsearch/data
mkdir /usr/local/elasticsearch/logs
我的目录如下:
新建es用户并授权,因为es不能用root账号启动
-
#添加用户
-
useradd es
-
#赋予文件夹权限
-
chown -R es:es /usr/local/elasticsearch
修改配置文件
vim /usr/local/elasticsearch/elasticsearch-5.5.0/config/elasticsearch.yml 将配置文件以下内容进行修改:
注意:集群名称三个节点都要相同,discovery.zen.ping.unicast.hosts最好不配置自身节点ip
bootstrap.memory_lock: true 这个配置慎用,因为我一开始申请的服务没有root权限,系统配置没法修改所以我注释掉了,目前我还没去测试这个配置到底多影响性能,下面的注释是网上拷贝的,大家可根据实际情况调整
#集群的名称cluster.name: eshare-es#节点名称,其余两个节点分别为node-2 和node-3node.name: node-1#指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举masternode.master: true#允许该节点存储数据(默认开启)node.data: true#索引数据的存储路径path.data: /usr/local/elasticsearch/data#日志文件的存储路径path.logs: /usr/local/elasticsearch/logs#设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap#bootstrap.memory_lock: true#绑定的ip地址network.host: 0.0.0.0#设置对外服务的http端口,默认为9200http.port: 9200# 设置节点间交互的tcp端口,默认是9300 transport.tcp.port: 9300#Elasticsearch将绑定到可用的环回地址,并将扫描端口9300到9305以尝试连接到运行在同一台服务器上的其他节点。#这提供了自动集群体验,而无需进行任何配置。数组设置或逗号分隔的设置。每个值的形式应该是host:port或host#(如果没有设置,port默认设置会transport.profiles.default.port 回落到transport.tcp.port)。#请注意,IPv6主机必须放在括号内。默认为127.0.0.1, [::1]discovery.zen.ping.unicast.hosts: ["192.168.1.220:9300,192.168.1.221:9300,192.168.1.222:9300"]#如果没有这种设置,遭受网络故障的集群就有可能将集群分成两个独立的集群 - 分裂的大脑 - 这将导致数据丢失discovery.zen.minimum_master_nodes: 2http.cors.enabled: truehttp.cors.allow-origin: "*"http.enabled: true
修改虚拟机内存(不是必须步骤,根据实际情况调整)
vim /usr/local/elasticsearch//elasticsearch-5.5.0/config/jvm.options #默认是1g官方建议对jvm进行一些修改,不然很容易出现OOM,参考官网改参数配置最好不要超过内存的50% -Xms2g-Xmx2g
修改系统文件数限制(必须)
切回root用户su - root,修改配置
① vim /etc/security/limits.conf
* soft nofile 65536* hard nofile 65536* soft nproc 2048* hard nproc 4096#如果选择锁住swapping因此需要在这个配置文件下再增加两行代码#es soft memlock unlimited#es hard memlock unlimited
② vim /etc/sysctl.conf
注意:之后需要执行一句命令sysctl -p使系统配置生效(使用root用户)。
vm.max_map_count=655360fs.file-max=655360
安装步骤完成,分别启动三个节点,先启动你想做为主节点的服务器。我这里是220。
安装完成进行测试:在没有安装head插件的情况下,可以先用命令行测试比较方便说是直接访问http://192.168.1.220:9200
curl -Xget http://192.168.1.221:9200/_count 查询总数
如果大家想安装hea的插件,可参考网上的例子
3、spring boot集成 elasticsearch进行索引操作
1)首先新建spring boot项目 这个不多介绍,可以参考我以前的文章。
2)集成elasticsearch
使用maven,引入es相关包,我这里把我的项目pom全部贴出来,里面还有其他的内容,仅供参考。
4.0.0 com.esharex bigdata 0.0.1-SNAPSHOT war bigdata esharex big data center org.springframework.boot spring-boot-starter-parent 2.0.3.RELEASE UTF-8 UTF-8 1.8 org.springframework.boot spring-boot-starter-data-elasticsearch 2.0.0.RELEASE org.elasticsearch.client transport 5.5.0 org.springframework.boot spring-boot-starter-web commons-dbutils commons-dbutils 1.6 com.alibaba druid 1.0.28 org.springframework.boot spring-boot-starter-data-jpa org.springframework spring-jdbc 4.3.10.RELEASE mysql mysql-connector-java runtime org.projectlombok lombok true com.alibaba fastjson 1.2.15 org.springframework.boot spring-boot-starter-test test org.springframework.batch spring-batch-test test org.springframework.boot spring-boot-maven-plugin
具体代码,我放码云上,目前的主要功能是从mysql中将业务数据库中的数据导入到ElasticSearch中进行搜索。相关的索引操作可以ElasticsearchRepository的使用