# ElasticSearch7.x高可用集群版搭建
## 1.前置準備
若之前未了解過ElasticSearch的安裝,在安裝集群版之前,建議先了解一下單機版創建。集群版無非就是拷貝了幾套單機版的安裝包,配置稍加改。
單機版安裝詳細教程以及安裝過程容易遇到的問題
**詳見:ElasticSearch單機版安裝**
### 集群環境準備
| **IP** | **監聽端口** | **主機名** | **系統** | **es實例名稱** | **es版本** |
| :-: | :-: | :-: | :-: | :-: | :-: |
| 192.168.3.21 | 9201/9301 | elastic | CentOS 7 | node-a | 7.4.0 |
| 192.168.3.22 | 9201/9301 | elastic | CentOS 7 | node-b | 7.4.0 |
| 192.168.3.23 | 9201/9301 | elastic | CentOS 7 | node-c | 7.4.0 |
## 2.下載安裝包
官方下載地址:[傳送門](https://www.elastic.co/cn/downloads/elasticsearch)
歷史版本下載:[傳送門](https://www.elastic.co/cn/downloads/past-releases#elasticsearch)
本文以7.4.0為例:[7.4.0下載地址](https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-4-0)
命令下載
~~~shell
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.0-linux-x86_64.tar.gz
~~~
## 3.創建集群目錄
每一臺服務器都需要操作。
~~~
#創建集群存儲主目錄
mkdir /usr/local/elasticsearch-cluster
#解壓到集群目錄下
tar zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz -C /usr/local/elasticsearch-cluster
#切換到目錄下
cd /usr/local/elasticsearch-cluster
#修改解壓后的文件名為 elasticsearch-a,(為了方便區分根據節點名)
mv elasticsearch-7.4.0 elasticsearch-a
# 創建數據存儲目錄
mkdir -p /usr/local/elasticsearch-cluster/elasticsearch-a/data
# 創建日志存儲目錄
mkdir -p /usr/local/elasticsearch-cluster/elasticsearch-a/logs
~~~
注:這里為了區分是es的多個節點,
* 第1臺的目錄文件夾為 elasticsearch-a
* 第2臺的目錄文件夾為 elasticsearch-b
* 第3臺的目錄文件夾為 elasticsearch-c
注:安裝包不用下載多次可以使用SCP命令傳輸到另外兩臺示例:
~~~
scp -r elasticsearch-7.4.0-linux-x86_64.tar.gz root@192.168.3.23:/usr/local
~~~
## 4.節點[node](https://so.csdn.net/so/search?q=node&spm=1001.2101.3001.7020)\-a配置
進入到es安裝目錄下的config文件夾中,修改elasticsearch.yml 文件
~~~
#配置es的集群名稱,同一個集群中的多個節點使用相同的標識
#如果在同一網段下有多個集群,就可以用這個屬性來區分不同的集群。
cluster.name: my-es-cluster
#節點名稱
node.name: node-a
#是不是有資格競選主節點
node.master: true
#是否存儲數據
node.data: true
#最大集群節點數
node.max_local_storage_nodes: 3
#數據存儲路徑
path.data: /usr/local/elasticsearch-cluster/elasticsearch-a/data
#日志存儲路徑
path.logs: /usr/local/elasticsearch-cluster/elasticsearch-a/logs
#節點所綁定的IP地址,并且該節點會被通知到集群中的其他節點
#通過指定相同網段的其他節點會加入該集群中 0.0.0.0任意IP都可以訪問elasticsearch
network.host: 192.168.3.21
#對外提供服務的http端口,默認為9200
http.port: 9201
#內部節點之間溝通端口
transport.tcp.port: 9301
#es7.x 之后新增的配置,寫入候選主節點的設備地址,在開啟服務后可以被選為主節點
discovery.seed_hosts: ["192.168.3.21:9301","192.168.3.22:9301","192.168.3.23:9301"]
#es7.x 之后新增的配置,初始化一個新的集群時需要此配置來選舉master
cluster.initial_master_nodes: ["node-a", "node-b","node-c"]
#ES默認開啟了內存地址鎖定,為了避免內存交換提高性能。但是Centos6不支持SecComp功能,啟動會報錯,所以需要將其設置為false
bootstrap.memory_lock: false
# 是否支持跨域
http.cors.enabled: true
# *表示支持所有域名
http.cors.allow-origin: "*"
~~~
## 5.節點node-b配置
~~~
#配置es的集群名稱,同一個集群中的多個節點使用相同的標識
#如果在同一網段下有多個集群,就可以用這個屬性來區分不同的集群。
cluster.name: my-es-cluster
#節點名稱
node.name: node-b
#是不是有資格競選主節點
node.master: true
#是否存儲數據
node.data: true
#最大集群節點數
node.max_local_storage_nodes: 3
#數據存儲路徑
path.data: /usr/local/elasticsearch-cluster/elasticsearch-b/data
#日志存儲路徑
path.logs: /usr/local/elasticsearch-cluster/elasticsearch-b/logs
#節點所綁定的IP地址,并且該節點會被通知到集群中的其他節點
#通過指定相同網段的其他節點會加入該集群中 0.0.0.0任意IP都可以訪問elasticsearch
network.host: 192.168.3.22
#對外提供服務的http端口,默認為9200
http.port: 9201
#內部節點之間溝通端口
transport.tcp.port: 9301
#es7.x 之后新增的配置,寫入候選主節點的設備地址,在開啟服務后可以被選為主節點
discovery.seed_hosts: ["192.168.3.21:9301","192.168.3.22:9301","192.168.3.23:9301"]
#es7.x 之后新增的配置,初始化一個新的集群時需要此配置來選舉master
cluster.initial_master_nodes: ["node-a", "node-b","node-c"]
#ES默認開啟了內存地址鎖定,為了避免內存交換提高性能。但是Centos6不支持SecComp功能,啟動會報錯,所以需要將其設置為false
bootstrap.memory_lock: false
# 是否支持跨域
http.cors.enabled: true
# *表示支持所有域名
http.cors.allow-origin: "*"
~~~
## 6.節點node-c配置
~~~
#配置es的集群名稱,同一個集群中的多個節點使用相同的標識
#如果在同一網段下有多個集群,就可以用這個屬性來區分不同的集群。
cluster.name: my-es-cluster
#節點名稱
node.name: node-c
#是不是有資格競選主節點
node.master: true
#是否存儲數據
node.data: true
#最大集群節點數
node.max_local_storage_nodes: 3
#數據存儲路徑
path.data: /usr/local/elasticsearch-cluster/elasticsearch-c/data
#日志存儲路徑
path.logs: /usr/local/elasticsearch-cluster/elasticsearch-c/logs
#節點所綁定的IP地址,并且該節點會被通知到集群中的其他節點
#通過指定相同網段的其他節點會加入該集群中 0.0.0.0任意IP都可以訪問elasticsearch
network.host: 192.168.3.23
#對外提供服務的http端口,默認為9200
http.port: 9201
#內部節點之間溝通端口
transport.tcp.port: 9301
#es7.x 之后新增的配置,寫入候選主節點的設備地址,在開啟服務后可以被選為主節點
discovery.seed_hosts: ["192.168.3.21:9301","192.168.3.22:9301","192.168.3.23:9301"]
#es7.x 之后新增的配置,初始化一個新的集群時需要此配置來選舉master
cluster.initial_master_nodes: ["node-a", "node-b","node-c"]
#ES默認開啟了內存地址鎖定,為了避免內存交換提高性能。但是Centos6不支持SecComp功能,啟動會報錯,所以需要將其設置為false
bootstrap.memory_lock: false
# 是否支持跨域
http.cors.enabled: true
# *表示支持所有域名
http.cors.allow-origin: "*"
~~~
## 7.啟動用戶與賦權
由于ES限制不能使用root 用戶啟動,與單機版教程一致
這里與單機版安裝時使用了相同的elasticsearch用戶
創建用戶:elasticsearch
~~~shell
adduser elasticsearch
~~~
設置用戶密碼,需要輸入兩次
~~~shell
passwd elasticsearch
~~~
賦權
注:由于是偽集群,都在同一臺服務器,所以3個節點目錄都需要賦權,多臺服務器的話,都需要操作
~~~
chown -R elasticsearch /usr/local/elasticsearch-cluster/elasticsearch-a
~~~
## 8.啟動集群環境
啟動之前,建議針對實際使用場景,設置合適的JVM內存,詳見文末附錄
~~~
#切換到用戶
su elasticsearch
#切換到a節點
cd /usr/local/elasticsearch-cluster/elasticsearch-a/bin
#控制臺啟動命令
./elasticsearch
#后臺啟動命令
#./elasticsearch -d
~~~
同啟動a節點一致,分別再次啟動 b節點、C節點
注:啟動小妙招,先不要著急后臺啟動,直接使用 ./elasticsearch 啟動看一下是否報錯。若出現報錯,可以到前一篇文章單機版ES搭建中找下,列舉出來了常見的幾種啟動問題。
注:開機自啟設置方式,詳見單機版搭建過程
## 9.查看集群
### 9.1查看集群狀態
可以通過訪問(任選一個)瀏覽器輸入,查看集群節點:\[http://IP:9201/\_cat/nodes?v\]

命令查看
注:若已經設置了賬密則需要輸入賬密
~~~
# curl -u 用戶名:密碼 -XGET 'http://IP:9201/_cat/nodes?v'
curl -u elastic:1234567 -XGET 'http://localhost:9201/_cat/nodes?v'
~~~

可以通過訪問(任選一個)查看集群狀態:

### 9.2ElasticSearch-Head可視化插件查看
也可以使用head查看集群信息如下,說明搭建成功

## 附錄:
### 1.修改JVM參數
官網也介紹了如何[**設置堆大小**](https://www.elastic.co/guide/en/elasticsearch/reference/current/jvm-options.html)。
默認情況,ES 告訴 JVM 使用一個最小和最大都為 1GB 的堆。但是到了生產環境,這個配置就比較重要了,確保 ES 有足夠堆空間可用。
ES 使用`Xms(minimum heap size)`和`Xmx(maxmimum heap size)`設置堆大小。你應該將這兩個值設為同樣的大小。
**`Xms`和`Xmx`不能大于你物理機內存的 50%。**
設置的示例:
切換到 conf/
打開 vim jvm.options

建議:可用 RAM 的 50%,最多最大 30GB RAM,以避免垃圾回收。
官方文檔最大指 32 GB,官網JVM最大值設置:[傳送門](https://www.elastic.co/guide/en/elasticsearch/guide/master/heap-sizing.html)
- 第一章 ElasticSearch基本概念
- 第二章 ElasticSearch7.x單機版安裝
- 第三章 ElasticSearch7.x高可用集群版搭建
- 第四章 Elasticsearch7.x配置文件詳解
- 第五章 Elasticsearch客戶端工具之kibana
- 第六章 Elasticsearch客戶端工具之ES-Head
- 6.1 es-head工具使用介紹
- 第七章 ElasticSearch7.x安全性之訪問密碼設置
- 第八章 Elasticsearch7.xDSL語法之索引管理
- 第九章 Elasticsearch7.xDSL語法之文檔管理
- 第十章 Elasticsearch7.xDSL語法之查詢
- 第十一章 Elasticsearch7.xDSL語法之分頁查詢
- 第十二章 Elasticsearch7.xDSL語法之聚合查詢
- 第十三章 Elasticsearch7.xDSL語法實踐手冊
- 第十四章 Elasticsearch7.xSQL語法查詢支持
- 第十五章 Elasticsearch插件之分詞器
- 15.1 ElasticSearch之IK中文分詞
- 第十六章 SpringBoot-starter-data整合Elasticsearch
- 第十七章 SpringBoot整合Elasticsearch(官方client)