ElasticSearch單機(jī)版和集群版學(xué)習(xí)及安裝

1 前言

1.1 概述

本文檔針對ElasticSearch2.1.2內(nèi)部版本的部署進(jìn)行介紹。

1.2 適用范圍

需要部署ElasticSearch集群的項(xiàng)目。

1.3 部署環(huán)境

本文檔以最小化安裝的Centos7 64位操作系統(tǒng)作為示例進(jìn)行介紹。

2 部署軟件包

elasticsearch-2.1.2.tar.gz

3 部署

3.1 部署環(huán)境準(zhǔn)備

3.1.1 部署服務(wù)器

假設(shè)需要在以下三臺服務(wù)器上搭建ES集群:

  1. 172.16.58.21,主機(jī)名為bigdata01;

  2. 172.16.58.22,主機(jī)名為bigdata02;

  3. 172.16.58.23,主機(jī)名為bigdata03。

注意:這些服務(wù)器的ES數(shù)據(jù)目錄所在磁盤請使用ext4文件系統(tǒng)。

3.1.2 關(guān)閉相關(guān)服務(wù)

su - root

  1. 關(guān)閉防火墻

需要在每臺服務(wù)器關(guān)閉防火墻:

systemctl disable NetworkManager.service

systemctl disable firewalld.service

systemctl stop NetworkManager.service

systemctl stop firewalld.service

  1. 關(guān)閉SELinux

集群每臺服務(wù)器都需要關(guān)閉SELinux:

vi /etc/selinux/config

SELINUX=enforcing修改為SELINUX=disabled

注意SELINUXTYPE配置不需要修改

此操作為常見配置,對于Spark部署來說是非必要操作,建議配置。

注意:關(guān)閉SELinux后需要重啟服務(wù)器才會起效。

異常情況處理:

  1. 錯誤修改SELINUXTYPE為disabled導(dǎo)致開機(jī)失敗

系統(tǒng)啟動時,按下“e”鍵進(jìn)入grub編輯界面,編輯grub菜單,使用上下鍵選擇“kernel”一行,按“e”鍵進(jìn)入編輯,在末尾增加“enforcing=0”,按“enter”保存設(shè)置并退到上一層,按“b”鍵繼續(xù)引導(dǎo)后正常開機(jī),修改“/etc/selinux/config”中的“SELINUXTYPE=targeted”。

  1. 修改SELINUX后開機(jī)卡在登錄頁面或報faild to load SELinux policy freezing錯誤

重啟時在啟動頁面按 e,進(jìn)入 grub 編輯頁面,找到 linux 那一行,在最后的 language 后面空格加上 selinux=0,按 ctrl + x 重新啟動系統(tǒng),系統(tǒng)啟動后刪除 /etc/selinux 下面的 config~ 文件。

3.1.3 配置主機(jī)名和IP映射

為每臺服務(wù)器配置主機(jī)名,并對集群中所有節(jié)點(diǎn)進(jìn)行主機(jī)名和IP映射。

su - root

  1. 修改主機(jī)名

hostnamectl set-hostname 新主機(jī)名

以上命令會更新/etc/hostname文件,因此重啟后新主機(jī)名依然起效。

執(zhí)行如下命令使新主機(jī)名馬上起效:

systemctl restart systemd-hostnamed

  1. 配置全部節(jié)點(diǎn)的IP和主機(jī)名映射

vi /etc/hosts

內(nèi)容為:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.16.58.21 bigdata01

172.16.58.22 bigdata02

172.16.58.23 bigdata03

3.1.4 關(guān)閉文件更新時間、關(guān)閉swap文件交換

vi /etc/fstab

  1. 注釋包含swap的行:
 # /dev/mapper/centos-swap   swap   swap  defaults    0 0
  1. 關(guān)閉文件更新時間,若有多個盤可相應(yīng)配置
/dev/mapper/centos-root      /     ext4    noatime,nodiratime      0 0

一般來說,只需要在數(shù)據(jù)目錄配置noatime,nodiratime,若此前相關(guān)目錄已配置為default,需要把defaults修改為noatime,nodiratime,可通過以下命令查看數(shù)據(jù)目錄的設(shè)備名稱:

df -h

注意:必須重啟服務(wù)器,才能使此配置起效。

