Elasticsearch是一個分散式搜尋服務,提供Restful API,底層基於Lucene,採用多shard的方式保證資料安全,並且提供自動resharding的功能,github等大型的站點也都採用Elasticsearch作為其搜尋服務。廢話在此就不多贅述了,下面記錄下CentOS7下Elasticsearch叢集部署過程:
1)基礎資訊
elk-es01.kevin.cn 192.168.10.44 elk-es02.kevin.cn 192.168.10.45 elk-es03.kevin.cn 192.168.10.46 下面操作在三個節點機上都要操作 [root@elk-es01 ~]# systemctl stop firewalld.service [root@elk-es01 ~]# systemctl disable firewalld.service [root@elk-es01 ~]# firewall-cmd --state not running [root@elk-es01 ~]# setenforce 0 setenforce: SELinux is disabled [root@elk-es01 ~]# getenforce Disabled [root@elk-es01 ~]# vim /etc/sysconfig/selinux ...... SELINUX=disabled [root@elk-es01 ~]# cat /etc/hosts ..... 192.168.10.44 elk-es01.kevin.cn 192.168.10.45 elk-es02.kevin.cn 192.168.10.46 elk-es03.kevin.cn [root@elk-es01 ~]# /usr/sbin/ntpdate ntp1.aliyun.com
2)安裝java8環境,官方建議5.4版本最至少Java 8或以上(三個節點機都要操作)
[root@elk-es01 ~]# cd /usr/local/src/ [root@elk-es01 src]# ll jdk-8u131-linux-x64_.rpm -rw-r--r-- 1 root root 169983496 Nov 19 2017 jdk-8u131-linux-x64_.rpm [root@elk-es01 src]# rpm -ivh jdk-8u131-linux-x64_.rpm [root@elk-es01 src]# java -version java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8.0_131-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
3)安裝elasticsearch(三個節點機都要操作)
官方下載地址:https://www.elastic.co/downloads/past-releases 這裡選擇5.6.9版本 [root@elk-es01 src]# pwd /usr/local/src [root@elk-es01 src]# ll /usr/local/src/elasticsearch-5.6.9.rpm -rw-r--r-- 1 root root 33701914 May 28 09:54 /usr/local/src/elasticsearch-5.6.9.rpm [root@elk-es01 src]# rpm -ivh elasticsearch-5.6.9.rpm --force elasticsearch叢集配置 [root@elk-es01 src]# cat /etc/elasticsearch/elasticsearch.yml |grep -v "#" cluster.name: kevin-elk #叢集名稱,三個節點的叢集名稱配置要一樣 node.name: elk-es01.kevin.cn #叢集節點名稱,一般為本節點主機名。注意這個要是能ping通的,即在各節點的/etc/hosts裡繫結。 path.data: /data/es-data #叢集資料存放目錄 path.logs: /var/log/elasticsearch #日誌路徑 network.host: 192.168.10.44 #服務繫結的網路地址,一般填寫本節點ip;也可以填寫0.0.0.0 http.port: 9200 #服務接收請求的埠號 discovery.zen.ping.unicast.hosts: ["192.168.10.44", "192.168.10.45", "192.168.10.46"] #新增叢集中的主機地址,會自動發現並自動選擇master主節點 另外兩個節點的elasticsearch.yml檔案配置,如上相似,只需修改節點名和地址即可。 [root@elk-es01 src]# mkdir -p /data/es-data [root@elk-es01 src]# chown -R elasticsearch.elasticsearch /data/es-data #這一步授權不能忘記,否則下面的es伺服器啟動會失敗! 啟動elasticsearch [root@elk-es01 src]# systemctl daemon-reload [root@elk-es01 src]# systemctl start elasticsearch [root@elk-es01 src]# systemctl status elasticsearch [root@elk-es01 src]# lsof -i:9200 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 20061 elasticsearch 195u IPv6 1940586 0t0 TCP elk-es01.kevin.cn:wap-wsp (LISTEN)
4)檢視叢集資訊(如下操作在任意一臺節點機上都可操作)
注意:Elasticsearch 5.x版本不再支援相關外掛,比如elasticsearch-head,解釋可以訪問官網,實在需要,可以獨立執行(此處跳過)。 a)查詢叢集狀態方法 [root@elk-es01 src]# curl -XGET 'http://192.168.10.44:9200/_cat/nodes' 192.168.10.44 8 37 0 0.00 0.01 0.05 mdi - elk-es01.kevin.cn 192.168.10.46 20 36 0 0.00 0.01 0.05 mdi - elk-es03.kevin.cn 192.168.10.45 14 36 0 0.00 0.01 0.05 mdi * elk-es02.kevin.cn #帶*號表示該節點是master主節點 後面新增 ?v ,表示詳細顯示 [root@elk-es01 src]# curl -XGET 'http://192.168.10.44:9200/_cat/nodes?v' ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name 192.168.10.44 9 37 0 0.00 0.01 0.05 mdi - elk-es01.kevin.cn 192.168.10.46 20 36 0 0.00 0.01 0.05 mdi - elk-es03.kevin.cn 192.168.10.45 16 36 0 0.00 0.01 0.05 mdi * elk-es02.kevin.cn b)查詢叢集狀態方法 [root@elk-es01 src]# curl -XGET 'http://192.168.10.44:9200/_cluster/state/nodes?pretty' { "cluster_name" : "kevin-elk", "nodes" : { "8xvAOooeQlK1cilfHGTdHw" : { "name" : "elk-es01.kevin.cn", "ephemeral_id" : "9MeQir6KQ-aG0_nlZnq87g", "transport_address" : "192.168.10.44:9300", "attributes" : { } }, "Uq94w9gHRR6ewtI4SoXC2Q" : { "name" : "elk-es03.kevin.cn", "ephemeral_id" : "PLZfo1q9TzyJ61v2v4-5aA", "transport_address" : "192.168.10.46:9300", "attributes" : { } }, "NOM0bFmvRDSJDLbJzRsKEQ" : { "name" : "elk-es02.kevin.cn", "ephemeral_id" : "VnhtQtjrT4eL3P4C3cY6uA", "transport_address" : "192.168.10.45:9300", "attributes" : { } } } } c)查詢叢集中的master [root@elk-es01 src]# curl -XGET 'http://192.168.10.44:9200/_cluster/state/master_node?pretty' { "cluster_name" : "kevin-elk", "master_node" : "NOM0bFmvRDSJDLbJzRsKEQ" } 或者 [root@elk-es01 src]# curl -XGET 'http://192.168.10.44:9200/_cat/master?v' id host ip node NOM0bFmvRDSJDLbJzRsKEQ 192.168.10.45 192.168.10.45 elk-es02.kevin.cn d)查詢叢集的健康狀態(一共三種狀態:green、yellow,red;其中green表示健康。) [root@elk-es01 src]# curl -XGET 'http://192.168.10.44:9200/_cat/health?v' epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent 1527489534 14:38:54 kevin-elk green 3 3 2 1 0 0 0 0 - 100.0% 或者 [root@elk-es01 src]# curl -XGET 'http://192.168.10.44:9200/_cluster/health?pretty' { "cluster_name" : "kevin-elk", "status" : "green", "timed_out" : false, "number_of_nodes" : 3, "number_of_data_nodes" : 3, "active_primary_shards" : 1, "active_shards" : 2, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 }
=====================下面貼一個之前線上es叢集服務追加節點的操作記錄======================
之前線上的一個圖片搜尋業務使用了elasticsearch叢集服務, 叢集一開始是3個節點, 後來隨著業務量增加, 需要再追加一臺es節點到這個叢集中去. 以下是操作記錄: 在追加的那臺es節點叢集上擦著: 1)安裝jdk和elasticsearch jdk-8u5-linux-x64.rpm下載地址: https://pan.baidu.com/s/1bpxtX5X (提取密碼:df6s) elasticsearch-5.5.0.rpm下載地址: https://pan.baidu.com/s/1mibwWeG (提取密碼:vtm2) [root@qd-vpc-op-es04 ~]# cd tools/ [root@qd-vpc-op-es04 tools]# ls elasticsearch-5.5.0.rpm jdk-8u5-linux-x64.rpm [root@qd-vpc-op-es04 tools]# rpm -ivh elasticsearch-5.5.0.rpm [root@qd-vpc-op-es04 tools]# rpm -ivh jdk-8u5-linux-x64.rpm [root@qd-vpc-op-es04 tools]# java -version java version "1.8.0_05" Java(TM) SE Runtime Environment (build 1.8.0_05-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode) 2)配置elasticsearch [root@qd-vpc-op-es04 ~]# cd /etc/elasticsearch/ [root@qd-vpc-op-es04 elasticsearch]# ls elasticsearch.yml elasticsearch.yml.bak jvm.options log4j2.properties nohup.out scripts [root@qd-vpc-op-es04 elasticsearch]# cat elasticsearch.yml|grep -v "#" //叢集中每個節點的配置內容都基本一致 cluster.name: image_search //叢集名稱 node.name: image_search_node_4 //叢集中本節點的節點名稱,這裡定義即可 path.data: /data/es/data //服務目錄路徑 path.logs: /data/es/logs //服務日誌路徑 discovery.zen.ping.unicast.hosts: ["172.16.50.247","172.16.50.249","172.16.50.254","172.16.50.16"] //這裡是各節點的ip地址 network.host: 0.0.0.0 //服務繫結的網路地址 預設elasticsearch服務埠時9200 [root@qd-vpc-op-es04 elasticsearch]# cat elasticsearch.yml|grep 9200 #http.port: 9200 [root@qd-vpc-op-es04 elasticsearch]# systemctl start elasticsearch.service [root@qd-vpc-op-es04 elasticsearch]# systemctl restart elasticsearch.service [root@qd-vpc-op-es04 elasticsearch]# systemctl status elasticsearch.service [root@qd-vpc-op-es04 elasticsearch]# ps -ef|grep elasticsearch [root@qd-vpc-op-es04 elasticsearch]# lsof -i:9200 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 10998 elasticsearch 320u IPv4 39255 0t0 TCP *:wap-wsp (LISTEN) 檢查elasticsearch的健康狀態 [root@qd-vpc-op-es04 elasticsearch]# curl 'localhost:9200/_cat/indices?v' health status index uuid pri rep docs.count docs.deleted store.size pri.store.size green open video_filter Bx7He6ZtTEWuRBqXYC6gRw 5 1 458013 0 4.1gb 2gb green open recommend_history_image svYo_Do4SM6wUiv6taUWug 5 1 2865902 0 24.9gb 12.4gb green open recommend_history_gif rhN3MDN2TbuYILqEDksQSg 5 1 265731 0 2.4gb 1.2gb green open post_images TMsMsMEoR5Sdb7UEQJsR5Q 5 1 48724932 0 407.3gb 203.9gb green open review_images_v2 qzqnknpgTniU4rCsvXzs0w 5 1 50375955 0 61.6gb 30.9gb green open review_images rWC4WlfMS8aGe-GOkTauZg 5 1 51810877 0 439.3gb 219.7gb green open sensitive_images KxSrjvXdSz-y8YcqwBMsZA 5 1 13393 0 128.1mb 64mb green open post_images_v2 FDphBV4-QuKVoD4_G3vRtA 5 1 49340491 0 55.8gb 27.8gb 從上面的命令結果中可以看出,本節點已經成功加入到名為image_search的elasticsearch叢集中了,green表示節點狀態很健康,資料也已經在同步中了。 3)在程式碼中更新elasticsearch的配置 通知開發同事,在程式碼中增加新增elasticsearch節點的配置,上線更新後,到新節點上檢視elasticsearch日誌是否有資訊寫入: [root@qd-vpc-op-es04 ~]# cd /data/es/logs/ [root@qd-vpc-op-es04 ~]# chown -R elasticsearch.elasticsearch /data/es [root@qd-vpc-op-es04 logs]# ls image_search_deprecation.log image_search_index_indexing_slowlog.log image_search_index_search_slowlog.log image_search.log ======特別注意======= 如果往elasticsearch叢集中新增一個節點,做法如下: 1)在新節點上安裝jdk和elasticsearch服務,配置elasticsearch.yml檔案了,啟動elasticsearch服務 2)在叢集中其他節點上配置elasticsearch.yml檔案,不需要啟動elasticsearch服務 3)在新節點上執行curl 'localhost:9200/_cat/indices?v'命令,檢視健康狀態以及資料同步情況 4)在程式碼中增加新增elasticsearch節點的配置,上線更新後,檢視新增節點的elasticsearch日誌是否有資訊寫入 ============================================================== 順便貼一下之前其他三個es節點的elasticsearch.yml檔案配置: [root@qd-vpc-op-es01 ~]# cat /etc/elasticsearch/elasticsearch.yml |grep -v "#" cluster.name: image_search node.name: image_search_node_1 path.data: /data/es/data path.logs: /data/es/logs discovery.zen.ping.unicast.hosts: ["172.16.50.16","172.16.50.247","172.16.50.249","172.16.50.254"] network.host: 0.0.0.0 [root@qd-vpc-op-es02 ~]# cat /etc/elasticsearch/elasticsearch.yml |grep -v "#" cluster.name: image_search node.name: image_search_node_2 path.data: /data/es/data path.logs: /data/es/logs discovery.zen.ping.unicast.hosts: ["172.16.50.16","172.16.50.247","172.16.50.249","172.16.50.254"] network.host: 0.0.0.0 [root@qd-vpc-op-es03 ~]# cat /etc/elasticsearch/elasticsearch.yml|grep -v "#" cluster.name: image_search node.name: image_search_node_3 path.data: /data/es/data path.logs: /data/es/logs discovery.zen.ping.unicast.hosts: ["172.16.50.247","172.16.50.249","172.16.50.254","172.16.50.16"] network.host: 0.0.0.0