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 |
RAID | RAID 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 |
-b | Elasticsearch集群的数据目录,必须以/data开头,如/data01;, 不支持多级目录,如确实需要多级目录,请在根目录下做软连接,例如:ln -s /data/myes /data1 |
-r | 指定节点的角色,m(master), d(data), md(master+data) |
-p | 集群HTTP访问端口,尽量不要使用9200/9300等官方默认端口 |
-s | JVM的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/”为例:
IP | Tag | Role | HEAP_SIZE |
---|---|---|---|
192.168.100.101 | node_1 | master | 4GB |
192.168.100.102 | node_2 | master | 4GB |
192.168.100.103 | node_3 | master | 4GB |
192.168.100.104 | node_4 | data | 30GB |
192.168.100.105 | node_5 | data | 30GB |
192.168.100.106 | node_6 | data | 30GB |
第一步,各个节点执行 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