異常情況處理:

修改完此文件重啟服務(wù)器后,發(fā)現(xiàn)根目錄下的所有文件無法修改,如用“touch xxx”命令創(chuàng)建文件失敗并報為只讀文件系統(tǒng)。查看/etc/fatab文件內(nèi)容,若根目錄的配置被注釋了,說明是此錯誤配置造成的,需要執(zhí)行如下命令使根目錄恢復(fù)為可讀寫狀態(tài):

mount -o remount, rw /

然后修改/etc/fstab文件,把根目錄的配置的注釋去掉。

3.1.5 內(nèi)存設(shè)置參數(shù)調(diào)整

vi /etc/sysctl.conf

增加:

vm.swappiness=0  # 設(shè)置盡可能利用物理內(nèi)存,在用盡物理內(nèi)存情況下才使用虛擬內(nèi)存

vm.max_map_count=655360 # 放開map counts的限制

執(zhí)行如下命令使配置馬上起效:

sysctl -w vm.max_map_count=655360

3.1.6 創(chuàng)建用戶和用戶組

注意:

  1. 每臺服務(wù)器的es用戶的密碼必須相同;

  2. 若此前已有es用戶,則可跳過該小節(jié);

  3. 同一臺服務(wù)器上安裝的多個ES可共用es用戶及起主目錄/opt/es。

  4. 創(chuàng)建es用戶和用戶組

su - root

# 創(chuàng)建用戶組,若1001號用戶組已經(jīng)被占用,可換成其他數(shù)字

groupadd -g 1001 es

# 創(chuàng)建用戶,若用戶組號不為1001,需要相應(yīng)修改

useradd -d /opt/es -s /bin/bash -g 1001 es

passwd es

以下為命令行提示:

更改用戶es的密碼。

新的密碼:es

無效的密碼:密碼少于8個字符

重新輸入新的密碼:es

passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。

注意:

  1. 標(biāo)紅部分為手工輸入的內(nèi)容,輸入過程界面不會顯示密碼內(nèi)容;

  2. 只有當(dāng)密碼長度少于8時,使用passwd命令修改密碼才需要輸入兩次密碼。

  3. 設(shè)置環(huán)境配置權(quán)限

chown -R es:es /opt/es

異常情況處理:

  1. 用戶主目錄原本存在

若用戶主目錄在創(chuàng)建用戶之前已經(jīng)存在,在創(chuàng)建用戶時會提示目錄已存在的提示,此時創(chuàng)建用戶是成功的,但切換到用戶時會出現(xiàn)如下情況:

[root@bigdata01 ~]$ su - es

上一次登錄:日 12月 18 11:20:44 CST 2017pts/0 上

-bash-4.2$

此情況說明用戶主目錄的用戶信息文件未正確創(chuàng)建,此時用戶無法正常使用。

解決辦法:

su - root

cp .bashrc .bash_profile .bash_logout /opt/es/

chown -R es:es /opt/es/

su - es

source .bashrc .bash_profile

此時命令行提示變成如下:

[es@bigdata01 ~]$

若回到root用戶后再切換為es用戶后依然如上提示,說明創(chuàng)建用戶成功。

  1. 需要刪除用戶或用戶組
su - root

# 刪除用戶命令

userdel es

# 刪除用戶組命令

groupdel es

3.1.7 設(shè)置可打開的最大文件個數(shù)、放開最大可鎖定內(nèi)存限制

  1. 修改配置
vi /etc/security/limits.conf

添加:

es soft nofile 65535

es hard nofile 65535

es soft nproc 65535

es hard nproc 65535

es soft memlock unlimited

es hard memlock unlimited

執(zhí)行如下命令放開鎖定內(nèi)存限制:

ulimit -l unlimited
  1. 配置在登錄后自動加載以上設(shè)置
vi /etc/pam.d/login

增加:

session  required  /lib64/security/pam_limits.so

3.1.8 安裝JDK

每臺服務(wù)器都必須安裝JDK 1.8.0_60,請參考《JDK1.8.0_60 部署文檔》。

3.2 部署步驟

注意:

3.2.1、3.2.4節(jié)都需要在每臺服務(wù)器進(jìn)行操作,3.2.2、3.2.3、3.2.5節(jié)只需要在需要配置免密碼登錄的服務(wù)器上執(zhí)行。

