最近在學習es相關內容,為了方便自己使用,在本地虛擬機上搭建了一個3節點的es集群,在搭建過程中,遇到了許多坑,網上的資料也比較分散,所以詳細整理一下搭建過程發出來供參考。搭建過程中,由于是兩臺虛擬機,所以有一種很快速的辦法,搭建一臺,然后通過克隆虛擬機然后修改可以迅速完成,但是為了更熟悉整個過程,本過程是每臺虛擬機都逐一去操作。
一、軟件及環境準備
服務器環境
centos6.9_64位兩臺
es-master:192.168.0.11
es-slave:192.168.0.12
注意:內存允許的情況下,稍微給大一點內存,否則啟動會失敗,本地測試可以使用1.5-2g內存,es-master上準備搭建兩個節點,所以內存最好給到2g以上.
es軟件
最新版elasticsearch6.4.0
下載地址:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.0.tar.gz
jdk軟件
jdk-8u161-linux-x64.tar.gz
下載地址:http://download.oracle.com/errors/download-fail-1505220.html
環境規劃
es-master包括兩個節點:elasticesearch-node1,elasticesearch-node3
es-slave包括一個節點:elasticesearch-node2
修改服務器主機名稱,方便后續操作
(1)服務器192.168.0.11上操作:
1
2
3
4
5
6
|
[root @localhost ~]# hostname es-master [root @localhost ~]# vim /etc/sysconfig/network #修改以下內容: hostname=es-master #退出重新登錄 [root @localhost ~]# logout |
(2)服務器192.168.0.12上操作:
1
2
3
4
5
6
|
[root @localhost ~]# hostname es-slave [root @localhost ~]# vim /etc/sysconfig/network #修改以下內容: hostname=es-slave #退出重新登錄 [root @localhost ~]# logout |
(3)為了后續操作方便,分別關閉es-master和es-slave服務器的防火墻
1
2
|
[root @es -master ~]# service iptables stop [root @es -slave ~]# service iptables stop |
注意:生產環境不能直接關防火墻,可以添加防火墻規則,使得es的tcp端口對遠程指定主機開放。
二、jdk安裝配置
主機es-master上操作
下載,并解壓到指定目錄
1
2
3
|
[root @es -master ~]# mkdir -pv /home/software [root @es -master ~]# cd /home/software/ [root @es -master software]# wget http: //download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz |
注意:如果沒有網絡,可以手動下載,然后上傳即可。
1
2
|
[root @es -master software]# mkdir -pv /usr/local/java [root @es -master software]# tar xf jdk-8u181-linux-x64.tar.gz -c /usr/local/java |
主機es-slave上操作同上,略.
配置環境變量,es-master和es-slave上配置過程相同,如下
1
2
3
4
5
6
|
[root @es -master software]# vim /etc/profile #在末尾添加如下內容: java_home=/usr/local/java/jdk1. 8 .0_181 export path=$path:$java_home/bin #使環境變量生效 [root @es -master ~]# source /etc/profile |
測試是否安裝完成
1
2
3
|
[root @es -master ~]# java -version java version "1.8.0_161" #輸出版本號,表示配置成功. |
三、elasticsearch安裝及配置
es-master上的操作如下:
下載及解壓elasticsearch6.4.0
1
2
3
4
5
6
|
[root @es -master ~]# cd /home/software/ [root @es -master ~]# wget https: //artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.0.tar.gz [root @es -master software]# tar xf elasticsearch- 6.2 . 4 .tar.gz -c /usr/local/ [root @es -master local]# mv elasticsearch- 6.4 . 0 elasticsearch-node1/ #復制一份作為第二個es節點 [root @es -master local]# cp -r elasticsearch-node1/ elasticsearch-node3 |
創建elk用戶,并將elasticsearch-node1和elasticsearch-node3授權給elk
注意:由于elasticsearch啟動的時候不能直接用root用戶啟動,所以需要創建普通用戶
1
2
|
[root @es -master local]# useradd elk [root @es -master local]# chown -r elk:elk elasticsearch-node1/ elasticsearch-node3/ |
分別創建兩個elasticsearch節點的數據目錄和日志目錄
1
2
|
[root @es -master local]# mkdir -pv /data/{elasticsearch1,elasticsearch3}/{data,logs} [root @es -master local]# chown -r elk:elk /data/{elasticsearch1,elasticsearch3} |
修改操作系統的內核配置文件sysctl.conf
1
2
3
|
[root @es -master local]# vim /etc/sysctl.conf #在配置文件最后面添加如下內容 vm.max_map_count= 655360 |
解釋:max_map_count文件包含限制一個進程可以擁有的vma(虛擬內存區域)的數量。虛擬內存區域是一個連續的虛擬地址空間區域。
在進程的生命周期中,每當程序嘗試在內存中映射文件,鏈接到共享內存段,或者分配堆空間的時候,這些區域將被創建。
當進程達到了vma上線但又只能釋放少量的內存給其他的內核進程使用時,操作系統會拋出內存不足的錯誤。
1
2
|
#使修改之后的配置文件生效 [root @es -master local]# sysctl -p |
修改limits.conf文件
1
2
3
4
5
6
7
|
#limits.conf:用來保護系統的資源訪問,和sysctl.conf很像,但是limits.conf是針對于用戶,而sysctl.conf是針對于操作系統. [root @es -master local]# vim /etc/security/limits.conf #在文件末尾添加如下內容: elk soft nofile 65536 elk hard nofile 131072 elk soft nproc 4096 elk hard nproc 4096 |
修改elasticsearch-node1節點的配置文件jvm.options
1
2
|
[root @es -master local]# cd elasticsearch-node1/config/ [root @es -master config]# vim jvm.options |
修改如下兩個選項:
- -xms512m #elasticsearch啟動時jvm所分配的初始堆內存大小
- -xmx512m #elasticsearch啟動之后允許jvm分配的最大堆內存大小,生產環境中可能需要調大
注意:如果內存足夠大,可以不用修改,默認為1g
修改elasticsearch-node1節點的配置文件elasticsearch.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
[root @es -master local]# vim elasticsearch-node1/config/elasticsearch.yml #修改以下項 #表示集群標識,同一個集群中的多個節點使用相同的標識 cluster.name: elasticsearch #節點名稱 node.name: "es-node1" #數據存儲目錄 path.data: /data/elasticsearch1/data #日志目錄 path.logs: /data/elasticsearch1/logs #節點所綁定的ip地址,并且該節點會被通知到集群中的其他節點 network.host: 192.168 . 0.11 #綁定監聽的網絡接口,監聽傳入的請求,可以設置為ip地址或者主機名 network.bind_host: 192.168 . 0.11 #發布地址,用于通知集群中的其他節點,和其他節點通訊,不設置的話默認可以自動設置。必須是一個存在的ip地址 network.publish_host: 192.168 . 0.11 #對外提供服務的http端口,默認為 9200 http.port: 9200 #集群中主節點的初始列表,當主節點啟動時會使用這個列表進行非主節點的監測 discovery.zen.ping.unicast.hosts: [ "192.168.0.11" , "192.168.0.12" , "192.168.0.11:9301" ] #下面這個參數控制的是,一個節點需要看到的具有master節點資格的最小數量,然后才能在集群中做操作。官方推薦值是(n/ 2 )+ 1 ; #其中n是具有master資格的節點的數量(我們的情況是 3 ,因此這個參數設置為 2 ) #但是:但對于只有 2 個節點的情況,設置為 2 就有些問題了,一個節點down掉后,肯定連不上 2 臺服務器了,這點需要注意 discovery.zen.minimum_master_nodes: 2 #es默認開啟了內存地址鎖定,為了避免內存交換提高性能。但是centos6不支持seccomp功能,啟動會報錯,所以需要將其設置為 false bootstrap.memory_lock: false bootstrap.system_call_filter: false |
修改elasticsearch-node3節點的配置文件jvm.options
1
2
|
[root @es -master local]# cd elasticsearch-node3/config/ [root @es -master config]# vim jvm.options |
修改如下兩個選項:
- -xms512m
- -xmx512m
修改elasticsearch-node3節點的配置文件elasticsearch.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[root @es -master local]# vim elasticsearch-node3/config/elasticsearch.yml #修改以下項 cluster.name: elasticsearch node.name: "es-node3" path.data: /data/elasticsearch3/data path.logs: /data/elasticsearch3/logs network.host: 192.168 . 0.11 network.bind_host: 192.168 . 0.11 network.publish_host: 192.168 . 0.11 #節點間的通信端口,接收單值或者一個范圍。如果指定一個范圍,該節點將會綁定范圍的第一個可用頂點 transport.tcp.port: 9301 http.port: 9201 discovery.zen.ping.unicast.hosts: [ "192.168.0.11" , "192.168.0.12" , "192.168.0.11:9301" ] discovery.zen.minimum_master_nodes: 2 bootstrap.memory_lock: false bootstrap.system_call_filter: false |
至此,es-master上的配置操作完成。
es-slave上的操作如下:
上傳elasticsearch的安裝包,然后解壓重命名,可以直接從es-master上遠程拉取
1
2
3
|
[root @es -slave ~]# cd /home/software/ [root @es -slave software]# scp 192.168 . 0.11 :/home/software/elasticsearch- 6.4 . 0 .tar.gz ./ [root @es -slave software]# tar xf elasticsearch- 6.4 . 0 .tar.gz -c /usr/local/ |
創建elk用戶,并將elasticsearch-node2授權給elk
1
2
|
[root @es -slave local]# useradd elk [root @es -slave local]# chown -r elk:elk elasticsearch-node2 |
創建數據目錄,并將目錄的屬主和屬組改為elk用戶,elk組
1
2
|
[root @es -slave local]# mkdir -pv /data/elasticsearch2/{data,logs} [root @es -slave local]# chown -r elk:elk /data/elasticsearch2 |
修改操作系統的內核配置文件sysctl.conf
1
2
3
4
|
[root @es -slave local]# vim /etc/sysctl.conf #在配置文件最后面添加如下內容 vm.max_map_count= 655360 [root @es -slave local]# sysctl -p |
修改limits.conf文件,可以直接從es-master的配置中復制過來
1
2
3
4
5
6
|
[root @es -master local]# vim /etc/security/limits.conf #在文件末尾添加如下內容: elk soft nofile 65536 elk hard nofile 131072 elk soft nproc 4096 elk hard nproc 4096 |
修改elasticsearch-node2節點的配置文件jvm.options
1
2
|
[root @es -slave local]# cd elasticsearch-node2/config/ [root @es -slave config]# vim jvm.options |
修改如下兩個選項:
- -xms512m
- -xmx512m
修改elasticsearch-node2節點的配置文件elasticsearch.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root @es -slave local]# vim elasticsearch-node2/config/elasticsearch.yml #修改以下項 cluster.name: elasticsearch node.name: "es-node2" path.data: /data/elasticsearch2/data path.logs: /data/elasticsearch2/logs network.host: 192.168 . 0.12 network.bind_host: 192.168 . 0.12 network.publish_host: 192.168 . 0.12 discovery.zen.ping.unicast.hosts: [ "192.168.0.11" , "192.168.0.12" , "192.168.0.11:9301" ] discovery.zen.minimum_master_nodes: 2 bootstrap.memory_lock: false bootstrap.system_call_filter: false |
至此es-slave上的elasticsearch節點配置完成。
四、啟動es集群
首先切換為elk用戶,并啟動es-slave服務器上的elasticsearch-node2節點
1
2
3
|
[root @es -slave local]# su - elk [elk @es -slave ~]$ cd /usr/local/elasticsearch-node2/bin/ [elk @es -slave bin]$ ./elasticsearch -d |
注意:-d參數表示以后臺進程啟動,默認情況下會在控制臺輸出日志。
查看是否啟動成功,可以通過查看進程及端口來確定是否啟動成功,如果啟動失敗,可以通過查看日志來排查原因
1
2
|
[elk @es -slave bin]$ ps -ef| grep elasticsearch [elk @es -slave bin]$ lsof -i: 9200 |
注意:日志文件在elasticsearch.yml配置文件中所指定的目錄下
測試是否可以訪問
1
2
3
4
5
6
7
8
9
10
11
|
[elk @es -slave ~]$ curl 192.168 . 0.12 : 9200 如果返回類似如下結果,表示啟動正常: { "name" : "es-node2" , "cluster_name" : "elasticsearch" , "cluster_uuid" : "gczyfnkrte2ybeqmlg7-nw" , "version" : { ... }, "tagline" : "you know, for search" } |
切換到es-master服務器上,然后切換到elk身份,分別啟動elasticsearch-node1節點和elasticsearch-node3節點
1
2
3
4
5
|
[root @es -master ~]# su - elk [elk @es -master ~]$ cd /usr/local/elasticsearch-node1/bin/ [elk @es -master bin]$ ./elasticsearch -d [elk @es -master bin]$ cd /usr/local/elasticsearch-node3/bin/ [elk @es -master bin]$ ./elasticsearch -d |
查看進程及端口,確定是否啟動成功
1
2
3
4
5
6
7
|
#查看進程,可以看到有兩個節點的進程 [elk @es -master bin]$ ps -ef| grep elasticsearch [elk @es -master bin]$ lsof -i: 9200 [elk @es -master bin]$ lsof -i: 9300 使用curl測試節點是否可以正常訪問,方法同上,需要驗證elasticsearch-node1和elasticsearch-node3節點 [elk @es -master ~]$ curl 192.168 . 0.11 : 9200 [elk @es -master ~]$ curl 192.168 . 0.11 : 9300 |
驗證完畢之后,es集群就啟動完畢。
五、安裝及配置es前端圖形化操作工具
下載kibana,并上傳到es-master服務器上
下載地址:https://artifacts.elastic.co/downloads/kibana/kibana-6.4.0-linux-x86_64.tar.gz
解壓,重命名
1
2
3
4
|
[root @es -master software]# wget https: //artifacts.elastic.co/downloads/kibana/kibana-6.4.0-linux-x86_64.tar.gz [root @es -master software]# tar xf kibana- 6.4 . 0 -linux-x86_64.tar.gz -c /usr/local [root @es -master software]# cd /usr/local [root @es -master local]# mv kibana- 6.4 . 0 -linux-x86_64 kibana- 6.4 . 0 |
修改kibana的配置文件kibana.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root @es -master local]# cd kibana- 6.4 . 0 /config [root @es -master config]# vim kibana.yml #修改如下內容: #對外服務監聽端口 server.port: 5601 #綁定可以訪問 5601 端口服務的ip地址, 0.0 . 0.0 表示任何地址在沒有防火墻限制的情況下都可以訪問,生產環境別這樣設置,不安全。 server.host: "0.0.0.0" #默認值為主機名稱,表示kibana實例綁定的主機,可以是ip地址或者主機名稱. server.name: "es-master" #用來處理es請求的服務url elasticsearch.url: "http://192.168.0.11:9200" #用來控制證書的認證,可選的值為full,none,certificate。此處由于沒有證書,所以設置為 null ,否則啟動會提示錯誤. elasticsearch.ssl.verificationmode: none |
啟動kibana
1
2
3
4
5
|
[root @es -master config]# cd /usr/local/kibana- 6.4 . 0 /bin #以后臺進程啟動,kibana默認是控制臺方式啟動,ctrl+c就會退出 [root @es -master bin]# nohup ./kibana & #查看日志是否啟動正常 [root @es -master bin]# tail -f nohup.out |
如果啟動正常,在瀏覽器端訪問http://192.168.0.11:5601,即可看到圖形化操作工具
至此,就可以愉快的開始es的語法學習之旅了。
es的語法學習可參考:https://www.elastic.co/guide/cn/elasticsearch/guide/current/_tutorial_conclusion.html
六、elasticsearch和kibana的停止
目前es和kibana的bin目錄下未提供停止es服務和kibana服務的腳本,可以使用kill -9 pid來停止服務
停止es服務
1
2
|
[root @es -master bin]# ps -ef| grep elasticsearch | grep -v grep | awk '{print $2}' [root @es -master bin]# kill - 9 pid[上一步所輸出的pid] |
停止kibana服務
1
2
|
[root @es -master bin]# ps -ef| grep node | grep -v grep | grep -v elasticsearch | awk '{print $2}' [root @es -master bin]# kill - 9 pid[上一步所輸出的pid] |
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://segmentfault.com/a/1190000016326389