springboot 2.0+elasticseach 5.5.0集群环境搭建示例(附源码)

环境介绍

本人使用操作系统是centOS 7.0版本(当然集群推荐是在linux环境下咯)

服务器是否可以成为主节点是否为数据节点
192.168.1.220truetrue
192.168.1.221truetrue
192.168.1.222truetrue

1、安装jdk (推荐1.8)

详细安装步骤就不做介绍了,网上搜索一大堆,推荐Oracle jdk,卸载掉自带的openJdk,给个参考链接linux 安装jdk

2、Elasticsearch安装

    下载es,下载地址,本人使用的是5.5版本,之所以不用最新版本,是spring boot目前还不支持最新版本的es,所以避免出现版本不对应的坑,这种坑非常浪费时间。如果大家关心springboot版本和对于的es的版本对于关系,请去spring官网查询。

21d9251a9765a69a860f271935f3263abf4.jpg

下载编译好的版本,名称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

我的目录如下:

5dcce4ed2a9218fc5e1a1a661a9b7b88093.jpg

新建es用户并授权,因为es不能用root账号启动

  1. #添加用户

  2. useradd es

  3. #赋予文件夹权限

  4. 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 查询总数

24530c5d51d6afe99e27f60d56cc01649a5.jpg

如果大家想安装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>&lt;!&ndash; 去掉默认配置 &ndash;&gt;-->
				<!--<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的使用  源码地址

 

转载于:https://my.oschina.net/u/1791512/blog/1923407

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值