springboot 2.0+elasticseach 5.5.0集羣環境搭建示例(附源碼)

環境介紹java

本人使用操做系統是centOS 7.0版本(固然集羣推薦是在linux環境下咯)node

服務器 是否能夠成爲主節點 是否爲數據節點
192.168.1.220 true true
192.168.1.221 true true
192.168.1.222 true true

一、安裝jdk (推薦1.8)

詳細安裝步驟就不作介紹了,網上搜索一大堆,推薦Oracle jdk,卸載掉自帶的openJdk,給個參考連接linux 安裝jdkmysql

二、Elasticsearch安裝

    下載es,下載地址,本人使用的是5.5版本,之因此不用最新版本,是spring boot目前還不支持最新版本的es,因此避免出現版本不對應的坑,這種坑很是浪費時間。若是你們關心springboot版本和對於的es的版本對於關係,請去spring官網查詢。linux

下載編譯好的版本,名稱elasticsearch-5.5.0.tar.gzgit

拷貝下載好的文件,上傳到服務上,新建文件夾/usr/local/elasticsearch,解壓到當前目錄。web

tar -zxvf elasticsearch-5.5.0.tar.gz   最好重命名下,由於後面若是升級es,能夠也放到該目錄下。spring

新建log和data文件夾,注意:放在elasticsearch-5.5.0安裝目錄的同級,避免升級es版本或是從新安裝數據和日誌被不當心覆蓋。sql

mkdir /usr/local/elasticsearch/data數據庫

mkdir /usr/local/elasticsearch/logsapache

個人目錄以下:

新建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 查詢總數

若是你們想安裝hea的插件,可參考網上的例子 elasticsearch 安裝head插件

三、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的使用  源碼地址

相關文章
相關標籤/搜索