配置免密碼登錄的目的如下:

當(dāng)需要在一臺服務(wù)器上批量操作多臺服務(wù)器時,如批量啟停軟件節(jié)點(diǎn),為了避免每次遠(yuǎn)程到其他服務(wù)器執(zhí)行命令時都需要輸入密碼,就需要在該服務(wù)器對目標(biāo)服務(wù)器配置免密碼登錄,若只需要以其中一臺來管理整個集群,則只需要在一臺服務(wù)器上按照3.2.3的步驟來配置免密碼即可,若希望使用多臺來管理,則需要在這些服務(wù)器上都操作3.2.2、3.2.3、3.2.5。

3.2.1 上傳軟件到服務(wù)器

上傳elasticsearch-2.1.2.tar.gz到每臺服務(wù)器,如/tmp目錄,解壓到安裝目錄:

su - root

tar -zxf /tmp/elasticsearch-2.1.2.tar.gz -C /opt

cd /opt/es

ln -s elasticsearch-2.1.1 es

chown -R es:es /opt/es

chmod -R 777 /opt/es/install

注意:

本文檔默認(rèn)/opt目錄下此前未安裝過ES在/opt/es目錄中,若此前安裝過,需要安裝到另外的目錄,需要如下操作:

假設(shè)安裝到/opt/esface目錄中

su - root

mkdir /opt/esface

tar -zxf /tmp/elasticsearch-2.1.2.tar.gz -C /opt/esface

cd /opt/esface

