部署ELK

Elasticsearch 部署手册

第一章:部署前准备工作

本文档适用于Elaticsearch集群的安装和部署。

1.1 产品的构成

本产品包含安装包、相关管理脚本和相关文档,并可根据不同需求,提供不同版本Elasticsearch的集群

  • elasticsearch-x.x.x.tar.gz:对应版本的Elasticsearch二进制分发安装包
  • es_init_tob_v1.0.sh:Elasticsearch集群初始化部署脚本
  • es_manager.sh:Elasticsearch集群启停管理脚本
  • kibana_manager.sh:Kibana启停管理脚本
  • generate_xpack.sh:Elasticsearch 7.x with X-pack生成节点证书的脚本
1.2 硬件环境要求

用户应根据应用系统的具体需求选择合适的硬件配置,如 CPU 的指标、内存及磁盘容量等。档次一般应尽可能高一些,尤其是作为搜索引擎服务器的机器,基于 Java 的
程序运行时最好有较大的内存。

名称建议配置
CPU主流CPU即可,多核带来的效率提升远大于提升主频带来的优势
内存大于等于8GB;如果每台只部署一个节点,建议内存小于等于64GB
硬盘如果对IO延迟要求比较高,建议使用SSD
RAIDRAID 5,RAID 10
网卡一块1Gb 及以上支持 TCP/IP 协议的网卡

Elasticsearch集群运行需要至少两种角色,master和data。

  • 出于稳定性考虑,建议master和data节点分开部署。
  • 并且为了保证多数派选举,建议配置3个master节点。
  • data节点可以根据使用情况随时扩容,建议初始化的时候至少3个data节点。
1.3 软件环境要求

运行Elasticsearch集群所需要的软件环境包括:

名称建议配置
操作系统Red Hat Enterprise Linux (RHEL) 6及以上
Centos 6及以上
网络协议TCP/IP
系统盘Elasticsearch实际使用容量不得高于总容量的80%
IO调度策略deadline
文件系统XFS
软件依赖Elasticsearch 6.x 及以下版本需要安装
java-1.8.0-openjdk
java-1.8.0-openjdk-headless
java-1.8.0-openjdk-devel
防火墙建议开启,但是要做好相关策略
系统参数sysctl -w vm.swappiness=0
sysctl -w vm.max_map_count=262144
ulimit -SHl unlimited
ulimit -SHn 65536
ulimit -SHu 65536

第二章 Elasticsearch集群的部署

2.1 将Elasticsearch和相关脚本拷贝到系统/root/目录下,确保MD5值正确
ddf5a6e762a48a3a73cdb5972f05bd39  elasticsearch-add-6.2.2.tgz
11f4e22f86dd4e1147296f7110d168b7  elasticsearch-add-7.6.1.tgz
0fe096e633af9a6e1733233506011aa9  es_init_tob_v1.0.sh
13e1f4d70a9b7aa2b9ad3c8498d4b96a  es_manager.sh
b967fc100acfbf8ae51c24aa8de3fd04  generate_xpack.sh
a26242be8132d7a6faaa49a9f40ea5d2  kibana_manager.sh
2.2 部署Elasticsearch集群

Elasticsearch集群通过执行es_init_tob_v1.0.sh脚本来部署,关于脚本参数的解释如下:

参数含义
-a要执行的操作,这里是 initES, setESConfig, copyCertificates, initKibana
-bElasticsearch集群的数据目录,必须以/data开头,如/data01;,
不支持多级目录,如确实需要多级目录,请在根目录下做软连接,例如:ln -s /data/myes /data1
-r指定节点的角色,m(master), d(data), md(master+data)
-p集群HTTP访问端口,尽量不要使用9200/9300等官方默认端口
-sJVM的HEAP_SIZE的大小,最大值30(单位GB)
-v集群版本,比如6.2.2,7.6.1
-c集群名称,这个是同一集群节点间互认的唯一标识,支持字母、数字、下划线组合
-n当前节点的私网IP,不要使用公网IP
-m所有master节点的IP列表,英文逗号分隔
-d所有data节点的IP列表,英文逗号分隔

PS:es_init_tob_v1.0.sh脚本的initES和initKibana如果需要重复执行,比如第一次安装失败,需要先手工删除“数据目录”下的目录,如/data1/es9200,/data1/kibana9700。

2.2.1 Elasticsearch 6.x

以如下6台机器部署Elasticsearch-6.2.2,集群名“es_test”,部署目录“/data1/”为例:

