ES中集群

15. ES中集群

15.1 相關(guān)概念

集群(cluster)

1.單節(jié)點(diǎn)壓力問題 并發(fā)壓力 物理資源上限壓力

2.數(shù)據(jù)冗余備份能力

一個(gè)集群就是由一個(gè)或多個(gè)節(jié)點(diǎn)組織在一起,它們共同持有你整個(gè)的數(shù)據(jù),并一起提供索引和搜索功能。一個(gè)集群 由一個(gè)唯一的名字標(biāo)識,這個(gè)名字默認(rèn)就是elasticsearch。這個(gè)名字是重要的,因?yàn)橐粋€(gè)節(jié)點(diǎn)只能通過指定某個(gè)集群的名字,來加入這個(gè)集群。在產(chǎn)品環(huán)境中顯式地設(shè)定這個(gè)名字是一個(gè)好習(xí)慣,但是使用默認(rèn)值來進(jìn)行測試/開發(fā)也是不錯(cuò)的。

節(jié)點(diǎn)(node)

一個(gè)節(jié)點(diǎn)是你集群中的一個(gè)服務(wù)器,作為集群的一部分,它存儲(chǔ)你的數(shù)據(jù),參與集群的索引和搜索功能。和集群類似,一個(gè)節(jié)點(diǎn)也是由一個(gè)名字來標(biāo)識的,默認(rèn)情況下,這個(gè)名字是一個(gè)隨機(jī)的漫威漫畫角色的名字,這個(gè)名字會(huì)在啟動(dòng)的時(shí)候賦予節(jié)點(diǎn)。這個(gè)名字對于管理工作來說挺重要的,因?yàn)樵谶@個(gè)管理過程中,你會(huì)去確定網(wǎng)絡(luò)中的哪些服務(wù)器對應(yīng)于Elasticsearch集群中的哪些節(jié)點(diǎn)。

一個(gè)節(jié)點(diǎn)可以通過配置集群名稱的方式來加入一個(gè)指定的集群。默認(rèn)情況下,每個(gè)節(jié)點(diǎn)都會(huì)被安排加入到一個(gè)叫 做“elasticsearch”的集群中,這意味著,如果你在你的網(wǎng)絡(luò)中啟動(dòng)了若干個(gè)節(jié)點(diǎn),并假定它們能夠相互發(fā)現(xiàn)彼此,它們將會(huì)自動(dòng)地形成并加入到一個(gè)叫做“elasticsearch”的集群中。

在一個(gè)集群里,只要你想,可以擁有任意多個(gè)節(jié)點(diǎn)。而且,如果當(dāng)前你的網(wǎng)絡(luò)中沒有運(yùn)行任何Elasticsearch節(jié)點(diǎn), 這時(shí)啟動(dòng)一個(gè)節(jié)點(diǎn),會(huì)默認(rèn)創(chuàng)建并加入一個(gè)叫做“elasticsearch”的集群。

分片和復(fù)制(shards & replicas)

一個(gè)索引可以存儲(chǔ)超出單個(gè)結(jié)點(diǎn)硬件限制的大量數(shù)據(jù)。比如,一個(gè)具有10億文檔的索引占據(jù)1TB的磁盤空間,而任一節(jié)點(diǎn)都沒有這樣大的磁盤空間;或者單個(gè)節(jié)點(diǎn)處理搜索請求,響應(yīng)太慢。為了解決這個(gè)問題,Elasticsearch提供了將索引劃分成多份的能力,這些份就叫做分片。當(dāng)你創(chuàng)建一個(gè)索引的時(shí)候,你可以指定你想要的分片的數(shù)量。每個(gè)分片本身也是一個(gè)功能完善并且獨(dú)立的“索引”,這個(gè)“索引”可以被放置 到集群中的任何節(jié)點(diǎn)上。 分片之所以重要,主要有兩方面的原因:

