1. 程式人生 > >ES集群部署及調優

ES集群部署及調優

ref 修改 三臺 java_home pre lose data blog timeout

系統:Centos6
ES版本:6.4.0
服務器三臺
172.16.0.8
172.16.0.6
172.16.0.22

部署jdk
解壓jdk放在/data目錄,/data/jdk
配置環境變量,/etc/proifle裏面加入如下

export JAVA_HOME=/data/jdk
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH

source /etc/profile生效,查看版本java -version

部署ES集群,三臺機器同樣的操作
1、添加普通用戶啟動es
useradd elasticsearch

2、安裝ES

tar xf elasticsearch-6.4.0.tar.gz -C /data/
mv /data/elasticsearch-6.4.0/ /data/elasticsearch
mkdir /data/elasticsearch/startlogs

3、配置elasticsearch.yml文件內容

cp /data/elasticsearch/config/elasticsearch.yml /data/elasticsearch/config/elasticsearch.yml.bak
cat elasticsearch.yml
cluster.name: escluster
node.name: es3
node.master: true
node.data: true
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs
bootstrap.memory_lock: true
http.port: 9200
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping_timeout: 3000s
discovery.zen.ping.unicast.hosts: ["172.16.0.8:9300","172.16.0.6:9300","172.16.0.22:9300"]
bootstrap.system_call_filter: false
network.host: 0.0.0.0

4、配置文件重點參數解析
(1)cluster.name
集群名字,三臺集群的集群名字都必須一致

(2)node.name
節點名字,三臺ES節點字都必須不一樣

(3)node.master
該節點是否有資格選舉為master,默認第一臺啟動的為master角色,如果這臺服務器宕機會選舉新的master,三臺都可以設置為master

(4)node.data
存儲索引數據,三臺都設為true即可

(5)bootstrap.memory_lock: true
鎖住物理內存,不使用swap內存,有swap內存的可以開啟此項

(6)discovery.zen.minimum_master_nodes:2
表示集群最少的master數,如果集群的最少master數據少於指定的數,將無法啟動

(7)discovery.zen.ping_timeout: 3000s
自動發現拼其他節點超時時間

(8)discovery.zen.ping.unicast.hosts: ["172.16.0.8:9300","172.16.0.6:9300","172.16.0.22:9300"]
設置集群的初始節點列表,集群互通端口為9300

5、jvm調優
vim /data/elasticsearch/config/jvm.options

-Xms1g   修改為 ===>  -Xms2g
-Xmx1g   修改為 ===>  -Xmx2g

設置為物理內存一半最佳,可根據服務器內存去選擇調,這裏我Master設為2G
其他兩臺ES設為3G

6、設置權限
chown -R elasticsearch: /data/elasticsearch

7、操作系統調優(必須配置,否則ES起不來)
【1】內存優化
在/etc/sysctl.conf添加如下內容

fs.file-max=655360
vm.max_map_count=655360

sysctl -p生效

解釋:
(1)vm.max_map_count=655360
系統最大打開文件描述符數

(2)vm.max_map_count=655360
限制一個進程擁有虛擬內存區域的大小

【2】修改vim /etc/security/limits.conf

* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
* soft memlock unlimited
* hard memlock unlimited

解釋:
(nofile)最大開打開文件描述符
(nproc)最大用戶進程數
(memlock)最大鎖定內存地址空間

【3】修改/etc/security/limits.d/90-nproc.conf
將1024修改為65536

*          soft    nproc     1024     修改前
*          soft    nproc     65536   修改後

ctrl +d從進終端
ulimit -a查看

8、編寫es啟動腳本

#!/bin/bash
ROOT=/data

USER=elasticsearch

NAME=elasticsearch

DIR=${ROOT}/${NAME}
BIN="${DIR}/bin/${NAME}"
PID=${DIR}/.${NAME}.pid
LOG=${DIR}/startlogs/${NAME}.log

start(){
  ps -ef |grep ${DIR}|grep -v grep
  PROC_STAT=$?
  if [ ${PROC_STAT} != 0 ]
        then
        su - ${USER} -c "${BIN} > ${LOG} 2>&1 &"
        sleep 1
        PROC_PID=`ps -ef|grep ${DIR}|grep -v grep|awk ‘{print $2}‘`
        su - ${USER} -c "echo ${PROC_PID} > ${PID}"
  else
        echo "${NAME} start fail,please check it!"
  fi
}

stop(){
  if [ -f $PID ]
        then
        kill $(cat $PID)
        rm -rf ${PID}
  else
        PROC_PID=`ps -ef |grep ${DIR}|grep -v grep|awk ‘{print $2}‘`
        if [ -n ${PROC_PID} ]
                then
                kill ${PROC_PID}
                echo "${NAME} had close."
        else
                echo "${NAME} maybe not run ,please check it!"
        fi
  fi
}
status(){
  ps -ef |grep ${DIR}|grep -v grep
}

case "$1" in
  start)
        start
  ;;
  stop)
        stop
  ;;
  status)
        status
  ;;
  restart)
        stop
        sleep 5
        start
  ;;
  *)
  echo "Usage: /etc/init.d/${NAME} {start|stop|restart}"
  exit 1
esac

exit 0

查看啟動

netstat -tlnp | egrep ‘9200|9300‘
service elasticsearch status

9、集群驗證
curl http://172.16.0.8:9200
curl http://172.16.0.6:9200
curl http://172.16.0.22:9200
ES主機1
技術分享圖片
ES主機2
技術分享圖片
ES主機3
技術分享圖片

ES集群部署及調優