集群節(jié)點(diǎn)
我通常認(rèn)定一個(gè)單獨(dú)運(yùn)行的 es 服務(wù)為一個(gè) es 節(jié)點(diǎn)。
es 的節(jié)點(diǎn)通過 elasticsearch.yml 的 node.roles 參數(shù)來定義,如果不設(shè)置 node.roles,則默認(rèn)如下的角色
- master 具有主節(jié)點(diǎn)資格
- data 數(shù)據(jù)節(jié)點(diǎn)
- data_content 內(nèi)容數(shù)據(jù)節(jié)點(diǎn)
- data_hot 熱點(diǎn)數(shù)據(jù)節(jié)點(diǎn)
- data_warm 溫?cái)?shù)據(jù)節(jié)點(diǎn)
- data_cold 冷數(shù)據(jù)節(jié)點(diǎn)
- data_frozen 凍結(jié)數(shù)據(jù)節(jié)點(diǎn)
- ingest 攝取節(jié)點(diǎn)
- ml 機(jī)器學(xué)習(xí)節(jié)點(diǎn)
- remote_cluster_client 符合遠(yuǎn)程集群的節(jié)點(diǎn)
- transform 變換節(jié)點(diǎn)
master
master 表示具有主節(jié)點(diǎn)資格:擁有該角色,表示當(dāng)前節(jié)點(diǎn)有資格被選舉為主節(jié)點(diǎn)。一個(gè)高可用的集群中,應(yīng)至少包含三個(gè)符合主節(jié)點(diǎn)資格的節(jié)點(diǎn)。
主節(jié)點(diǎn)負(fù)責(zé)輕量級(jí)集群范圍內(nèi)的操作,例如創(chuàng)建或刪除索引、跟蹤哪些節(jié)點(diǎn)是集群的一部分以及決定將哪些分片分配給哪些節(jié)點(diǎn)。擁有穩(wěn)定的主節(jié)點(diǎn)對(duì)于集群健康非常重要。
主節(jié)點(diǎn)必須有一個(gè)path.data目錄,其內(nèi)容在重新啟動(dòng)后仍然存在,就像數(shù)據(jù)節(jié)點(diǎn)一樣,因?yàn)檫@是存儲(chǔ)集群元數(shù)據(jù)的地方。集群元數(shù)據(jù)描述了如何讀取存儲(chǔ)在數(shù)據(jù)節(jié)點(diǎn)上的數(shù)據(jù),因此如果丟失則存儲(chǔ)在數(shù)據(jù)節(jié)點(diǎn)上的數(shù)據(jù)將無法讀取。
- 專用主節(jié)點(diǎn)
對(duì)于整個(gè)集群來說,主節(jié)點(diǎn)非常重要,主節(jié)點(diǎn)負(fù)責(zé)的集群事物也很多,意味著主節(jié)點(diǎn)要消耗更多的資源,為避免主節(jié)點(diǎn)因其他事物而過載,我們可以設(shè)置主節(jié)點(diǎn)為專用主節(jié)點(diǎn)。(注:此設(shè)置一般在大型集群中使用,其實(shí)我們一般的項(xiàng)目中通常是不用設(shè)置專用主節(jié)點(diǎn)的)。專用主節(jié)點(diǎn),設(shè)置:
node.roles: [ master ]
- 僅投票主節(jié)點(diǎn)
僅投票的主節(jié)點(diǎn)是參與 主節(jié)點(diǎn)選舉但不會(huì)充當(dāng)集群選舉主節(jié)點(diǎn)的節(jié)點(diǎn)。僅投票主節(jié)點(diǎn)設(shè)置,需要同時(shí)設(shè)置 master 和 voting_only 。注:僅投票節(jié)點(diǎn)也是符合主節(jié)點(diǎn)資格的節(jié)點(diǎn),只是不會(huì)成為主節(jié)點(diǎn)。
只要有一半以上的投票節(jié)點(diǎn)可用,群集仍可以正常工作。這意味著如果有三個(gè)或四個(gè)主資格節(jié)點(diǎn),群集可以容忍其中一個(gè)不可用。如果有兩個(gè)或更少的主資格節(jié)點(diǎn),則它們必須都保持可用。所以我們的節(jié)點(diǎn)至少需要 3 個(gè)。
群集中的主資格節(jié)點(diǎn)通常應(yīng)該是奇數(shù)。如果是偶數(shù),Elasticsearch會(huì)將其中一個(gè)節(jié)點(diǎn)排除在投票配置之外,以確保其大小為奇數(shù)。這種省略并不會(huì)降低集群的容錯(cuò)能力。
node.roles: [ data, master, voting_only ]
data 數(shù)據(jù)節(jié)點(diǎn)
數(shù)據(jù)節(jié)點(diǎn)保存數(shù)據(jù)并執(zhí)行數(shù)據(jù)相關(guān)操作,例如 CRUD、搜索和聚合等這些 I/O、內(nèi)存和 CPU 密集型操作。具有該角色的節(jié)點(diǎn)可以擔(dān)任任何專門的數(shù)據(jù)節(jié)點(diǎn)角色。
ES 可以單節(jié)點(diǎn)集群、兩節(jié)點(diǎn)集群、三節(jié)點(diǎn)甚至更多節(jié)點(diǎn)的集群,單節(jié)點(diǎn)集群和兩節(jié)點(diǎn)集群都有其局限性,我們就不做過多的討論了。
可以使用專門的數(shù)據(jù)角色將數(shù)據(jù)節(jié)點(diǎn)分配到特定層:data_content、data_hot、data_warm、 data_cold或data_frozen。一個(gè)節(jié)點(diǎn)可以屬于多個(gè)層,具有這些角色的節(jié)點(diǎn)不能具有 data 角色。
僅協(xié)調(diào)節(jié)點(diǎn)
僅協(xié)調(diào)節(jié)點(diǎn)就像負(fù)載均衡器一樣,負(fù)責(zé)路由請(qǐng)求、處理搜索和分發(fā)批量索引。
符合遠(yuǎn)程條件的節(jié)點(diǎn)
符合遠(yuǎn)程條件的節(jié)點(diǎn)充當(dāng)跨集群客戶端并連接到 遠(yuǎn)程集群。連接后,您可以使用跨集群搜索來搜索遠(yuǎn)程集群。您還可以使用跨集群復(fù)制在集群之間同步數(shù)據(jù)。
node.roles: [ remote_cluster_client ]
集群配置
關(guān)于 ES 應(yīng)用的安裝,請(qǐng)移步本專欄的 Elasticsearch 簡(jiǎn)介與安裝 一文。
ES 大部分都配置都在 $ES_HOME/config/elasticsearch.yml 文件中配置。
path.data
每個(gè)數(shù)據(jù)和主節(jié)點(diǎn)都需要訪問存儲(chǔ)分片、索引和集群元數(shù)據(jù)的數(shù)據(jù)目錄。默認(rèn)為 $ES_HOME/data 但可以在配置文件中配置 elasticsearch.yml 絕對(duì)路徑或相對(duì)路徑。
path.logs
ES 的日志路徑。默認(rèn)為 $ES_HOME/logs。建議data 和 logs 目錄和 ES 主目錄分開。
cluster.name 集群名稱
cluster.name一個(gè)節(jié)點(diǎn)只有在與集群中的所有其他節(jié)點(diǎn)共享集群時(shí)才能加入集群。默認(rèn)名稱為 elasticsearch。為避免任意的 ES 服務(wù)加入集群,我們需要自定義設(shè)置集群的名稱。同一個(gè)集群應(yīng)該配置同樣的集群名稱
node.name 節(jié)點(diǎn)名稱
Elasticsearch 啟動(dòng)時(shí)節(jié)點(diǎn)名稱默認(rèn)為服務(wù)器的主機(jī)名。
相關(guān)網(wǎng)絡(luò)配置
network.host
設(shè)置此節(jié)點(diǎn)的 HTTP 和傳輸流量地址。該節(jié)點(diǎn)將綁定到該地址,并將其用作其發(fā)布地址。默認(rèn)情況下,Elasticsearch 僅綁定到環(huán)回地址,例如127.0.0.1和 [::1]。要配置集群,則此地址需要修改為網(wǎng)絡(luò)地址。接受 IP 地址、主機(jī)名或特殊值。
特殊值包括如下幾個(gè):
-
local
系統(tǒng)上的任何環(huán)回地址,例如127.0.0.1。 -
site
系統(tǒng)上的任何站點(diǎn)本地地址,例如192.168.0.1。 -
global
系統(tǒng)上的任何全局范圍的地址,例如8.8.8.8。 - _[networkInterface]_
使用名為 的網(wǎng)絡(luò)接口的地址[networkInterface]。en0例如,如果您希望使用名為then set的接口的地址network.host: en0。 - 0.0.0.0
所有可用網(wǎng)絡(luò)接口的地址。
network.host 配置是 http.host、transport.host 等的默認(rèn)配置。
http.port
HTTP 客戶端通信綁定的端口。接受單個(gè)值或范圍。如果指定了范圍,則節(jié)點(diǎn)將綁定到該范圍中的第一個(gè)可用端口。默認(rèn)為9200-9300。
transport.port
節(jié)點(diǎn)之間的通信而綁定的端口。接受單個(gè)值或范圍。如果指定了范圍,則節(jié)點(diǎn)將綁定到該范圍中的第一個(gè)可用端口。將此設(shè)置設(shè)置為每個(gè)符合主節(jié)點(diǎn)資格的節(jié)點(diǎn)上的單個(gè)端口,而不是一個(gè)范圍。默認(rèn)為9300-9400。
更多的網(wǎng)絡(luò)相關(guān)設(shè)置,可以查看官網(wǎng) 網(wǎng)絡(luò)設(shè)置 比如跨域設(shè)置、請(qǐng)求正文最大大小設(shè)置等
集群發(fā)現(xiàn)配置
當(dāng) ES 集群任務(wù)主節(jié)點(diǎn)發(fā)生故障 或 啟動(dòng)當(dāng)前節(jié)點(diǎn)時(shí),ES 會(huì)進(jìn)行一個(gè)集群的發(fā)現(xiàn)過程。
- 如果是主節(jié)點(diǎn)發(fā)生故障,則持續(xù)到選舉出新的主節(jié)點(diǎn)為止
- 如果是新啟動(dòng) ES 節(jié)點(diǎn),則持續(xù)到當(dāng)前節(jié)點(diǎn)找到主節(jié)點(diǎn)為止
discovery.seed_hosts
此設(shè)置提供集群中其他符合主節(jié)點(diǎn)資格且處于活動(dòng)狀態(tài)的節(jié)點(diǎn)列表。每個(gè)地址可以是 IP 地址,也可以是通過 DNS 解析為一個(gè)或多個(gè) IP 地址的主機(jī)名。
discovery.seed_hosts:
- 192.168.1.10:9300
- 192.168.1.11
- seeds.mydomain.com
- [0:0:0:0:0:ffff:c0a8:10c]:9301
ES 集群時(shí)會(huì)依次嘗試和探測(cè)該列表地址并驗(yàn)證其是否具有主節(jié)點(diǎn)資格。如果此地址不具備主節(jié)點(diǎn)資格,則繼續(xù)向下執(zhí)行發(fā)現(xiàn)過程。直到發(fā)現(xiàn)主節(jié)點(diǎn)或者發(fā)現(xiàn)足夠多的具有主節(jié)點(diǎn)資格的節(jié)點(diǎn)來進(jìn)行并完成選舉。
示例最后為 IPv6 的地址,IPv6地址必須括在方括號(hào)中
如果不配置端口,會(huì)使用 transport.port 配置覆蓋
更多的服務(wù)發(fā)現(xiàn)的配置請(qǐng)查看官網(wǎng) 服務(wù)發(fā)現(xiàn)設(shè)置
引導(dǎo)集群配置
cluster.initial_master_nodes
配置符合主節(jié)點(diǎn)資格的節(jié)點(diǎn)名稱 node.name 列表。默認(rèn)為空。第一次啟動(dòng) Elasticsearch 集群需要在集群中的一個(gè)或多個(gè)符合主資格的節(jié)點(diǎn)上顯式定義一組初始符合主資格的節(jié)點(diǎn),這稱為集群引導(dǎo)。僅在集群第一次啟動(dòng)時(shí)才需要這樣做。如果是加入正在運(yùn)行的集群的新啟動(dòng)節(jié)點(diǎn),從集群選出的主節(jié)點(diǎn)獲取此信息。
集群搭建
注:這里我們的集群為多臺(tái)不同的服務(wù)器集群(192.168.1.10、192.168.1.11、192.168.1.12),本地多節(jié)點(diǎn)集群我們這里就略過不說了。
為什么是3臺(tái)?請(qǐng)注意 ES 集群至少需要 3 個(gè)節(jié)點(diǎn)。
注意安裝版本,我們文章的版本為 elasticsearch-8.6.2-linux-x86_64.tar.gz (8.6.2)
安裝第一個(gè)節(jié)點(diǎn) myNode1
請(qǐng)參考 Elasticsearch 簡(jiǎn)介與安裝 一文
請(qǐng)?jiān)谑状螁?dòng)之后,保存賬號(hào)密碼登信息,再進(jìn)行下面的步驟。如需修改密碼請(qǐng)參考 Elasticsearch 用戶管理 一文。
建議在此節(jié)點(diǎn)就添加好用戶,比我我們示例中的 myuser 用戶
集群基礎(chǔ)配置
在 elasticsearch.yml 配置中添加如下配置:(注意是添加,不要修改啟動(dòng)時(shí)自動(dòng)生成的配置)
# 數(shù)據(jù)目錄(最好在 ES 的安裝目錄之外)
path.data: /DATA/es/data
# 日志目錄(最好在 ES 的安裝目錄之外)
path.logs: /DATA/es/logs
# 集群名稱
cluster.name: myTestEs
# 節(jié)點(diǎn)名稱
node.name: myNode1
# 當(dāng)前節(jié)點(diǎn)綁定到的ip地址(之后的 http.host、transport.host等都默認(rèn)使用該配置)
# 一般為當(dāng)前節(jié)點(diǎn)所在服務(wù)器的ip
network.host: 192.168.1.10
# 節(jié)點(diǎn)訪問端口
http.port: 9200
# 集群間通信端口
transport.port: 9300
# 此設(shè)置提供集群中其他符合主節(jié)點(diǎn)資格且處于活動(dòng)狀態(tài)的節(jié)點(diǎn)列表。每個(gè)地址可以是 IP 地址,也可以是通過 DNS 解析為一個(gè)或多個(gè) IP 地址的主機(jī)名
discovery.seed_hosts:
- 172.2.1.168.1.10:9300
- 172.2.1.168.1.11:9300
- 172.2.1.168.1.12:9300
配置添加之后重啟即可,這樣我們就啟動(dòng)了集群的一個(gè)節(jié)點(diǎn)。
將新節(jié)點(diǎn)加入集群
- 解壓安裝包,解壓后不要做任何修改和配置(請(qǐng)一定保持是全新的節(jié)點(diǎn)應(yīng)用,否則會(huì)有已經(jīng)使用等的錯(cuò)誤出現(xiàn))
- 在現(xiàn)有集群的任意節(jié)點(diǎn)上執(zhí)行如下命令
./bin/elasticsearch-create-enrollment-token -s node
執(zhí)行后會(huì)生成token字符串
- 在新節(jié)點(diǎn)的安裝目錄中執(zhí)行如下命令(注意拷貝token字符串到命令中)
./bin/elasticsearch --enrollment-token <token>
執(zhí)行后 Elasticsearch 會(huì)在 config/certs 目錄下自動(dòng)生成證書和密鑰,并自動(dòng)添加 SSL 相關(guān)的配置,并啟動(dòng),但啟動(dòng)是會(huì)報(bào)錯(cuò)的,因?yàn)椴]有進(jìn)行集群相關(guān)的配置。
- 添加和修改 elasticsearch.yml 配置
按照我們上面的 <集群基礎(chǔ)配置> 修改當(dāng)前節(jié)點(diǎn)的集群配置即可,這里我們就不詳細(xì)說明了。
- 修改成功之后重新啟動(dòng)節(jié)點(diǎn)應(yīng)用即可(此時(shí)請(qǐng)使用后臺(tái)運(yùn)行)
./bin/elasticsearch -d -p pid
新節(jié)點(diǎn)不用再次添加用戶,使用集群已創(chuàng)建的用戶即可訪問。
查看集群的狀態(tài)
注意:新節(jié)點(diǎn)啟動(dòng)之后,還會(huì)有集群間的分配平衡過程,此過程會(huì)消耗一定的時(shí)間,所以在一定的時(shí)間范圍內(nèi),我們可能得到y(tǒng)ellow 的狀態(tài),這是正?,F(xiàn)象
GET /_cluster/health
{
"cluster_name": "myTestEs", // 集群名稱
"status": "green", // 集群狀態(tài)
"timed_out": false, // 是否超時(shí)
"number_of_nodes": 2, // 節(jié)點(diǎn)數(shù)
"number_of_data_nodes": 2,// 數(shù)據(jù)節(jié)點(diǎn)數(shù)
"active_primary_shards": 9,// 活動(dòng)的主分片數(shù)
"active_shards": 18,// 活動(dòng)的總分片數(shù)
"relocating_shards": 0,// 正在重新定位的分片數(shù)
"initializing_shards": 0, // 正在初始化的分片數(shù)
"unassigned_shards": 0, // 未分配的分片數(shù)
"delayed_unassigned_shards": 0, // 其分配被超時(shí)設(shè)置延遲的分片數(shù)
"number_of_pending_tasks": 0, // 尚未執(zhí)行的集群級(jí)更改數(shù)
"number_of_in_flight_fetch": 0, // 未完成的提取數(shù)
"task_max_waiting_in_queue_millis": 0,// 自最早啟動(dòng)的任務(wù)等待執(zhí)行以來的時(shí)間(以毫秒為單位)
"active_shards_percent_as_number": 100.0 // 集群中活動(dòng)分片的比率,以百分比表示
}
按照同樣的方式再添加其他節(jié)點(diǎn)即可。
集群?jiǎn)?dòng)常見錯(cuò)誤
文件描述符和虛擬內(nèi)存過小
bootstrap check failure [1] of [2]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
bootstrap check failure [2] of [2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
修改 /etc/security/limits.conf 配置(請(qǐng)使用 root 或 有 sudo 權(quán)限的賬號(hào)修改)
查看limits.conf,文件中有配置說明,此處不做詳解。新增配置如下:
* soft nofile 65536
* hard nofile 65536
* hard stack 65536
* soft stack 65536
* soft nproc 65536
* hard nproc 65536
此方式為永久修改,修改后需要重啟系統(tǒng)。也可以使用如下命令臨時(shí)修改,在重啟后會(huì)失效
ulimit -n 65536
修改 /etc/sysctl.conf 配置(請(qǐng)使用 root 或 有 sudo 權(quán)限的賬號(hào)修改)
添加如下配置:文章來源:http://www.zghlxwxcb.cn/news/detail-600762.html
vm.max_map_count=262144
此方式為永久修改,修改后需要重啟系統(tǒng)。也可以使用如下命令臨時(shí)修改,在重啟后會(huì)失效文章來源地址http://www.zghlxwxcb.cn/news/detail-600762.html
sysctl -w vm.max_map_count=262144
到了這里,關(guān)于Elasticsearch 集群安裝的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!