CentOS 7.4 下搭建 Elasticsearch 6.3 搜尋群集

rochy_he發表於2018-07-10

CentOS 7.4 下搭建 Elasticsearch 6.3 搜尋群集

上個月 13 號,Elasticsearch 6.3 如約而至,該版本和以往版本相比,新增了很多新功能,其中最令人矚目的莫過於整合了 X-Pack 模組。而在最新的 X-Pack 中 Elasticsearch SQL 已經可用,雖然還處於實驗階段,但是相對於編寫複雜的 DSL 查詢語句,SQL 語句還是更加親民,更易於上手。

想體驗新版 Elasticsearch 6.3 的新功能,當然要先搭建一個新版本的搜尋叢集,本文將逐步介紹:如何在阿里雲的三臺 CentOS 7.4 雲主機上搭建 Elasticsearch 6.3 搜尋叢集

角色分配

目前有三臺雲主機,為了實現高可用,則至少需要 2 個主節點(Master Node),當然由於只有三臺主機,所以每一臺都需要充當資料節點(Data Node)。

主機名 內網IP 公網IP 角色 http服務
es-master01 172.16.14.85 39.104.186.15 master & data enable
es-master02 172.16.14.86 39.104.95.206 master & data disable
es-data01 172.16.14.87 39.104.179.119 data disable

掛載資料盤

常規情況下,在購買阿里雲主機搭建 Elasticsearch 搜尋叢集時都會購買一個單獨的資料盤來儲存索引資料,因此首先需要將購買的資料盤進行掛載。詳細的掛載流程可用參考阿里的官方教程,下面只貼出用到的命令:

fdisk -l                                # 檢視可用資料盤
fdisk /dev/vdb                          # 輸入:n>>p>>enter>>enter>>wq
fdisk -l                                # 驗證資料盤
mkfs.ext3 /dev/vdb1                     # 格式化
cp /etc/fstab /etc/fstab.bak            # 備份 fstab 檔案
echo /dev/vdb1 /data ext3 defaults 0 0 >> /etc/fstab
mkdir /data                             # 建立資料目錄
mount /dev/vdb1 /data                   # 掛載資料盤到資料目錄
df -h                                   # 驗證掛載
複製程式碼

系統優化

1. 修改主機名以及 Hosts

按照角色修改主機的主機名,便於區分,同時為了便於節點間通訊,需要修改主機的 Hosts。

vi /etc/hostname   #修改主機名

vi /etc/hosts      #修改hosts

172.16.14.85       es-master01
172.16.14.86       es-master02
172.16.14.87       es-data01
複製程式碼

2. 建立ES使用者

由於 Elasticsearch 不允許也不推薦使用 root 使用者來執行,因此需要新建一個使用者來啟動 Elasticsearch。

adduser elastic    #建立elastic使用者
passwd elastic     #修改elastic密碼
複製程式碼

3. 建立ES資料日誌資料夾

將 Elasticsearch 的資料檔案和日誌目錄設定到資料盤。

cd /data/
mkdir elastic
cd elastic
mkdir data          #建立資料目錄
mkdir log           #建立日誌目錄
mkdir bak           #建立備份目錄
chown -R elatic /data/elastic/  #修改 /data/elastic/ 目錄擁有者為 elastic
複製程式碼

4. 優化檔案控制程式碼數以及使用者可用程式數

新版 Elasticsearch 要求其可用的檔案控制程式碼至少為 65536,同時要求其程式數限制至少為 2048,可用按照下面的指令進行修改。

分別對應以下兩個報錯資訊:

  1. max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536];
  2. max number of threads [1024] for user [es] is too low, increase to at least [2048]。
vim /etc/security/limits.conf

*     soft   nofile  655350
*     hard   nofile  655350
*     soft   nproc   4096
*     hard   nproc   8192
elastic soft memlock unlimited
elastic hard memlock unlimited
複製程式碼

5. 修改核心交換

為了避免不必要的磁碟和記憶體交換,影響效率,需要將 vm.swappiness 修改為 1。

此外需要修改最大虛擬記憶體 vm.max_map_count 防止啟動時報錯:max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]。

vim /etc/sysctl.conf

vm.swappiness = 1
vm.max_map_count = 655360

sysctl -p   # 立即生效
複製程式碼

6. 關閉swap

swapoff -a
複製程式碼

7. 重啟使得配置生效

reboot
複製程式碼

下載解壓檔案

下載 Java、Elasticsearch 和 Kibana 安裝包,並解壓到 /opt/soft/ 目錄,最後修改 elasticsearch-6.3.0 以及 kibana-6.3.0 的擁有者為 elastic

