1.簡介
首先引用 Elasticsearch (下文簡稱 ES)官網的一段描述:
Elasticsearch 是一個分布式、RESTful 風格的搜索和數據分析引擎,能夠解決不斷涌現出的各種用例。 作為 Elastic Stack 的核心,它集中存儲您的數據,幫助您發現意料之中以及意料之外的情況。
本文主要介紹 Elasticsearch 集群的搭建。通過在一台服務器上創建 3 個 ES 實例來創建一個建議的 ES 集群。
Elasticsearch/ES
官方的Elasticsearch Reference 提供了不同版本的文檔連接,真是贊!
如果英文的不想看,還提供了中文版的 Elasticsearch 2.x: 權威指南,版本不是最新的,但是了解基本概念也是有幫助的。
Elasticsearch 7.x 包里自包含了 OpenJDK 的包。如果你想要使用你自己配置好的 Java 版本,需要設置 JAVA_HOME
環境變量 —— 參考
官方文檔 Set up Elasticsearch
有各個 OS 的安裝指導,頁面 Installing Elasticsearch 中提供了多種安裝包對應的指導鏈接!
本文選擇綠色安裝包的的方式(tar.gz
)安裝。
由於實驗機器有限,可以在同一台機器上模擬出 3 個節點,安裝 ES 集群
2.環境
1>三台真實服務器:
1.物理cpu數:主板上實際插入的cpu數量,可以數不重復的 physical id 有幾個(physical id) $ cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l 2 2.cpu核數:單塊CPU上面能處理數據的芯片組的數量,如雙核、四核等 (cpu cores) cat /proc/cpuinfo| grep "cpu cores"| uniq 3.邏輯cpu數:簡單來說,它可使處理器中的1顆內核,如2顆內核那樣在操作系統中發揮作用。 $ cat /proc/cpuinfo| grep "cpu cores"| uniq cpu cores : 8 4.查看cpu信息(型號) $ cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 32 Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz 5.查看服務器版本號 $ more /etc/redhat-release CentOS Linux release 7.6.1810 (Core)
2>ES版本:elasticsearch-7.9.2-linux-x86_64.tar
3>kibana版本:kibana-7.9.2-linux-x86_64.tar
因是實體機器,所以這里的三台機器用1,2,3機器表示
3.ES下載
鏈接:https://pan.baidu.com/s/1K7XGf0ewWeabIcHBHnCGAw 提取碼:y2my
4.ES集群安裝
4.1調整linux系數相關參數設置
注意:
ES最新版本需要jdk11,需要修改環境變量
所有版本不能用root用戶跑ES
改變其權限
chown 用戶:用戶組 elasticsearch-7.9.2-linux-x86_64.tar.gz
防火牆狀態
l firewall-cmd --state 運行則關閉防火牆 # 臨時關閉防火牆 systemctl stop firewalld.service # 永久關閉防火牆` systemctl disable firewalld
selinux狀態
查看selinux命令 /usr/sbin/sestatus 臨時關閉 setenforce 0 永久關閉 vim /etc/selinux/config 將SELINUX=enforcing改為SELINUX=disabled,保存后退出
4.1.1修改最大文件數和鎖內存限制以及用戶最大線程數
打開文件vi /etc/security/limits.d/20-nproc.conf was soft nproc 20000 * soft nproc 4096 root soft nproc unlimited 修改完保存即可
同時修改
vi /etc/security/limits.conf # End of file * soft nofile 300000 * hard nofile 300000 * soft nofile 65536 * hard nofile 65536 * hard memlock unlimited * soft memlock unlimited
查看修改完結果
# ulimit -a
4.1.2更改一個進城能擁有的最大內存區域限制,編輯swappiness禁用交換分區
vi /etc/sysctl.conf vm.max_map_count=262144 vm.swappiness=1 # sysctl -p vm.max_map_count = 262144 vm.swappiness = 1
4.1.3解壓安裝包
tar -zxvf elasticsearch-7.9.2-linux-x86_64.tar.gz
4.1.4進入文件,改其env
vim /data/disk04/es/elasticsearch-7.9.2/bin/elasticsearch-env 在文件第一行加入下面變量 JAVA_HOME="/data/disk04/es/elasticsearch-7.9.2/jdk/"
4.1.5修改垃圾回收器需要轉換(不轉換不會報錯,但是會有警告)
vim /data/disk04/es/elasticsearch-7.9.2/config/jvm.options
改之前
改之后
以 – 開頭的行被視為jvm版本應用的選項 -Xmx2g 以n:-開頭的行被視為依賴數字指明的JVM版本 8:- -Xmx2g 以n-n開始的行是指明要求了JVM的版本 8-13
4.1.6修改 yml文件(以下標明機器與節點只是例子,不應用本次實驗)
vi /data/disk04/es/elasticsearch-7.9.2/config/elasticsearch.yml ******集群名********** #集群的名字,每個節點的擁有同一個名字才能認為是同一個集群 #cluster.name: my-application cluster.name: es-cluster *****節點名字********** #節點的名字,保證唯一,每個節點不同,需要修改 #node.name: node-1 node.name: node-1(第一個節點) node.name: node-2 (第二個節點文件) node.name: node-3(第三個節點文件) ******自帶屬性 ******** #自定義的屬性,這是官方文檔中自帶的 # Add custom attributes to the node: node.attr.rack: r1 *********網絡****** *** #設置成 本機 或 0.0.0.0即可 http.cors.enabled: true http.cors.allow-origin: "*" http.port: 9200 transport.tcp.port: 9300 ******日志數據存放 ********* (目錄需要有普通用戶的權限) #根據自己的習慣配置data文件夾 #path.data: /path/to/data path.data: /app/elasticsearch-7.9.2/data # Path to log files: #path.logs: /path/to/logs path.logs: /app/elasticsearch-7.9.2/logs/logs *******內存 ************** #開啟啟動es時鎖定內存 # Lock the memory on startup: # #bootstrap.memory_lock: true bootstrap.memory_lock: true ***********初始列表********** 第一個節點 discovery.seed_hosts: ["10.135.139.11:9200", "10.135.139.12:9200", "10.135.139.13:9200"] cluster.initial_master_nodes: ["es-bd1701"] client.transport.ping_timeout: 60s 第二個節點 discovery.seed_hosts: ["10.135.139.11:9200", "10.135.139.12:9200", "10.135.139.13:9200"] cluster.initial_master_nodes: ["es-bd1702"] client.transport.ping_timeout: 60s 第三個節點 discovery.seed_hosts: ["10.135.139.11:9200", "10.135.139.12:9200", "10.135.139.13:9200"] cluster.initial_master_nodes: ["es-bd1703"] client.transport.ping_timeout: 60s **********跨第三方插件訪問 ************* http.cors.enabled: true http.cors.allow-origin: "*"
例如本次實驗的第一個節點
cluster.name: qqd-es-cluster node.name: 節點名 path.data: /data/disk04/es/es_data path.logs: /data/disk04/es/es_logs node.master: true network.host:節點IP node.data: true http.port: 9200 transport.tcp.port: 9300 transport.tcp.compress: true node.attr.rack: r1 transport.profiles.default.port: 9300 discovery.zen.minimum_master_nodes: 2 discovery.seed_hosts: ["IP1:節點1", "IP2:節點2", "IP3:節點3"] bootstrap.memory_lock: false bootstrap.system_call_filter: false cluster.initial_master_nodes: ["節點1", "節點2", "節點3"] gateway.recover_after_nodes: 3 http.cors.enabled: true http.cors.allow-origin: "*"
4.1.7配置/etc/hosts
節點1ip 節點1名稱 節點2ip 節點2名稱 節點3ip 節點3名稱
4.1.8配置環境變量
vim /etc/profile #es環境變量 export ES_HOME=/data/disk04/es/elasticsearch-7.9.2 export PASH=$ES_HOME/bin:$PATH
source /etc/profile
4.1.8修改jvm(最好不要超過機器內存的一半或者32以下)
vi /data/disk04/es/elasticsearch-7.9.2/config/jvm.options -Xms31g -Xmx31g
4.1.8啟動es集群(可能會需要點時間)
/data/disk04/es/elasticsearch-7.9.2/bin/elasticsearch
4.1.9查看es集群(*號為主節點)
http://ip:9200/_cat/nodes?pretty
4.1.10查看es節點
http://ip:9200/_cat/nodes?pretty
集群的狀態(status):red紅表示集群不可用,有故障。yellow黃表示集群不可靠但可用,一般單節點時就是此狀態。green正常狀態,表示集群一切正常。
節點數(node.total):節點數,這里是3,表示該集群有三個節點。
數據節點數(node.data):存儲數據的節點數,這里是3。數據節點在Elasticsearch概念介紹有。
分片數(shards : 表示我們把數據分成多少塊存儲。
主分片數(pri):primary shards,實際上是分片數的兩倍,因為有一個副本,如果有兩個副本,這里的數量應該是分片數的三倍,這個會跟后面的索引分片數對應起來,這里只是個總數。
激活的分片百分比(active_shards_percent):這里可以理解為加載的數據分片數,只有加載所有的分片數,集群才算正常啟動,在啟動的過程中,如果我們不斷刷新這個頁面,我們會發現這個百分比會不斷加大。