上個月 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,可用按照下面的指令進行修改。
分別對應以下兩個報錯資訊:
- max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536];
- 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 語言編寫的客戶端,一樣比較好用。
使用 Kibana
除了其他外掛之外,可用使用官方的 kibana 檢視操作 Elasticsearch。修改 kibana.yml
中 elasticsearch.url:http://es-master01:9200
即可使用,更加詳細的配置可參考。
總結
本文介紹了 CentOS 6.4 搭建 Elasticsearch 6.3 搜尋群集的全過程,後續會有相關文章介紹 Elasticsearch 的基本概念以及 Elasticsearch 6.3 的新特性,敬請期待。
Any Code,Code Any!
掃碼關注『AnyCode』,程式設計路上,一起前行。