CentOS部署ElasticSearch7.6.1叢集
本文基於CentOS7.6,部署ElasticSearch7.6.1,詳細過程如下:
一、準備工作
1、準備機器
準備3臺機器,安裝CentOS7.6。ip計劃如下:
192.168.2.11 es-master
192.168.2.12 es-node1
192.168.2.13 es-node2
2、關閉防火牆
systemctl stop firewalld
systemctl disable firewalld
3、安裝JDK
本處安裝jdk-8u231-linux-x64,並配置好環境變數。
4、禁用SELINUX
vim /etc/selinux/config
將SELINUX設定為disabled:
SELINUX=disabled
5、修改主機名
#設定主機名
hostnamectl set-hostname es-node1
通過hostname命令檢視主機名。
6、配置IP對映
vim /etc/hosts
最後增加以下內容:
192.168.2.11 es-master
192.168.2.12 es-node1
192.168.2.13 es-node2
7、建立使用者
在root使用者下新增es使用者:
#新增組
groupadd es
#新增使用者
adduser es -g es
#設定密碼
passwd es
給es使用者賦予許可權:
#編輯/etc/sudoers
vi /etc/sudoers
#在root ALL=(ALL) ALL下增加es配置,最終如下
root ALL=(ALL) ALL
es ALL=(ALL) ALL
切換到es使用者,配置免密登入:
#切換es使用者
su es
#切換到es使用者根目錄
cd ~
#檢視根目錄
pwd
#生成rsa
ssh-keygen -t rsa
#生成公鑰
cat .ssh/id_rsa.pub >> .ssh/authorized_keys
切換到root使用者,設定免密許可權:
#資料夾許可權
chmod 700 /home/es/.ssh
#檔案許可權
chmod 600 /home/es/.ssh/authorized_keys
把.ssh資料夾拷貝到其他節點上:
su es
cd ~
scp -r .ssh/ es@es-node2:/home/es/
在es-master、es-node1、es-node2上執行ssh相互驗證免密訪問。
二、部署es
1、部署es
在es使用者下,從https://www.elastic.co/cn/downloads/elasticsearch下載elasticsearch-7.6.1-linux-x86_64.tar.gz,上傳到伺服器,並解壓縮。/data目錄為大容量磁碟,建立資料檔案和日誌檔案目錄:
#建立資料目錄
mkdir -p /data/es/data
#建立日誌目錄
mkdir -p /data/es/logs
#修改目錄所有者
chown es:es -R /data/es
配置es-master,編輯elasticsearch-7.6.1/config/elasticsearch.yml,修改內容如下:
#叢集名稱
cluster.name: sdc-es-cluster
#節點名稱
node.name: es-master
#資料目錄
path.data: /data/es/data
#日誌目錄
path.logs: /data/es/logs
#本節點ip
network.host: 0.0.0.0
#埠
http.port: 9200
#叢集主節點候選列表
discovery.seed_hosts: ["es-master"]
#叢集初始主結點列表
cluster.initial_master_nodes: ["es-master"]
#叢集啟動到2個節點之前,阻止資料恢復
gateway.recover_after_nodes: 3
#跨域訪問設定
http.cors.enabled: true
http.cors.allow-origin: "*"
配置es-node1,編輯elasticsearch-7.6.1/config/elasticsearch.yml,修改內容如下:
#叢集名稱
cluster.name: sdc-es-cluster
#節點名稱
node.name: es-node1
#資料目錄
path.data: /data/es/data
#日誌目錄
path.logs: /data/es/logs
#本節點ip
network.host: 0.0.0.0
#埠
http.port: 9200
#叢集主節點候選列表
discovery.seed_hosts: ["es-master"]
#叢集初始主結點列表
cluster.initial_master_nodes: ["es-master"]
#叢集啟動到2個節點之前,阻止資料恢復
gateway.recover_after_nodes: 3
#跨域訪問設定
http.cors.enabled: true
http.cors.allow-origin: "*"
#資料結點
node.master: false
配置es-node2,編輯elasticsearch-7.6.1/config/elasticsearch.yml,修改內容如下:
#叢集名稱
cluster.name: sdc-es-cluster
#節點名稱
node.name: es-node2
#資料目錄
path.data: /data/es/data
#日誌目錄
path.logs: /data/es/logs
#本節點ip
network.host: 0.0.0.0
#埠
http.port: 9200
#叢集主節點候選列表
discovery.seed_hosts: ["es-master"]
#叢集初始主結點列表
cluster.initial_master_nodes: ["es-master"]
#叢集啟動到2個節點之前,阻止資料恢復
gateway.recover_after_nodes: 3
#跨域訪問設定
http.cors.enabled: true
http.cors.allow-origin: "*"
#資料結點
node.master: false
啟動es:
[es@es-master elasticsearch-7.6.1]$ ./bin/elasticsearch
ERROR: [2] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
ERROR: Elasticsearch did not exit normally - check the logs at /data/es/logs/sdc-es-cluster.log
啟動失敗,顯示2個錯誤。
解決:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535],在root使用者下,編輯/etc/security/limits.conf檔案,在檔案最後增加以下內容:
* soft nofile 65536
* hard nofile 65536
解決:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144],在root使用者下,編輯/etc/sysctl.conf檔案,在檔案最後增加以下內容:
vm.max_map_count=262144
命令列執行命令:sysctl -p,讓配置生效。
切換到es使用者,啟動es:
[root@es-master elasticsearch-7.6.1]# su es
[es@es-master elasticsearch-7.6.1]$ ./bin/elasticsearch
啟動成功,在瀏覽器輸入:http://192.168.2.11:9200,返回如下內容:
{
"name" : "es-master",
"cluster_name" : "sdc-es-cluster",
"cluster_uuid" : "kzGmp801R_CSLHdo9j0pHQ",
"version" : {
"number" : "7.6.1",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "aa751e09be0a5072e8570670309b1f12348f023b",
"build_date" : "2020-02-29T00:15:25.529771Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
通過配置es-node1,切換到es使用者,啟動es,在瀏覽器輸入:http://192.168.2.12:9200,返回如下內容:
{
"name" : "es-node1",
"cluster_name" : "sdc-es-cluster",
"cluster_uuid" : "YTOwCEiDToi2eitZaqCurA",
"version" : {
"number" : "7.6.1",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "aa751e09be0a5072e8570670309b1f12348f023b",
"build_date" : "2020-02-29T00:15:25.529771Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
通過配置es-node2,切換到es使用者,啟動es,在瀏覽器輸入:http://192.168.2.13:9200,返回如下內容:
{
"name" : "es-node2",
"cluster_name" : "sdc-es-cluster",
"cluster_uuid" : "YTOwCEiDToi2eitZaqCurA",
"version" : {
"number" : "7.6.1",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "aa751e09be0a5072e8570670309b1f12348f023b",
"build_date" : "2020-02-29T00:15:25.529771Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
es後臺啟動:
#後臺啟動
[es@es-master elasticsearch-7.6.1]$ ./bin/elasticsearch -d
#檢視程式
[es@es-master elasticsearch-7.6.1]$ jps
13441 Elasticsearch
13477 Jps
2、部署elasticsearch-analysis-ik
es內建的分詞器對中文不友好,從https://github.com/medcl/elasticsearch-analysis-ik/releases下載es中文分詞外掛elasticsearch-analysis-ik.zip。
解壓縮elasticsearch-analysis-ik.zip,複製到外掛到es的plugins目錄下,如:
[es@es-master elasticsearch-7.6.1]$ pwd
/data/soft/elasticsearch-7.6.1
[es@es-master elasticsearch-7.6.1]$ ll plugins/analysis-ik/
總用量 1428
-rw-r--r-- 1 es es 263965 3月 30 13:47 commons-codec-1.9.jar
-rw-r--r-- 1 es es 61829 3月 30 13:47 commons-logging-1.2.jar
drwxr-xr-x 2 es es 299 3月 30 13:47 config
-rw-r--r-- 1 es es 54598 3月 30 13:47 elasticsearch-analysis-ik-7.6.1.jar
-rw-r--r-- 1 es es 736658 3月 30 13:47 httpclient-4.5.2.jar
-rw-r--r-- 1 es es 326724 3月 30 13:47 httpcore-4.4.4.jar
-rw-r--r-- 1 es es 1805 3月 30 13:47 plugin-descriptor.properties
-rw-r--r-- 1 es es 125 3月 30 13:47 plugin-security.policy
重啟啟動es。
分詞策略支援ik_max_word 和 ik_smart ,呼叫analyze介面測試, 如:
curl -XGET "http://192.168.2.11:9200/_analyze?pretty=true" -H 'Content-Type: application/json' -d'
{
"text":"陝西省人民醫院","tokenizer": "ik_smart"
}'
返回結果如下:
{
"tokens" : [
{
"token" : "陝西省",
"start_offset" : 0,
"end_offset" : 3,
"type" : "CN_WORD",
"position" : 0
},
{
"token" : "人民醫院",
"start_offset" : 3,
"end_offset" : 7,
"type" : "CN_WORD",
"position" : 1
}
]
}
ik_max_word:會將文字做最細粒度的拆分,比如會將“陝西省人民醫院”拆分為“陝西省,陝西,省人民醫院,人民醫院,人民,民醫院,醫院”,會窮盡各種可能的組合,適合 Term Query;
ik_smart: 會做最粗粒度的拆分,比如會將“陝西省人民醫院”拆分為“陝西省,人民醫院”,適合 Phrase 查詢。
3、叢集視覺化訪問
從http://nodejs.cn/download/下載node-v12.16.1-linux-x64.tar.xz,上傳es-master並解壓縮。配置nodejs環境變數:
#配置環境變數
vim /etc/profile
#增加以下內容
#nodejs
export NODE_HOME=/data/soft/nodejs
export PATH=$PATH:$NODE_HOME/bin
#讓配置生效
source /etc/profile
#檢視node版本
node -v
v12.16.1
#檢視npm版本
npm -v
6.13.4
從https://github.com/mobz/elasticsearch-head下載elasticsearch-head-master.zip,上傳es-master並解壓縮,在elasticsearch-head根目錄下命令列執行:npm install下載相關依賴。
#編輯./_site/app.js
vim ./_site/app.js
#替換http://localhost:9200為http://192.168.2.11:9200
在root使用者下,命令列執行:npm run start(後臺啟動命令:nohup npm run start &),啟動elasticsearch-head。在瀏覽器輸入:http://192.168.2.11:9100,如下所示:
三、簡單使用
es空間幾何欄位包括geo_point和geo_shape。空間幾何座標最好採用WGS-84座標系,即經度[-180,180],緯度:[-90,90],涉及到空間索引。
1、建立索引點
1.1、建立索引
curl -XPUT http://192.168.2.11:9200/poi
引數如下:
{
"settings": {
"index": {
"number_of_shards": 2,
"number_of_replicas": 1
}
},
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
},
"type": {
"type": "keyword"
},
"geom": {
"type": "geo_point"
}
}
}
}
1.2、插入資料
curl -XPOST http://192.168.2.11:9200/poi/_doc/1
引數如下:
{
"name": "頤和園",
"type": "公園",
"geom": {"lon": 116.272362,"lat": 39.99299}
}
curl -XPOST http://192.168.2.11:9200/poi/_doc/2
引數如下:
{
"name": "陝西省人民醫院",
"type": "醫院",
"geom": [108.930479,34.239695]
}
1.3、查詢
空間查詢包括:box查詢、distance查詢、polygon查詢:
box查詢:
"filter": {
"geo_bounding_box": {
"geom": {
"top": 45,"left": 100,"bottom": 30,"right": 120
}
}
}
distance查詢:
"filter": {
"geo_distance": {
"distance": "5km",
"geom": [108.947028,34.259424]
}
}
polygon查詢:
"filter": {
"geo_polygon": {
"geom": {
"points": [[100,30],[120,30],[120,45],[100,45]]
}
}
}
curl -XPOST http://192.168.2.11:9200/poi/_search
引數如下:
{
"query": {
"bool": {
"must": {
"match": {
"name": "人民醫院"
}
},
"filter": {
"geo_polygon": {
"geom": {
"points": [[100,30],[120,30],[120,45],[100,45]]
}
}
}
}
}
}
2、建立索引面
2.1、建立索引
curl -XPUT http://192.168.2.11:9200/image
引數如下:
{
"settings": {
"index": {
"number_of_shards": 2,
"number_of_replicas": 1
}
},
"mappings": {
"properties": {
"name": {
"type": "text"
},
"geom": {
"type": "geo_shape"
}
}
}
}
2.2、插入資料
支援常用的wkt和geojson格式插入空間幾何圖形,要求點個數大於3,且首尾相同:
geojson:
{
"name": "GF1_PMS2",
"geom": {
"type" : "polygon",
"coordinates" : [
[[100.0, 30.0], [101.0, 30.0], [101.0, 31.0], [100.0, 31.0], [100.0, 30.0]]
]
}
}
gwt:
{
"name": "GF4_PMS",
"geom": "POLYGON ((116.0 39.0, 117.0 39.0, 117.0 40.0, 116.0 40.0, 116.0 39.0))"
}
2.3、查詢
常用空間查詢,空間圖形由geojson、wkt構建,空間關係支援:intersects(預設)、disjoint、within、contains。
envelope查詢:
"filter": {
"geo_shape": {
"geom": {
"shape": {
"type": "envelope",
"coordinates": [[100.0,50.0],[120.0,30.0]]
},
"relation": "within"
}
}
}
geojson查詢:
"filter": {
"geo_shape": {
"geom": {
"shape": {
"type": "polygon",
"coordinates": [[[100.0,30.0], [120.0,30.0], [120.0, 50.0], [100.0, 50.0], [100.0,30.0]]]
},
"relation": "intersects"
}
}
}
wkt查詢:
"filter": {
"geo_shape": {
"geom": {
"shape":"POLYGON ((100.0 30.0, 120.0 30.0, 120.0 50.0, 100.0 50.0, 100.0 30.0))"
}
}
}
相關文章
- Centos7部署Redis叢集CentOSRedis
- 在CentOS7環境下部署weblogic叢集CentOSWeb
- Centos7.9 部署mongodb高可用叢集 3節點CentOSMongoDB
- 部署分片叢集
- Centos7部署RabbitMQ的映象佇列叢集CentOSMQ佇列
- 在centos三臺機器上部署oceanbase叢集步驟CentOS
- CentOS 6.5下ZooKeeper3.4.6叢集環境部署及單機部署詳解CentOS
- docker部署mysql叢集DockerMySql
- Docker部署ElasticSearch叢集DockerElasticsearch
- centos 6.9搭建pxc叢集CentOS
- 管理 ES 叢集:集常見的叢集部署方式
- jmeter 叢集容器化部署JMeter
- 使用docker部署hadoop叢集DockerHadoop
- 二、Linux部署RabbitMQ叢集LinuxMQ
- Redis Cluster叢集模式部署Redis模式
- centos7搭建redis叢集CentOSRedis
- CentOS7 搭建 Redis 叢集CentOSRedis
- centos7搭建dolphinscheduler叢集CentOS
- redis叢集之主從複製叢集的原理和部署Redis
- Centos7下GlusterFS分散式儲存叢集環境部署記錄CentOS分散式
- 在centos7上用PXD方式部署PolarDB-X叢集步驟CentOS
- 基於Ubuntu部署企業級kubernetes叢集---k8s叢集容部署UbuntuK8S
- 在kubernetes上部署consul叢集
- Redis 4.0叢集環境部署Redis
- 在 Azure 上部署 Kubernetes 叢集
- 拆除kubeadm部署的Kubernetes 叢集
- 使用 Ansible 快速部署 HBase 叢集
- Windows Server上部署IoTdb 叢集WindowsServer
- Kubernetes部署叢集Mysql服務MySql
- Linux部署hadoop2.7.7叢集LinuxHadoop
- Redis Cluster叢集模式部署XRedis模式
- 如何在CentOS上建立Kubernetes叢集CentOS
- CentOS7 安裝PG叢集CentOS
- Linux Centos 搭建叢集圖文教程LinuxCentOS
- Centos7.9使用kubeadm部署K8S 1.27.6叢集環境(內網透過代理部署)CentOSK8S內網
- Centos下部署最後一版支援Docker的k8s叢集CentOSDockerK8S
- centos7下zookeeper叢集安裝部署CentOS
- redis叢集之分片叢集的原理和常用代理環境部署Redis