mv es/* ./

rm -rf es

ln -s elasticsearch-2.1.1 es

chown -R es:es /opt/esface

chmod -R 777 /opt/esface/install

安裝的多個ES都可以共用es用戶。

對于后續(xù)步驟,都應(yīng)以/opt/esface目錄作為安裝目錄來相應(yīng)修改。

3.2.2 安裝必要的軟件

su - root

cd /opt/es/install/rpm

rpm -ivh tcl-8.5.7-6.el6.x86_64.rpm

rpm -ivh expect-5.44.1.15-4.el6.x86_64.rpm

注意:這兩個軟件為做免密碼登錄必要的軟件,要先安裝tcl后再安裝expect,若系統(tǒng)之前已安裝,則可以跳過此步。

3.2.3 配置免密碼登錄

注意:所有節(jié)點(diǎn)必須能相互ping通,所有服務(wù)器的es用戶已創(chuàng)建好,并且密碼必須相同才能使用下面的方法配置免密碼登錄。

以在bigdata01服務(wù)器上作為例子,具體配置步驟如下:

su - es
  1. 修改腳本讀取的IP和主機(jī)名映射
vi /opt/es/install/servers.txt

內(nèi)容為:

172.16.58.21 bigdata01

172.16.58.22 bigdata02

172.16.58.23 bigdata03
  1. 給es用戶做免密碼登錄
cd /opt/es/install

ssh-keygen -t rsa   # 提示輸入時直接按回車確認(rèn)

./establishSSH.sh es es /opt/es

其中:

establishSSH.sh腳本的參數(shù)含義如下:

  1. 第一個參數(shù):用戶名;

  2. 第二個參數(shù):用戶密碼,部署的多臺服務(wù)器中想用用戶名的密碼必須相同;

  3. 第三個參數(shù):用戶主目錄,根據(jù)3.2.4節(jié)中配置的主目錄為/opt/es

驗(yàn)證:

使用es用戶執(zhí)行“ssh ip date”和“ssh hostname date”在其他每臺服務(wù)器執(zhí)行查看時間的命令,若不需要輸入密碼即可查看其他服務(wù)器的時間,則表示免密碼登錄做成功。

例如:

ssh 172.16.58.21 date

ssh bigdata01 date

注意:必須ssh ip date和ssh hostname date都不需要輸入密碼時,免密碼登錄才算完全配置成功。

異常情況處理:

若此前創(chuàng)建過免密碼登錄,在操作時會提示是否覆蓋文件(y/n),輸入y回車覆蓋文件繼續(xù)操作即可。若免密碼一直無法做成功,可如下操作(假設(shè)要從bigdata01做免密碼到全部服務(wù)器):

遠(yuǎn)程到每一臺服務(wù)器(包括bigdata1),執(zhí)行如下操作:

su - es

rm -rf ~/.ssh

然后遠(yuǎn)程到bigdata01,執(zhí)行如下操作:

su - es

ssh-keygen -t rsa

# 以下ssh-copy-id命令針對bigdata01-03,172.16.58.21-23

# 都分別執(zhí)行一次,也就是總共執(zhí)行6次ssh-copy-id命令

ssh-copy-id -i ~/.ssh/id_rsa.pub  es@bigdata01

ssh-copy-id -i ~/.ssh/id_rsa.pub  es@172.16.58.21

...

ssh-copy-id -i ~/.ssh/id_rsa.pub  es@bigdata03

ssh-copy-id -i ~/.ssh/id_rsa.pub  es@172.16.58.23

注意:ssh-copy-id命令每次執(zhí)行都需要輸入用戶密碼

以上命令執(zhí)行完后,嘗試用ssh命令從bigdata01遠(yuǎn)程到任意節(jié)點(diǎn)(包括自身),確認(rèn)免密碼登錄是否都做成功。

3.2.4 修改ES配置文件

  1. 修改配置文件
vi /opt/es/es/config/elasticsearch.yml

修改:

cluster.name: 集群名稱

node.name: 節(jié)點(diǎn)名稱

network.host: 本機(jī)IP地址,如172.16.58.21

http.port: 端口號,若不設(shè)置默認(rèn)為9200

transport.tcp.port: 端口號,若不設(shè)置默認(rèn)為9300

node.master: true/false

node.data: true/false

discovery.zen.ping.unicast.hosts: ["172.16.58.21:9300","172.16.58.22:9300","172.16.58.23:9300"]

discovery.zen.minimum_master_nodes: 數(shù)字

bootstrap.mlockall: true/false

注意:

  1. cluster.name應(yīng)全部字母小寫,可由字母、數(shù)字、下劃線等組成,cluster.name同名的節(jié)點(diǎn)才會組成集群;

  2. 每個節(jié)點(diǎn)都應(yīng)有唯一的node.name,命名規(guī)則同cluster.name,一般命名為主機(jī)名;

  3. http.port是http訪問端口,如通過web網(wǎng)頁訪問ES集群或通過RESTful接口操作ES集群等通過此端口進(jìn)行;

  4. transport.tcp.port是tcp訪問端口,通過編程語言API來操作ES集群時通過此端口進(jìn)行;

  5. 若本節(jié)點(diǎn)可作為Master節(jié)點(diǎn),node.master參數(shù)需設(shè)置為true,否則為false,此配置應(yīng)根據(jù)實(shí)際部署規(guī)劃來進(jìn)行設(shè)置;

  6. 若本節(jié)點(diǎn)希望保存索引數(shù)據(jù),node.data參數(shù)需設(shè)置為true,否則為false,此配置應(yīng)根據(jù)實(shí)際部署規(guī)劃來進(jìn)行設(shè)置;

  7. discovery.zen.ping.unicast.hosts參數(shù)表示當(dāng)前節(jié)點(diǎn)可通過配置的幾個節(jié)點(diǎn)來發(fā)現(xiàn)集群并加入,一般配置全部Master節(jié)點(diǎn)的IP和端口;

  8. discovery.zen.minimum_master_nodes參數(shù)配置:假設(shè)Master節(jié)點(diǎn)數(shù)為N,則此參數(shù)配置為(N+1)/2,如N為3此值配置2,N為4時配置為2,其中N建議為單數(shù);

  9. bootstrap.mlockall參數(shù)表示ES進(jìn)程是否啟動后馬上申請配置的堆內(nèi)存并一直占用。1)若為true,則啟動時會申請內(nèi)存并一直占用,前提是按照3.2.5配置了放開可鎖定

    內(nèi)存,若未配置,并且elasticsearch.in.sh中配置的堆內(nèi)存大小超出操作系統(tǒng)的
    
    鎖定內(nèi)存限制,則ES會啟動失敗。此為建議值,能夠提升ES的性能;
    

    2)若為false,則ES啟動時會首先占用elasticsearch.in.sh中配置的ES_MIN_MEM

    內(nèi)存空間,若未按3.2.5配置放開可鎖定內(nèi)存,并且該內(nèi)存空間大小超出操作系統(tǒng)的
    
    鎖定內(nèi)存限制,則ES會啟動失?。?
  10. 緊跟參數(shù)的英文冒號后面的空格是必要的,否則會啟動ES失敗并且無日志輸出。

  1. 為ES進(jìn)程分配固定堆內(nèi)存:
vi /opt/es/es/bin/elasticsearch.in.sh

修改:

ES_CLASSPATH="/opt/spark/spark/conf/:$ES_HOME/lib/*:$ES_HOME/libext/*"

...

if [ "x$ES_MIN_MEM" = "x" ]; then

    ES_MIN_MEM=4g

fi

if [ "x$ES_MAX_MEM" = "x" ]; then

    ES_MAX_MEM=4g

fi

注意:

  1. ES_CLASSPATH中的spark目錄應(yīng)與spark實(shí)際安裝目錄對應(yīng);

  2. 對于單個ES節(jié)點(diǎn)來說,ES_MIN_MEM和ES_MAX_MEM應(yīng)不小于2G且不大于30G,并且不大于本機(jī)內(nèi)存大小的40%,如:服務(wù)器有96G內(nèi)存則可配置30G,有16G內(nèi)存則可配置6G,有8G內(nèi)存則可配置2-3G。當(dāng)一臺服務(wù)器上啟動兩個ES節(jié)點(diǎn)時,應(yīng)兩個ES占用總內(nèi)存不超過本機(jī)內(nèi)存的40%,即有16G內(nèi)存可為每個ES分配3G,有8G可為每個ES分配2G內(nèi)存。

3.2.5 為批量起停ES節(jié)點(diǎn)準(zhǔn)備

vi /opt/es/servers.txt

內(nèi)容為:

172.16.58.21 bigdata01

172.16.58.22 bigdata02

172.16.58.23 bigdata03

4 起停服務(wù)

4.1 啟動ES

  1. 啟動多個節(jié)點(diǎn)

在配置了免密碼登錄的服務(wù)器上執(zhí)行:

su - es

/opt/es/es-cluster.sh start

注意:

  1. 此命令會啟動/opt/es/servers.txt文件中的全部節(jié)點(diǎn)上安裝目錄相同的ES,本文檔es-cluster.sh腳本所在的安裝目錄為/opt/es;

  2. 在執(zhí)行腳本所在服務(wù)器上,必須配置免密碼登錄,可參照3.3.3節(jié)。若未配置或配置失敗,以上命令每啟動一個ES節(jié)點(diǎn)都會提示要求輸入es用戶的密碼。此情況下,應(yīng)先關(guān)閉ES集群,把免密碼登錄配置好,然后重新啟動ES集群。

  3. 啟動單個節(jié)點(diǎn)

若想啟動單個節(jié)點(diǎn),可在所在服務(wù)器上執(zhí)行:

su - es

/opt/es/es/bin/es-start.sh

4.2 停止ES

  1. 停止多個節(jié)點(diǎn)

在配置了免密碼登錄的服務(wù)器上執(zhí)行:

su - es

/opt/es/es-cluster.sh stop

注意:

  1. 此命令會關(guān)閉/opt/es/servers.txt文件中的全部節(jié)點(diǎn)上安裝目錄相同的ES,本文檔es-cluster.sh腳本所在的安裝目錄為/opt/es;

  2. 在執(zhí)行腳本所在服務(wù)器上,必須配置免密碼登錄,可參照3.3.3節(jié)。若未配置或配置失敗,以上命令每關(guān)閉一個ES節(jié)點(diǎn)都會提示要求輸入es用戶的密碼。此情況下,需手動關(guān)閉每個節(jié)點(diǎn)的ES進(jìn)程,然后把免密碼登錄配置好,在下次關(guān)閉ES集群時更方便。

  3. 停止單個節(jié)點(diǎn)

在希望停止的節(jié)點(diǎn)上執(zhí)行:

su - es

/opt/es/es/bin/es-stop.sh

或使用ps -ef | grep /opt/es命令找到ES的進(jìn)程PID后,執(zhí)行下面的命令停止單個ES節(jié)點(diǎn):

kill -15 PID
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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