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集群:
172.16.58.21,主機(jī)名為bigdata01;
172.16.58.22,主機(jī)名為bigdata02;
172.16.58.23,主機(jī)名為bigdata03。
注意:這些服務(wù)器的ES數(shù)據(jù)目錄所在磁盤請使用ext4文件系統(tǒng)。
3.1.2 關(guān)閉相關(guān)服務(wù)
su - root
- 關(guān)閉防火墻
需要在每臺服務(wù)器關(guān)閉防火墻:
systemctl disable NetworkManager.service
systemctl disable firewalld.service
systemctl stop NetworkManager.service
systemctl stop firewalld.service
- 關(guān)閉SELinux
集群每臺服務(wù)器都需要關(guān)閉SELinux:
vi /etc/selinux/config
SELINUX=enforcing修改為SELINUX=disabled
注意SELINUXTYPE配置不需要修改
此操作為常見配置,對于Spark部署來說是非必要操作,建議配置。
注意:關(guān)閉SELinux后需要重啟服務(wù)器才會起效。
異常情況處理:
- 錯誤修改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”。
- 修改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
- 修改主機(jī)名
hostnamectl set-hostname 新主機(jī)名
以上命令會更新/etc/hostname文件,因此重啟后新主機(jī)名依然起效。
執(zhí)行如下命令使新主機(jī)名馬上起效:
systemctl restart systemd-hostnamed
- 配置全部節(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
- 注釋包含swap的行:
# /dev/mapper/centos-swap swap swap defaults 0 0
- 關(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)建用戶和用戶組
注意:
每臺服務(wù)器的es用戶的密碼必須相同;
若此前已有es用戶,則可跳過該小節(jié);
同一臺服務(wù)器上安裝的多個ES可共用es用戶及起主目錄/opt/es。
創(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)成功更新。
注意:
標(biāo)紅部分為手工輸入的內(nèi)容,輸入過程界面不會顯示密碼內(nèi)容;
只有當(dāng)密碼長度少于8時,使用passwd命令修改密碼才需要輸入兩次密碼。
設(shè)置環(huán)境配置權(quán)限
chown -R es:es /opt/es
異常情況處理:
- 用戶主目錄原本存在
若用戶主目錄在創(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)建用戶成功。
- 需要刪除用戶或用戶組
su - root
# 刪除用戶命令
userdel es
# 刪除用戶組命令
groupdel es
3.1.7 設(shè)置可打開的最大文件個數(shù)、放開最大可鎖定內(nèi)存限制
- 修改配置
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
- 配置在登錄后自動加載以上設(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
- 修改腳本讀取的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
- 給es用戶做免密碼登錄
cd /opt/es/install
ssh-keygen -t rsa # 提示輸入時直接按回車確認(rèn)
./establishSSH.sh es es /opt/es
其中:
establishSSH.sh腳本的參數(shù)含義如下:
第一個參數(shù):用戶名;
第二個參數(shù):用戶密碼,部署的多臺服務(wù)器中想用用戶名的密碼必須相同;
第三個參數(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配置文件
- 修改配置文件
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
注意:
cluster.name應(yīng)全部字母小寫,可由字母、數(shù)字、下劃線等組成,cluster.name同名的節(jié)點(diǎn)才會組成集群;
每個節(jié)點(diǎn)都應(yīng)有唯一的node.name,命名規(guī)則同cluster.name,一般命名為主機(jī)名;
http.port是http訪問端口,如通過web網(wǎng)頁訪問ES集群或通過RESTful接口操作ES集群等通過此端口進(jìn)行;
transport.tcp.port是tcp訪問端口,通過編程語言API來操作ES集群時通過此端口進(jìn)行;
若本節(jié)點(diǎn)可作為Master節(jié)點(diǎn),node.master參數(shù)需設(shè)置為true,否則為false,此配置應(yīng)根據(jù)實(shí)際部署規(guī)劃來進(jìn)行設(shè)置;
若本節(jié)點(diǎn)希望保存索引數(shù)據(jù),node.data參數(shù)需設(shè)置為true,否則為false,此配置應(yīng)根據(jù)實(shí)際部署規(guī)劃來進(jìn)行設(shè)置;
discovery.zen.ping.unicast.hosts參數(shù)表示當(dāng)前節(jié)點(diǎn)可通過配置的幾個節(jié)點(diǎn)來發(fā)現(xiàn)集群并加入,一般配置全部Master節(jié)點(diǎn)的IP和端口;
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ù);
-
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會啟動失?。? 緊跟參數(shù)的英文冒號后面的空格是必要的,否則會啟動ES失敗并且無日志輸出。
- 為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
注意:
ES_CLASSPATH中的spark目錄應(yīng)與spark實(shí)際安裝目錄對應(yīng);
對于單個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
- 啟動多個節(jié)點(diǎn)
在配置了免密碼登錄的服務(wù)器上執(zhí)行:
su - es
/opt/es/es-cluster.sh start
注意:
此命令會啟動/opt/es/servers.txt文件中的全部節(jié)點(diǎn)上安裝目錄相同的ES,本文檔es-cluster.sh腳本所在的安裝目錄為/opt/es;
在執(zhí)行腳本所在服務(wù)器上,必須配置免密碼登錄,可參照3.3.3節(jié)。若未配置或配置失敗,以上命令每啟動一個ES節(jié)點(diǎn)都會提示要求輸入es用戶的密碼。此情況下,應(yīng)先關(guān)閉ES集群,把免密碼登錄配置好,然后重新啟動ES集群。
啟動單個節(jié)點(diǎn)
若想啟動單個節(jié)點(diǎn),可在所在服務(wù)器上執(zhí)行:
su - es
/opt/es/es/bin/es-start.sh
4.2 停止ES
- 停止多個節(jié)點(diǎn)
在配置了免密碼登錄的服務(wù)器上執(zhí)行:
su - es
/opt/es/es-cluster.sh stop
注意:
此命令會關(guān)閉/opt/es/servers.txt文件中的全部節(jié)點(diǎn)上安裝目錄相同的ES,本文檔es-cluster.sh腳本所在的安裝目錄為/opt/es;
在執(zhí)行腳本所在服務(wù)器上,必須配置免密碼登錄,可參照3.3.3節(jié)。若未配置或配置失敗,以上命令每關(guān)閉一個ES節(jié)點(diǎn)都會提示要求輸入es用戶的密碼。此情況下,需手動關(guān)閉每個節(jié)點(diǎn)的ES進(jìn)程,然后把免密碼登錄配置好,在下次關(guān)閉ES集群時更方便。
停止單個節(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