IPTagRoleHEAP_SIZE
192.168.100.101node_1master4GB
192.168.100.102node_2master4GB
192.168.100.103node_3master4GB
192.168.100.104node_4data30GB
192.168.100.105node_5data30GB
192.168.100.106node_6data30GB

第一步,各个节点执行 es_init_tob_v1.0.sh 的 initES 函数,初始化Elasticsearch安装

### 分别在对应节点执行如下语句
[node_1]# bash es_init_tob_v1.0.sh -a initES -b /data1 -r m -p 9999 -s 4 -v 6.2.2 -c es_test -n 192.168.100.101 -m 192.168.100.101,192.168.100.102,192.168.100.103 -d 192.168.100.104,192.168.100.105,192.168.100.106
[node_2]# bash es_init_tob_v1.0.sh -a initES -b /data1 -r m -p 9999 -s 4 -v 6.2.2 -c es_test -n 192.168.100.102 -m 192.168.100.101,192.168.100.102,192.168.100.103 -d 192.168.100.104,192.168.100.105,192.168.100.106
[node_3]# bash es_init_tob_v1.0.sh -a initES -b /data1 -r m -p 9999 -s 4 -v 6.2.2 -c es_test -n 192.168.100.103 -m 192.168.100.101,192.168.100.102,192.168.100.103 -d 192.168.100.104,192.168.100.105,192.168.100.106
[node_4]# bash es_init_tob_v1.0.sh -a initES -b /data1 -r d -p 9999 -s 30 -v 6.2.2 -c es_test -n 192.168.100.104 -m 192.168.100.101,192.168.100.102,192.168.100.103 -d 192.168.100.104,192.168.100.105,192.168.100.106
[node_5]# bash es_init_tob_v1.0.sh -a initES -b /data1 -r d -p 9999 -s 30 -v 6.2.2 -c es_test -n 192.168.100.105 -m 192.168.100.101,192.168.100.102,192.168.100.103 -d 192.168.100.104,192.168.100.105,192.168.100.106
[node_6]# bash es_init_tob_v1.0.sh -a initES -b /data1 -r d -p 9999 -s 30 -v 6.2.2 -c es_test -n 192.168.100.106 -m 192.168.100.101,192.168.100.102,192.168.100.103 -d 192.168.100.104,192.168.100.105,192.168.100.106
### 查看目录结构如下
/data1/es9999/
├── config
│   ├── analysis-ik
│   │   ├── custom
│   │   │   ├── ext_stopword.dic
│   │   │   ├── mydict.dic
│   │   │   ├── single_word.dic
│   │   │   ├── single_word_full.dic
│   │   │   ├── single_word_low_freq.dic
│   │   │   └── sougou.dic
│   │   ├── IKAnalyzer.cfg.xml
│   │   ├── main.dic
│   │   ├── preposition.dic
│   │   ├── quantifier.dic
│   │   ├── stopword.dic
│   │   ├── suffix.dic
│   │   └── surname.dic
│   ├── elasticsearch.yml
│   ├── jvm.options
│   ├── log4j2.properties
├── data
│   └── 
├── logs
│   └── 
└── version

第二步,启动各个节点,【注意:Elasticsearch安装目录必须是“/data”开头】

bash /root/es_manager.sh -a start -p {$port}

第三步,等待集群所有节点都启动,可以通过_cat/nodes 查看

curl -s -H 'Content-Type: application/json' -XGET http://$node_name:$port/_cat/nodes?v

第四步,在任意节点上执行 es_init_tob_v1.0.sh 的 setESConfig 函数,初始化一些配置

bash /root/es_init_tob_v1.0.sh -a setESConfig -n $node_name -p $port -v $version 

第五步,安装kibana,建议是所有master节点都安装,【注意:Kibana安装目录必须是“/data”开头,且不支持多级目录】

bash /root/es_init_tob_v1.0.sh -a initKibana -b $datadir -r m -p $esport -v $version -n $node_name

第六步,启动kibana,注意,

### Kibana的监听端口默认是Elasticsearch监听端口+500
bash /root/kibana_manager.sh -a start -p {$kibanaport}
2.2.2 Elasticsearch 7.x with X-pack

第一步,各个节点执行 es_init_tob_v1.0.sh 的 initES 函数,初始化Elasticsearch安装

bash /root/es_init_tob_v1.0.sh -a initES -b $datadir -r {m|d|md} -p $port -s $heap_size -v $version -c $clust_name -n $node_name -m $masters -d $datas