mkdir /opt/downloads/
mkdir /opt/soft/
cd /opt/downloads/

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.0.tar.gz
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.3.0-linux-x86_64.tar.gz
wget http://download.oracle.com/otn/java/jdk/8u162-b12/0da788060d494f5095bf8624735fa2f1/jdk-8u162-linux-x64.tar.gz

tar -zxvf elasticsearch-6.3.0.tar.gz -C /opt/soft/
tar -zxvf jdk-8u162-linux-x64.tar.gz -C /opt/soft/
tar -zxvf kibana-6.3.0-linux-x86_64.tar.gz -C /opt/soft/

chown -R elastic /opt/soft/elasticsearch-6.3.0/
chown -R elastic /opt/soft/kibana-6.3.0/
複製程式碼

配置 Java 執行環境

su elastic                   #切換到 elastic 使用者
vim ~/.bash_profile          #只修改 elastic 使用者自己的環境變數

export JAVA_HOME=/opt/soft/jdk1.8.0_162
export JRE_HOME=/opt/soft/jdk1.8.0_162/jre
export CLASSPATH=.:/opt/soft/jdk1.8.0_162/lib:/opt/soft/jdk1.8.0_162/jre/lib
export PATH=$PATH:/opt/soft/jdk1.8.0_162/bin:/opt/soft/jdk1.8.0_162/jre/bin
複製程式碼

配置 Elasticsearch 記憶體佔用

配置 jvm 最大堆和最小堆,一般為伺服器實體記憶體的一半,最大不超過 32g。

cd /opt/soft/elasticsearch-6.3.0/config/
vim jvm.options 

-Xms2g
-Xmx2g
複製程式碼

配置 Elasticsearch

按照下列模板修改 elasticsearch.yml

# ======================== Elasticsearch Configuration =========================
#
# ---------------------------------- Cluster -----------------------------------
#es 叢集名稱
cluster.name: es-cluster        

#當前節點名稱
node.name: es-mater01           

#配置角色為:主節點和資料節點
node.master: true
node.data: true

#配置資料路徑和日誌路徑
path.data: /data/elastic/data
path.logs: /data/elastic/log

#開啟記憶體鎖定
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
# ---------------------------------- Network -----------------------------------
#設定節點間通訊IP,這裡設定為0.0.0.0主要時兼顧內網節點間通訊,同時方便外網開發人員進行除錯
network.bind_host: 0.0.0.0

#設定9200通訊IP,一般設定為外網IP
network.publish_host: 39.104.186.15

#設定HTTP通訊埠
http.port: 9200

#設定HTTP開啟狀態
http.enabled: true

#設定執行跨域訪問
http.cors.enabled: true
http.cors.allow-origin: "*"
http.max_content_length: 500mb

# --------------------------------- Discovery ----------------------------------
#設定zen發現範圍,此處可用換為主機名:["es-master01", "es-master02", "es-data01"]
discovery.zen.ping.unicast.hosts: ["172.16.14.85", "172.16.14.86", "172.16.14.87"]

#discovery.zen.ping.multicast.enabled: false

discovery.zen.no_master_block: write
discovery.zen.fd.ping_timeout: 10s

#設定最小主節點個數,一般為:(master_node_count+1)/2
discovery.zen.minimum_master_nodes: 2

# ---------------------------------- Gateway -----------------------------------
#設定在有2個節點後進行資料恢復
gateway.recover_after_nodes: 2
gateway.expected_nodes: 3
gateway.recover_after_time: 1m

#
# ---------------------------------- Various -----------------------------------
#禁止萬用字元模式刪除索引
action.destructive_requires_name: true
#indices.cluster.send_refresh_mapping: false

indices.recovery.max_bytes_per_sec: 200mb
indices.memory.index_buffer_size: 20%

#script.inline: true
#script.indexed: true

#關閉xpack的安全校驗
xpack.security.enabled: false
複製程式碼

外掛推薦

下面推薦的前兩個外掛是 Chrome 外掛,便於訪問 ES,最後一個 ElasticHD 是 go 語言編寫的客戶端,一樣比較好用。

  1. ElasticSearch Query Builder
  2. ElasticSearch Head
  3. ElasticHD

使用 Kibana

除了其他外掛之外,可用使用官方的 kibana 檢視操作 Elasticsearch。修改 kibana.ymlelasticsearch.url:http://es-master01:9200 即可使用,更加詳細的配置可參考

總結

本文介紹了 CentOS 6.4 搭建 Elasticsearch 6.3 搜尋群集的全過程,後續會有相關文章介紹 Elasticsearch 的基本概念以及 Elasticsearch 6.3 的新特性,敬請期待。


Any Code,Code Any!

掃碼關注『AnyCode』,程式設計路上,一起前行。

CentOS 7.4 下搭建 Elasticsearch 6.3 搜尋群集

相關文章