上個月 13 號,Elasticsearch 6.3 如約而至,該版本和以往版本相比,新增了不少新功能,其中最使人矚目的莫過於集成了 X-Pack 模塊
。而在最新的 X-Pack 中 Elasticsearch SQL 已經可用
,雖然還處於實驗階段,可是相對於編寫複雜的 DSL 查詢語句,SQL 語句仍是更加親民,更易於上手。html
想體驗新版 Elasticsearch 6.3 的新功能,固然要先搭建一個新版本的搜索集羣,本文將逐步介紹:如何在阿里雲的三臺 CentOS 7.4 雲主機上搭建 Elasticsearch 6.3 搜索集羣
。java
目前有三臺雲主機,爲了實現高可用,則至少須要 2 個主節點
(Master Node),固然因爲只有三臺主機,因此每一臺都須要充當數據節點
(Data Node)。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 搜索集羣時都會購買一個單獨的數據盤來存儲索引數據,所以首先須要將購買的數據盤進行掛載。詳細的掛載流程可用參考阿里的官方教程,下面只貼出用到的命令:linux
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 # 驗證掛載
複製代碼
按照角色修改主機的主機名,便於區分,同時爲了便於節點間通訊,須要修改主機的 Hosts。git
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
複製代碼
因爲 Elasticsearch 不容許也不推薦使用 root 用戶來運行
,所以須要新建一個用戶來啓動 Elasticsearch。github
adduser elastic #建立elastic用戶
passwd elastic #修改elastic密碼
複製代碼
將 Elasticsearch 的數據文件和日誌目錄設置到數據盤。web
cd /data/
mkdir elastic
cd elastic
mkdir data #建立數據目錄
mkdir log #建立日誌目錄
mkdir bak #建立備份目錄
chown -R elatic /data/elastic/ #修改 /data/elastic/ 目錄擁有者爲 elastic
複製代碼
新版 Elasticsearch 要求其可用的文件句柄至少爲 65536,同時要求其進程數限制至少爲 2048,可用按照下面的指令進行修改。chrome
分別對應如下兩個報錯信息:編程
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
複製代碼
爲了不沒必要要的磁盤和內存交換,影響效率,須要將 vm.swappiness
修改成 1。bootstrap
此外須要修改最大虛擬內存 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 # 當即生效
複製代碼
swapoff -a
複製代碼
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/
複製代碼
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
複製代碼
配置 jvm 最大堆和最小堆,通常爲服務器物理內存的一半,最大不超過 32g。
cd /opt/soft/elasticsearch-6.3.0/config/
vim jvm.options
-Xms2g
-Xmx2g
複製代碼
按照下列模板修改 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 查看操做 Elasticsearch。修改 kibana.yml
中 elasticsearch.url:http://es-master01:9200
便可使用,更加詳細的配置可參考。
本文介紹了 CentOS 6.4 搭建 Elasticsearch 6.3 搜索羣集的全過程,後續會有相關文章介紹 Elasticsearch 的基本概念以及 Elasticsearch 6.3 的新特性,敬請期待。
Any Code,Code Any!
掃碼關注『AnyCode』,編程路上,一塊兒前行。