第二步,在任一节点上执行 generate_xpack.sh 的 newInit 函数,生成节点证书

bash /root/generate_xpack.sh -a newInit -p $PORT -c $CLUSTER_NAME -v $VERSION -n $NODES

第三步,把/root/es_certification 整个目录拷贝到各个节点的/root/目录下

第四步,各个节点执行 es_init_tob_v1.0.sh 的 copyCertificates 函数,安装节点证书

bash /root/es_init_tob_v1.0.sh -a copyCertificates -b $datadir -c $clust_name -n $node_name -p $port -v $version

第五步,启动各个节点,【注意:Elasticsearch安装目录必须是“/data”开头】

bash /root/es_manager.sh -a start -p {$port}

第六步,等待集群所有节点都启动,可以通过_cat/nodes 查看

curl -s -H 'Content-Type: application/json' -XGET http://$node_name:$port/_cat/nodes?v

第七步,在任意节点上执行 es_init_tob_v1.0.sh 的 setESConfig 函数,初始化一些配置

bash /root/es_init_tob_v1.0.sh -a setESConfig -n $node_name -p $port -v $version 

第八步,安装kibana,建议是所有master节点都安装,【注意:Kibana安装目录必须是“/data”开头,且不支持多级目录】

bash /root/es_init_tob_v1.0.sh -a initKibana -b $datadir -r m -p $esport -v $version -n $node_name

第九步,启动kibana,注意,

### Kibana的监听端口默认是Elasticsearch监听端口+500
bash /root/kibana_manager.sh -a start -p {$kibanaport}
2.2.3 Elasticsearch 7.x without X-pack

第一步,各个节点执行 es_init_tob_v1.0.sh 的 initES 函数,初始化Elasticsearch安装

bash /root/es_init_tob_v1.0.sh -a initES -b $datadir -r {m|d|md} -p $port -s $heap_size -v $version -c $clust_name -n $node_name -m $masters -d $datas

第二步,编辑各个节点的配置文件 /data1/es$port/config/elasticsearch.yml 中关于x-pack的配置,修改为如下内容

################ X-pack Security Setting ###############
xpack.security.enabled: false
#xpack.security.http.filter.enabled: true
#xpack.security.transport.filter.enabled: true
#xpack.security.transport.filter.allow: 10.0.0.0/8
#xpack.security.transport.filter.deny: _all
#xpack.security.transport.ssl.enabled: true
#xpack.security.transport.ssl.verification_mode: full
#xpack.security.transport.ssl.keystore.path: "NODE_NAME-certificates.p12"
#xpack.security.transport.ssl.keystore.password: "KEYSTORE_PASS"
#xpack.security.transport.ssl.truststore.path: "NODE_NAME-certificates.p12"
#xpack.security.transport.ssl.truststore.password: "KEYSTORE_PASS"
################ X-pack Security Setting ###############

第三步,启动各个节点,【注意:Elasticsearch安装目录必须是“/data”开头】

bash /root/es_manager.sh -a start -p {$port}

第四步,等待集群所有节点都启动,可以通过_cat/nodes 查看

curl -s -H 'Content-Type: application/json' -XGET http://$node_name:$port/_cat/nodes?v

第五步,在任意节点上执行如下命令,初始化一些配置

curl -s -H 'Content-Type: application/json' -XPUT "http://$node_name:$port/_cluster/settings?pretty" -d '{
    "transient" : {
        "cluster.routing.allocation.enable" : "all" 
    } 
}'

第六步,安装kibana,建议是所有master节点都安装,【注意:Kibana安装目录必须是“/data”开头,且不支持多级目录】

bash /root/es_init_tob_v1.0.sh -a initKibana -b $datadir -r m -p $esport -v $version -n $node_name

第七步,启动kibana,注意,

### Kibana的监听端口默认是Elasticsearch监听端口+500
bash /root/kibana_manager.sh -a start -p {$kibanaport}
2.2.4 特殊情况,单服务器部署同一个集群的多个节点,简称多实例部署

以同一台服务器3个实例分别部署在/data1,/data2,/data3为例:

第一步,分别执行 es_init_tob_v1.0.sh 的 initES 函数,初始化Elasticsearch安装。注意区分同一台服务器上不同实例的端口应该不一样!!!

