學(xué)習(xí)地址為極客時間《Elasticsearch核心技術(shù)與實戰(zhàn)》具垫,這只是我做的筆記来农,僅供參考;
二头朱、安裝上手
1. Elasticsearch
的安裝和簡單配置
-
Elasticsearch
非常容易在個人電腦上搭建環(huán)境
image
image - 下載
Elasticsearch
安裝包https://elasticsearch.cn/download/ -
Elasticsearch
還有官方的Docker
鏡像座享,我們可以在Docker
中很容易的啟動它
2. Elasticsearch
的文件目錄結(jié)構(gòu)
目錄 | 配置文件 | 描述 |
---|---|---|
bin | 腳本啟動婉商,包括啟動Elasticsearch ,安裝插件。運行統(tǒng)計數(shù)據(jù)等 |
|
config | elasticsearch.yml | 集群配置文件渣叛,user丈秩,role based 相關(guān)配置 |
JDK | Java運行環(huán)境 | |
data | path.data | 數(shù)據(jù)文件 |
lib | Java類庫 | |
logs | path.log | 日志文件 |
modules | 包含所有ES模塊 | |
plugins | 包含所有已安裝插件 |
2.1 JVM
配置
- 修改
config/jvm.options
,7.1
版本的默認設(shè)置時1 GB
-
Xmx
和Xms
設(shè)置成一樣 -
Xmx
不要超過機器內(nèi)存的50%
- 不要超過
30GB
- [https://www.elastic.co/blog/a-heap-of-trouble]
3. 運行Elasticsearch
3.1 啟動出現(xiàn)的問題
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
- 每個進程最大同時打開文件數(shù)太小,可通過下面2個命令查看當前數(shù)量
ulimit -Hn
ulimit -Sn
- 修改/etc/security/limits.conf文件淳衙,增加配置癣籽,用戶退出后重新登錄生效
* soft nofile 65536
* hard nofile 65536
max number of threads [3818] for user [es] is too low, increase to at least [4096]
- 問題同上挽唉,最大線程個數(shù)太低。修改配置文件/etc/security/limits.conf(和問題1是一個文件)筷狼,增加配置
* soft nproc 4096
* hard nproc 4096
- 可通過命令查看
ulimit -Hu
ulimit -Su
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
- 修改/etc/sysctl.conf文件瓶籽,增加配置vm.max_map_count=262144
vi /etc/sysctl.conf
sysctl -p
- 執(zhí)行命令sysctl -p生效
3.2 啟動
/opt/module/elasticsearch-7.1.0/bin/elasticsearch
- 打開瀏覽器輸入:
http://192.168.37.130:9200/
image
4. 為Elasticsearch
安裝插件(我們可以利用插件來實現(xiàn)一些安全策略,來保護我們存儲的數(shù)據(jù))
image
4.1 查看當前Elasticsearch
已經(jīng)安裝的插件
[root@hadoop101 elasticsearch-7.1.0]# bin/elasticsearch-plugin list
4.2 安裝analysis-icu
(analysis
是一個國際化的分詞插件)
[root@hadoop101 elasticsearch-7.1.0]# bin/elasticsearch-plugin install analysis-icu
4.3 頁面查看安裝的插件
http://192.168.37.130:9200/_cat/plugins
image
5. 在開發(fā)機上運行多個Elasticsearch
實例
-
Elasticsearch
中一個很大的特色就是以分布式的方式去運行埂材,也就是說你可以在多臺機器上去運行多個Elasticsearch
實例塑顺,這些實例最后組成一個大的集群 - 我們現(xiàn)在要在本機以一個多實例的方式去運行它,來了解它的機制
5.1 修改config/elasticsearch.yml
# 集群名稱
cluster.name: geektime
# 是否鎖住內(nèi)存
bootstrap.memory_lock: false
# 連接地址
network.host: 192.168.2.101
# 候選主節(jié)點列表
discovery.seed_hosts: ["192.168.2.101:9301","192.168.2.101:9302","192.168.2.101:9303"]
# 初始化集群主節(jié)點列表
cluster.initial_master_nodes: ["node1","node2","node3"]
# 開啟跨域訪問支持俏险,默認為false
http.cors.enabled: true
# # 跨域訪問允許的域名地址严拒,(允許所有域名)以上使用正則
http.cors.allow-origin: "*"
5.2 修改config/jvm.options
- 因為我是在虛擬機上,內(nèi)存不是很大竖独,所以這里將
JVM
內(nèi)存調(diào)小一點
-Xms512M
-Xmx512M
5.3 創(chuàng)建數(shù)據(jù)目錄和日志目錄
#創(chuàng)建數(shù)據(jù)目錄和日志目錄
cd data; mkdir data1 data2 data3
cd logs; mkdir logs1 logs2 logs3
5.4 啟動
# 啟動(同一臺機子)
bin/elasticsearch -E node.name=node1 -E cluster.name=geektime -E path.data=data/data1 -E path.logs=logs/logs1 -E http.port=9201 -E transport.tcp.port=9301 -E node.master=true -E node.data=true
bin/elasticsearch -E node.name=node2 -E cluster.name=geektime -E path.data=data/data2 -E path.logs=logs/logs2 -E http.port=9202 -E transport.tcp.port=9302 -E node.master=true -E node.data=false
bin/elasticsearch -E node.name=node3 -E cluster.name=geektime -E path.data=data/data3 -E path.logs=logs/logs3 -E http.port=9203 -E transport.tcp.port=9303 -E node.master=true -E node.data=false
- 訪問:http://192.168.37.130:9201/_cat/nodes裤唠,就可以看到集群中的節(jié)點了
6. Kibana
的安裝和界面快速瀏覽
6.1 下載(都是國內(nèi)的社區(qū))
6.2 配置
- 修改
config/Kibana.yml
# 用于在任何主機都可以訪問
server.host: "0.0.0.0"
# es的地址,這個它默認是9200端口,我們現(xiàn)在啟動的是9201莹痢、9202种蘸、9203,所以這里需要配置一下
elasticsearch.hosts: ["http://192.168.37.130:9201"]
6.3 啟動
[els@hadoop101 kibana-7.1.0-linux-x86_64]$ bin/kibana
6.4 設(shè)置中文
- 在kibana.yml配置文件中添加一行配置
i18n.locale: "zh-CN"
6.4 訪問及簡單介紹
- 訪問:http://192.168.37.130:5601/
image
image
image
image
7. 在Docker
容器中運行Elasticsearch Kibana
和Cerebro
7.1 安裝Docker和Docker Compose
自行百度安裝
7.2 Docker Compose相關(guān)命令
-
docker-compose up
: 運行 docker compose down
docker compose down -v
docker stop/rm containerID
7.3 運行Docker-comose
竞膳,本地構(gòu)建開發(fā)環(huán)境航瞭,直觀了解Elasticsearch
分布式特性,并集成Cerebro
,方便查看集群狀態(tài)
7.3.1 docker-compose.yaml
文件
version: '2.2'
services:
cerebro:
image: lmenezes/cerebro:0.8.3
container_name: cerebro
ports:
- "9000:9000"
command:
- -Dhosts.0.host=http://elasticsearch:9200
networks:
- es7net
kibana:
image: docker.elastic.co/kibana/kibana:7.1.0
container_name: kibana7
environment:
- I18N_LOCALE=zh-CN
- XPACK_GRAPH_ENABLED=true
- TIMELION_ENABLED=true
- XPACK_MONITORING_COLLECTION_ENABLED="true"
ports:
- "5601:5601"
networks:
- es7net
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0
container_name: es7_01
environment:
- cluster.name=geektime
- node.name=es7_01
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.seed_hosts=es7_01,es7_02
- cluster.initial_master_nodes=es7_01,es7_02
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es7data1:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- es7net
elasticsearch2:
image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0
container_name: es7_02
environment:
- cluster.name=geektime
- node.name=es7_02
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.seed_hosts=es7_01,es7_02
- cluster.initial_master_nodes=es7_01,es7_02
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es7data2:/usr/share/elasticsearch/data
networks:
- es7net
volumes:
es7data1:
driver: local
es7data2:
driver: local
networks:
es7net:
driver: bridge
7.3.2 啟動運行
- 進入有
docker-compose.yaml
文件的目錄運行 - 我這里的目錄在``
docker-compose up
image
image
image
8. Logstash
安裝與導(dǎo)入數(shù)據(jù)
8.1 下載并安裝
- 下載時,我們必須要保證我們的
Logstash
的版本和我們的Elasticsearch
的版本一致 - https://elasticsearch.cn/download/
8.2 下載logstash數(shù)據(jù)文件
D:\WorkSpace\rickying-geektime-ELK-master
- 并將數(shù)據(jù)導(dǎo)入到Linux中的
/opt/module/logstash_data
image
image
8.2 修改logstash.conf
配置文件
input {
file {
path => "/opt/module/logstash-7.1.0/bin/movies.csv"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
csv {
separator => ","
columns => ["id","content","genre"]
}
mutate {
split => { "genre" => "|" }
remove_field => ["path", "host","@timestamp","message"]
}
mutate {
split => ["content", "("]
add_field => { "title" => "%{[content][0]}"}
add_field => { "year" => "%{[content][1]}"}
}
mutate {
convert => {
"year" => "integer"
}
strip => ["title"]
remove_field => ["path", "host","@timestamp","message","content"]
}
}
output {
elasticsearch {
hosts => "http://localhost:9200"
index => "movies"
document_id => "%{id}"
}
stdout {}
}
image
8.3 指定配置文件運行logstash
./logstash -f logstash.conf
image