环境介绍
本人使用操作系统是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,给个参考链接linux 安装jdk
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-3
node.name: node-1
#指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master
node.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端口,默认为9200
http.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: 2
http.cors.enabled: true
http.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=655360
fs.file-max=655360
安装步骤完成,分别启动三个节点,先启动你想做为主节点的服务器。我这里是220。
安装完成进行测试:在没有安装head插件的情况下,可以先用命令行测试比较方便说是直接访问http://192.168.1.220:9200
curl -Xget http://192.168.1.221:9200/_count 查询总数
如果大家想安装hea的插件,可参考网上的例子 elasticsearch 安装head插件
3、spring boot集成 elasticsearch进行索引操作
1)首先新建spring boot项目 这个不多介绍,可以参考我以前的文章。
2)集成elasticsearch
使用maven,引入es相关包,我这里把我的项目pom全部贴出来,里面还有其他的内容,仅供参考。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.esharex</groupId>
<artifactId>bigdata</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>bigdata</name>
<description>esharex big data center</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-elasticsearch -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.5.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--<exclusions><!– 去掉默认配置 –>-->
<!--<exclusion>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-tomcat</artifactId>-->
<!--</exclusion>-->
<!--</exclusions>-->
</dependency>
<!--<dependency>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-tomcat</artifactId>-->
<!--<scope>provided</scope>-->
<!--</dependency>-->
<!--<dependency>-->
<!--<groupId>javax.servlet</groupId>-->
<!--<artifactId>javax.servlet-api</artifactId>-->
<!--</dependency>-->
<!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils -->
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.6</version>
</dependency>
<!--druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.28</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.15</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.batch</groupId>
<artifactId>spring-batch-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
具体代码,我放码云上,目前的主要功能是从mysql中将业务数据库中的数据导入到ElasticSearch中进行搜索。相关的索引操作可以ElasticsearchRepository的使用 源码地址