允許你水平分割/擴(kuò)展你的內(nèi)容容量允許你在分片(潛在地,位于多個(gè)節(jié)點(diǎn)上)之上進(jìn)行分布式的、并行的操作,進(jìn)而提高性能/吞吐量 至于一個(gè)分片怎樣分布,它的文檔怎樣聚合回搜索請求,是完全由Elasticsearch管理的,對于作為用戶的你來說,這些都是透明的。

在一個(gè)網(wǎng)絡(luò)/云的環(huán)境里,失敗隨時(shí)都可能發(fā)生,在某個(gè)分片/節(jié)點(diǎn)不知怎么的就處于離線狀態(tài),或者由于任何原因 消失了。這種情況下,有一個(gè)故障轉(zhuǎn)移機(jī)制是非常有用并且是強(qiáng)烈推薦的。為此目的,Elasticsearch允許你創(chuàng)建分 片的一份或多份拷貝,這些拷貝叫做復(fù)制分片,或者直接叫復(fù)制。復(fù)制之所以重要,主要有兩方面的原因:

在分片/節(jié)點(diǎn)失敗的情況下,提供了高可用性。因?yàn)檫@個(gè)原因,注意到復(fù)制分片從不與原/主要 (original/primary)分片置于同一節(jié)點(diǎn)上是非常重要的。 擴(kuò)展你的搜索量/吞吐量,因?yàn)樗阉骺梢栽谒械膹?fù)制上并行運(yùn)行

總之,每個(gè)索引可以被分成多個(gè)分片。一個(gè)索引也可以被復(fù)制0次(意思是沒有復(fù)制)或多次。一旦復(fù)制了,每個(gè) 索引就有了主分片(作為復(fù)制源的原來的分片)和復(fù)制分片(主分片的拷貝)之別。分片和復(fù)制的數(shù)量可以在索引創(chuàng)建的時(shí)候指定。在索引創(chuàng)建之后,你可以在任何時(shí)候動(dòng)態(tài)地改變復(fù)制數(shù)量,但是不能改變分片的數(shù)量。

默認(rèn)情況下,Elasticsearch中的每個(gè)索引被分片5個(gè)主分片和1個(gè)復(fù)制,這意味著,如果你的集群中至少有兩個(gè)節(jié)點(diǎn),你的索引將會(huì)有5個(gè)主分片和另外5個(gè)復(fù)制分片(1個(gè)完全拷貝),這樣的話每個(gè)索引總共就有10個(gè)分片。一個(gè) 索引的多個(gè)分片可以存放在集群中的一臺主機(jī)上,也可以存放在多臺主機(jī)上,這取決于你的集群機(jī)器數(shù)量。主分片和復(fù)制分片的具體位置是由ES內(nèi)在的策略所決定的。

集群架構(gòu)圖

image-20200706130616482.png

15.2 快速搭建集群

1. 將原有ES安裝包復(fù)制三份
    cp -r elasticsearch-6.2.4/ node1/
    cp -r elasticsearch-6.2.4/ node2/
    cp -r elasticsearch-6.2.4/ node3/
    
2. 刪除復(fù)制目錄中data目錄 
    #注意:由于復(fù)制目錄之前使用過因此需要在創(chuàng)建集群時(shí)將原來數(shù)據(jù)刪除
    rm -rf node1/data
    rm -rf node2/data
    rm -rf node3/data
    
3. 編輯沒有文件夾中config目錄中jvm.options文件跳轉(zhuǎn)啟動(dòng)內(nèi)存(因?yàn)閑s很占jvm內(nèi)存所以一個(gè)服務(wù)器啟動(dòng)三個(gè)es占用jvm要改小一點(diǎn))
    vim node1/config/jvm.options  
    vim node2/config/jvm.options
    vim node3/config/jvm.options
    #分別加入: -Xms512m -Xmx512m(我的是 -Xms300m -Xmx300m)
    