bash /root/es_init_tob_v1.0.sh -a initES -b /data1 -r {m|d|md} -p $port1 -s $heap_size -v $version -c $clust_name -n $node_name -m $masters -d $datas
bash /root/es_init_tob_v1.0.sh -a initES -b /data2 -r {m|d|md} -p $port2 -s $heap_size -v $version -c $clust_name -n $node_name -m $masters -d $datas
bash /root/es_init_tob_v1.0.sh -a initES -b /data3 -r {m|d|md} -p $port3 -s $heap_size -v $version -c $clust_name -n $node_name -m $masters -d $datas

第二步,编辑各个实例的配置文件 /data1/es$port/config/elasticsearch.yml 中的配置,改为IP:TX_PORT的格式,TX_PORT=ESPORT+10000,比如ES实例端口为9200,TX_PORT端口就是19200。

### Elasticsearch 6.x使用
discovery.zen.ping.unicast.hosts: ["master1:tx_port1, master2:tx_port2, master3:tx_port3, data1:tx_port1, data2:tx_port2, data3:tx_port3"]

### Elasticsearch 7.x使用
cluster.initial_master_nodes: ["master1:tx_port1, master2:tx_port2, master3:tx_port3"]
discovery.seed_hosts: ["master1:tx_port1, master2:tx_port2, master3:tx_port3, data1:tx_port1, data2:tx_port2, data3:tx_port3"]

第三步及以后可以参考上面的例子

第三章 Elasticsearch集群启停管理

Elasticsearch集群启停管理是通过es_manager.sh脚本实现的。使用方法如下:

### 本脚本只能在 Elasticsearch 节点本地执行
usage: bash es_manager.sh -a {start|stop|status|restart} -p {$port}
usage: bash es_manager.sh -h

PS:当集群每一次全量启动(所有节点)之后,请务必执行如下API来开启分片的自动路由:

curl -s -H 'Content-Type: application/json' -XPUT "http://${NODE_NAME}:${PORT}/_cluster/settings?pretty" -d '{
    "transient" : {
        "cluster.routing.allocation.enable" : "all" 
    } 
}'

第四章 Kibana启停管理

Kibana启停管理是通过kibana_manager.sh脚本实现的。使用方法如下:

### Kibana的监听端口默认是Elasticsearch监听端口+500
usage: bash kibana_manager.sh -a {start|stop|status|restart} -p {$kibanaport}
usage: bash kibana_manager.sh -h

第五章 Elasticsearch集群常用RESTFul API

Elasticsearch集群的任何一个节点都可以承接HTTP请求,因此可以随机访问任何节点。

4.1 查看集群监控状态
curl -s -H 'Content-Type: application/json' -XGET http://192.168.100.101:9999/_cat/health?v
4.2 查看集群节点
curl -s -H 'Content-Type: application/json' -XGET http://192.168.100.101:9999/_cat/nodes?v
4.3 查看集群索引
curl -s -H 'Content-Type: application/json' -XGET http://192.168.100.101:9999/_cat/indices?v
4.4 参考文档

其他更多API请参考 https://www.elastic.co/guide/en/elasticsearch/reference/current/cat.html

bash es_init_tob_v1.0.sh -a initES -b /data1 -r md -p 9999 -s 4 -v 6.2.2 -c es_test -n 10.162.123.235 -m 10.162.123.235,10.162.123.249,10.162.124.30 -d 10.162.123.235,10.162.123.249,10.162.124.30

bash es_init_tob_v1.0.sh -a initES -b /data1 -r md -p 9999 -s 4 -v 6.2.2 -c es_test -n 10.162.123.235 -m 10.162.123.249,10.162.123.249,10.162.124.30 -d 10.162.123.235,10.162.123.249,10.162.124.30

bash es_init_tob_v1.0.sh -a initES -b /data1 -r md -p 9999 -s 4 -v 6.2.2 -c es_test -n 10.162.123.235 -m 10.162.124.30,10.162.123.249,10.162.124.30 -d 10.162.123.235,10.162.123.249,10.162.124.30

bash /root/es_manager.sh -a start -p 9999

curl -s -H ‘Content-Type: application/json’ -XGET http://10.162.123.235:9999/_cat/nodes?v

bash /root/es_init_tob_v1.0.sh -a setESConfig -n 10.162.123.235 -p 9999 -v 6.2.2

bash /root/es_init_tob_v1.0.sh -a initKibana -b /data1 -r m -p 9999 -v 6.2.2 -n 10.162.123.235

bash /root/kibana_manager.sh -a start -p 10499

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值