最近在學習ES相關內容,爲了方便本身使用,在本地虛擬機上搭建了一個3節點的ES集羣,在搭建過程當中,遇到了許多坑,網上的資料也比較分散,因此詳細整理一下搭建過程發出來供參考。搭建過程當中,因爲是兩臺虛擬機,因此有一種很快速的辦法,搭建一臺,而後經過克隆虛擬機而後修改能夠迅速完成,可是爲了更熟悉整個過程,本過程是每臺虛擬機都逐一去操做。
CentOS6.9_64位兩臺
es-master:192.168.0.11
es-slave:192.168.0.12
注意:內存容許的狀況下,稍微給大一點內存,不然啓動會失敗,本地測試可使用1.5-2G內存,es-master上準備搭建兩個節點,因此內存最好給到2G以上.html
最新版ElasticSearch6.4.0
下載地址:https://artifacts.elastic.co/...前端
jdk-8u161-linux-x64.tar.gz
下載地址:http://download.oracle.com/ot...java
es-master包括兩個節點:elasticesearch-node1,elasticesearch-node3
es-slave包括一個節點:elasticesearch-node2node
(1)服務器192.168.0.11上操做:linux
[root@localhost ~]# hostname es-master [root@localhost ~]# vim /etc/sysconfig/network #修改如下內容: HOSTNAME=es-master #退出從新登陸 [root@localhost ~]# logout
(2)服務器192.168.0.12上操做:bootstrap
[root@localhost ~]# hostname es-slave [root@localhost ~]# vim /etc/sysconfig/network #修改如下內容: HOSTNAME=es-slave #退出從新登陸 [root@localhost ~]# logout
(3)爲了後續操做方便,分別關閉es-master和es-slave服務器的防火牆vim
[root@es-master ~]# service iptables stop [root@es-slave ~]# service iptables stop
注意:生產環境不能直接關防火牆,能夠添加防火牆規則,使得ES的tcp端口對遠程指定主機開放。瀏覽器
主機es-master上操做安全
[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 注意:若是沒有網絡,能夠手動下載,而後上傳便可。 [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上操做同上,略.服務器
[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
[root@es-master ~]# java -version java version "1.8.0_161" #輸出版本號,表示配置成功.
es-master上的操做以下:
[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
注意:因爲elasticsearch啓動的時候不能直接用root用戶啓動,因此須要建立普通用戶 [root@es-master local]# useradd elk [root@es-master local]# chown -R elk:elk elasticsearch-node1/ elasticsearch-node3/
[root@es-master local]# mkdir -pv /data/{elasticsearch1,elasticsearch3}/{data,logs} [root@es-master local]# chown -R elk:elk /data/{elasticsearch1,elasticsearch3}
[root@es-master local]# vim /etc/sysctl.conf #在配置文件最後面添加以下內容 vm.max_map_count=655360
解釋:max_map_count文件包含限制一個進程能夠擁有的VMA(虛擬內存區域)的數量。虛擬內存區域是一個連續的虛擬地址空間區域。
在進程的生命週期中,每當程序嘗試在內存中映射文件,連接到共享內存段,或者分配堆空間的時候,這些區域將被建立。
當進程達到了VMA上線但又只能釋放少許的內存給其餘的內核進程使用時,操做系統會拋出內存不足的錯誤。
#使修改以後的配置文件生效 [root@es-master local]# sysctl -p
#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
[root@es-master local]# cd elasticsearch-node1/config/ [root@es-master config]# vim jvm.options 修改以下兩個選項: -Xms512m #elasticsearch啓動時jvm所分配的初始堆內存大小 -Xmx512m #elasticsearch啓動以後容許jvm分配的最大堆內存大小,生產環境中可能須要調大 注意:若是內存足夠大,能夠不用修改,默認爲1G
[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"] #下面這個參數控制的是,一個節點須要看到的具備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
[root@es-master local]# cd elasticsearch-node3/config/ [root@es-master config]# vim jvm.options 修改以下兩個選項: -Xms512m -Xmx512m
[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 http.port: 9201 discovery.zen.ping.unicast.hosts: ["192.168.0.11","192.168.0.12"] discovery.zen.minimum_master_nodes: 2 bootstrap.memory_lock: false bootstrap.system_call_filter: false
至此,es-master上的配置操做完成。
es-slave上的操做以下:
[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/
[root@es-slave local]# useradd elk [root@es-slave local]# chown -R elk:elk elasticsearch-node2
[root@es-slave local]# mkdir -pv /data/elasticsearch2/{data,logs} [root@es-slave local]# chown -R elk:elk /data/elasticsearch2
[root@es-slave local]# vim /etc/sysctl.conf #在配置文件最後面添加以下內容 vm.max_map_count=655360 [root@es-slave local]# sysctl -p
[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
[root@es-slave local]# cd elasticsearch-node2/config/ [root@es-slave config]# vim jvm.options 修改以下兩個選項: -Xms512m -Xmx512m
[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"] discovery.zen.minimum_master_nodes: 2 bootstrap.memory_lock: false bootstrap.system_call_filter: false
至此es-slave上的elasticsearch節點配置完成。
[root@es-slave local]# su - elk [elk@es-slave ~]$ cd /usr/local/elasticsearch-node2/bin/ [elk@es-slave bin]$ ./elasticsearch -d 注意:-d參數表示之後臺進程啓動,默認狀況下會在控制檯輸出日誌。
[elk@es-slave bin]$ ps -ef| grep elasticsearch [elk@es-slave bin]$ lsof -i:9200 注意:日誌文件在elasticsearch.yml配置文件中所指定的目錄下
[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" }
[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
#查看進程,能夠看到有兩個節點的進程 [elk@es-master bin]$ ps -ef| grep elasticsearch [elk@es-master bin]$ lsof -i:9200 [elk@es-master bin]$ lsof -i:9300
[elk@es-master ~]$ curl 192.168.0.11:9200 [elk@es-master ~]$ curl 192.168.0.11:9300
下載地址:https://artifacts.elastic.co/downloads/kibana/kibana-6.4.0-linux-x86_64.tar.gz
[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
[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
[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
至此,就能夠愉快的開始ES的語法學習之旅了。
ES的語法學習可參考:https://www.elastic.co/guide/...。
目前es和kibana的bin目錄下未提供中止ES服務和kibana服務的腳本,可使用kill -9 pid來中止服務
[root@es-master bin]# ps -ef| grep elasticsearch | grep -v grep | awk '{print $2}' [root@es-master bin]# kill -9 pid[上一步所輸出的pid]
[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]
至此,全部內容整理完畢,歡迎評論轉發!
後續文章將更新在我的小站上,歡迎查看。