4. 分別修改三個(gè)文件夾中config目錄中elasticsearch.yml文件
    vim node1/config/elasticsearch.yml
    vim node2/config/elasticsearch.yml
    vim node3/config/elasticsearch.yml
    #分別修改如下配置:
        cluster.name: my-es                       #集群名稱(集群名稱必須一致)
        node.name: node-1                          #節(jié)點(diǎn)名稱(節(jié)點(diǎn)名稱不能一致)
        network.host: 0.0.0.0                     #監(jiān)聽地址(必須開啟遠(yuǎn)程權(quán)限,并關(guān)閉防火墻)
        http.port: 9201                           #監(jiān)聽端口(在一臺機(jī)器時(shí)服務(wù)端口不能一致,后續(xù)的端口依次+1)
        discovery.zen.ping.unicast.hosts: ["192.168.159.5:9302", "192.168.159.5:9303"] #另外兩個(gè)節(jié)點(diǎn)的ip
        gateway.recover_after_nodes: 3            #集群可做master的最小節(jié)點(diǎn)數(shù)
        transport.tcp.port: 9301                                #集群TCP端口(在一臺機(jī)器搭建必須修改)  9301 9302 9303
5.  啟動(dòng)多個(gè)es
    ./node1/bin/elasticsearch
    ./node2/bin/elasticsearch
    ./node3/bin/elasticsearch
    
6. 查看節(jié)點(diǎn)狀態(tài)
      http://192.168.159.5:9201
      http://192.168.159.5:9202
      http://192.168.159.5:9203

7. 查看集群健康
    http://192.168.159.5:9201/_cat/health?v
image.png
image.png

修改vi kibana.yml連接es的端口

image.png

15.3 安裝head插件

1. 訪問github網(wǎng)站
    搜索: elasticsearch-head 插件
    
2. 安裝git
    yum install git
    
3. 將elasticsearch-head下載到本地
    git clone git://github.com/mobz/elasticsearch-head.git

4. 安裝nodejs
    #注意: 沒有wget的請先安裝yum install -y wget
    wget http://cdn.npm.taobao.org/dist/node/latest-v8.x/node-v8.1.2-linux-x64.tar.xz

(我們這里本地上傳)

5. 解壓縮nodejs
    xz -d node-v10.15.3-linux-arm64.tar.xz
    tar -xvf node-v10.15.3-linux-arm64.tar

6. 配置環(huán)境變量
    mv node-v10.15.3-linux-arm64 nodejs
    mv nodejs /usr/nodejs
    vim /etc/profile
        export NODE_HOME=/usr/nodejs
        export PATH=$PATH:$JAVA_HOME/bin:$NODE_HOME/bin
    source /etc/profile
7.  進(jìn)入elasticsearch-head的目錄
解壓  unzip elasticsearch-head-master.zip
沒有unzip命令的話要先:yum install -y unzip
設(shè)置淘寶鏡像  npm config set registry https://registry.npm.taobao.org
    npm install
    npm run start

8.  control c停掉之前的三個(gè)es服務(wù),然后編寫elastsearch.yml配置文件開啟head插件的訪問(引文head和es不是同一個(gè)公司,訪問涉及到跨域問題)
 vi node1/config/elasticsearch.yml
    http.cors.enabled: true
    http.cors.allow-origin: "*"

9.  啟動(dòng)訪問head插件 默認(rèn)端口9100
    http://ip:9100  查看集群狀態(tài)
image.png
image.png

最后java中springboot要連接es集群

@Configuration
public class ElasticSearchRestClientConfig extends AbstractElasticsearchConfiguration {

    //這個(gè)client 用來替換 transportClient(9300)對象
    @Override
    @Bean
    public RestHighLevelClient elasticsearchClient() {
        //定義客戶端配置對象 RestClient  9200
        ClientConfiguration clientConfiguration = ClientConfiguration.builder()
                .connectedTo("192.168.159.5:9201","192.168.159.5:9202","192.168.159.5:9202")
                .build();
       //通過RestClients對象創(chuàng)建
        return RestClients.create(clientConfiguration).rest();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容