Elasticsearch安裝和入門

1.Elasticsearch簡單介紹

        Elasticsearch (ES)是一個基於Lucene構建的開源、分佈式、RESTful 接口全文搜索引擎。Elasticsearch 還是一個分佈式文檔數據庫,其中每個字段均是被索引的數據且可被搜索,它能夠擴展至數以百計的服務器存儲以及處理PB級的數據。它可以在很短的時間內在儲、搜索和分析大量的數據。它通常作爲具有複雜搜索場景情況下的核心發動機。
Elasticsearch就是爲高可用和可擴展而生的。可以通過購置性能更強的服務器來完成。

1.1Elasticsearch優勢

橫向可擴展性:只需要增加臺服務器,做一點兒配置,啓動一下Elasticsearch就可以併入集羣。

分片機制提供更好的分佈性:同一個索引分成多個分片(sharding), 這點類似於HDFS的塊機制;分而治之的方式可提升處理效率。

高可用:提供複製( replica) 機制,一個分片可以設置多個複製,使得某臺服務器在宕機的情況下,集羣仍舊可以照常運行,並會把服務器宕機丟失的數據信息複製恢復到其他可用節點上。
使用簡單:只需一條命令就可以下載文件,然後很快就能搭建一一個站內搜索引擎。

1.2Elasticsearch應用場景

大型分佈式日誌分析系統ELK elasticsearch(存儲日誌)+logstash(收集日誌)+kibana(展示數據)
大型電商商品搜索系統、網盤搜索引擎等。

1.3Elasticsearch存儲結構

Elasticsearch是文件存儲,Elasticsearch是面向文檔型數據庫,一條數據在這裏就是一個文檔,用JSON作爲文檔序列化的格式,比如下面這條用戶數據:

{
    "name" :     "yushengjun",
    "sex" :      0,
    "age" :      25
}
關係數據庫     ⇒ 數據庫 ⇒ 表    ⇒ 行    ⇒ (Columns)
Elasticsearch    ⇒ 索引(Index)類型(type)文檔(Docments)字段(Fields)  

2.Linux環境安裝Elasticsearch

1、安裝JDK環境變量

export JAVA_HOME=/usr/local/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile

2、下載elasticsearch安裝包

下載elasticsearch安裝包
官方文檔https://www.elastic.co/downloads/elasticsearch
注意:linux安裝內存建議1g內存以上
3、上傳elasticsearch安裝包

4、解壓elasticsearch

tar -zxvf elasticsearch-6.4.3.tar.gz

5、修改elasticsearch.yml

network.host: 192.168.223.130(阿里雲需要用內網ip,另外開通端口號)
http.port: 9200

6、啓動elasticsearch報錯

cd /usr/local/elasticsearch-6.4.3/bin
./elasticsearch
can not run elasticsearch as root
解決方案:
因爲安全問題elasticsearch 不讓用root用戶直接運行,所以要創建新用戶
第一步:liunx創建新用戶  adduser XXX    然後給創建的用戶加密碼 passwd XXX    輸入兩次密碼。
第二步:切換剛纔創建的用戶 su XXX  然後執行elasticsearch  會顯示Permission denied 權限不足。
第三步:給新建的XXX賦權限,chmod 777 *  這個不行,因爲這個用戶本身就沒有權限,肯定自己不能給自己付權限。所以要用root用戶登錄付權限。
第四步:root給XXX賦權限,chown -R XXX /你的elasticsearch安裝目錄。
然後執行成功。

創建一個分組
 groupadd elasticsearch
useradd elasticsearch -g elasticsearch -p 123456
chown -R elasticsearch:elasticsearch elasticsearch-6.4.3
su elasticsearch切換用戶 

繼續報錯
bootstrap checks failed max virtual memory areas vm.max_map_count [65530] is

vi /etc/sysctl.conf
vm.max_map_count=655360
sysctl -p


max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
[前面的*一定也要]
vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536

重啓服務器即可(修改以後一定要重啓)

7、訪問elasticsearch
關閉防火牆 systemctl stop firewalld.service
8.驗證環境是否安裝成功
http://192.168.223.130:9200
在這裏插入圖片描述

93009200區別
9300端口: ES節點之間通訊使用
9200端口: ES節點 和 外部 通訊使用

3.Linux環境安裝Kibana(elasticsearch圖形化界面)

        Kibana是一個開源的分析和可視化平臺,設計用於和Elasticsearch一起工作。你用Kibana來搜索,查看,並和存儲在Elasticsearch索引中的數據進行交互。你可以輕鬆地執行高級數據分析,並且以各種圖標、表格和地圖的形式可視化數據。Kibana使得理解大量數據變得很容易。它簡單的、基於瀏覽器的界面使你能夠快速創建和共享動態儀表板,實時顯示Elasticsearch查詢的變化。

Kibana環境安裝

tar  -zxvf kibana-6.4.3-linux-x86_64.tar.gz
vim config/kibana.yml
 將默認配置改成如下:
server.port: 5601
server.host: "192.168.223.130"
elasticsearch.url: "http:// 192.168.223.130:9200"
啓動Kibana
./bin/kibana

驗證安裝是否成功
http://192.168.223.130:5601
在這裏插入圖片描述

Kibana實現增刪改查

###創建索引
PUT /mymayikt
####查詢索引
GET /mymayikt
####添加文檔 /索引名稱/類型/id
PUT /mymayikt/user/1
{
  "name":"yushengjun",
  "sex":0,
  "age":22
}
###查詢文檔
GET /mymayikt/user/1
###刪除索引
DELETE /mymayikt

3.Elasticsearch版本控制

1.爲什麼要進行版本控制
爲了保證數據再多線程操作下的準確性
2.悲觀鎖和樂觀鎖
悲觀鎖:假設會發生併發衝突,屏蔽一切可能違反數據準確性的操作
悲觀鎖:假設不會發生併發衝突,只在提交操作是檢查是否違反數據完整性。
3.內部版本控制和外部版本控制
內部版本控制:_version自增長,修改數據後,_version會自動的加1
外部版本控制:爲了保持_version與外部版本控制的數值一致
使用version_type=external檢查數據當前的version值是否小於請求中的version值

當前版本
在這裏插入圖片描述
更新version小於當前更新失敗
在這裏插入圖片描述

4.SpringBoot整合Elasticsearch

maven依賴

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.0.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>
	</dependencies>

application.yml

spring:
  data:
    elasticsearch:
    ####集羣名稱
     cluster-name: myes
    ####地址 
     cluster-nodes: 192.168.223.130:9300

實體類層

@Document(indexName = "mymayikt", type = "user")
@Data
public class UserEntity {
	@Id
	private String id;
	private String name;
	private int sex;
	private int age;
}

Dao類層

public interface UserReposiory extends CrudRepository<UserEntity, String> {

}

控制器層

@RestController
public class EsController {

	@Autowired
	private UserReposiory userReposiory;

	@RequestMapping("/addUser")
	public UserEntity addUser(@RequestBody UserEntity user) {
		return userReposiory.save(user);
	}

	@RequestMapping("/findUser")
	public Optional<UserEntity> findUser(String id) {
		return userReposiory.findById(id);
	}

}

啓動項目

@SpringBootApplication
@EnableElasticsearchRepositories(basePackages = "com.mayikt.repository")
public class AppEs {
	public static void main(String[] args) {
		SpringApplication.run(AppEs.class, args);
	}
}

報錯以下錯誤
None of the configured nodes are available:
解決方案:
Vi /usr/local/elasticsearch-6.4.3/config/elasticsearch.yml
cluster.name: myes

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章