赞
踩
三台银河麒麟Server V10 SP3主机(虚拟机),2核4G
es节点 | 主机IP |
---|---|
es-master | 192.168.131.101 |
es-node1 | 192.168.131.102 |
es-node2 | 192.168.131.103 |
虚拟机内部软件版本:
软件 | 版本 |
---|---|
docker | 19.03.15 |
docker-compose | 1.22.0 |
elasticsearch | 7.12.1 |
kibana | 7.12.1 |
es-master节点是es的主节点,因为es的集群认证需要密钥,所以master节点需要先进行部署,生成密钥。 如果已经有了密钥,可以直接从第九步开始。 这里采用的是docker-compose的方式部署:
1. 创建一个网络(用于连接kibana)
docker network create es_net
2. 准备docker-compose.yml文件。
- version: '3'
- services:
- es-master:
- image: elasticsearch:7.12.1
- container_name: es-master
- environment:
- - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m" #es是java写的,可以进行jvm调优,生产环境可以调高这个参数,如4G
- ulimits:
- memlock:
- soft: -1
- hard: -1
- nofile:
- soft: 65536
- hard: 65536
- volumes:
- - /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro # 配置文件挂载
- - /data/elasticsearch/data:/usr/share/elasticsearch/data:rw # 数据挂载
- - /data/elasticsearch/log:/usr/share/elasticsearch/log:rw # 日志挂载
- - /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins:rw # 插件挂载
- ports:
- - 9200:9200
- - 9300:9300
- networks:
- - es_net
- extra_hosts: # 设置容器 hosts
- - "es-master:192.168.131.101"
- - "es-node1:192.168.131.102"
- - "es-node2:192.168.131.103"
- networks:
- es_net:
- external: true
3. 创建挂载目录
- ## 创建es配置数据日志目录
- mkdir /data/elasticsearch/{config,data,log,plugins} -pv
-
- ## 创建kibana配置目录
- mkdir /data/kibana/config -pv
-
- ## 修改es目录权限,否则容器启动报错,es容器使用es用户启动,用户id=1000
- chown 1000:1000 /data/elasticsearch/* -R
4. 编辑 elasticsearch.yml配置文件
- # vim /data/elasticsearch/config/elasticsearch.yml
-
- cluster.name: test-es-cluster #集群名称, es会自动发现在同一网段下的es,使用该属性可以区分同一网段下的多个es集群
- node.name: es-master
- node.master: true # 该节点是否有选主资格(es集群中的第一台es默认为主节点)
- node.data: true # 是否为数据节点
-
- network.bind_host: 0.0.0.0 #设置绑定ip,默认是0.0.0.0
- network.publish_host: 192.168.131.101 #设置其它节点和该节点交互的ip地址,必须是真实ip
- http.port: 9200
- transport.tcp.port: 9300
- http.cors.enabled: true
- http.cors.allow-origin: "*"
-
- discovery.zen.ping.unicast.hosts: ["es-master:9300", "es-node1:9300", "es-node2:9300"] # 设置集群中节点的初始列表
- discovery.zen.minimum_master_nodes: 2 # 集群中的节点可以直到其他n个有master资格的节点,默认1
- discovery.zen.ping_timeout: 5s # 自动发现其他节点时,ping连接超时时间,默认3s
-
- bootstrap.memory_lock: true # 禁止es节点进行swap
- action.destructive_requires_name: true #禁止通过正则或_all进行index的删除
- cluster.initial_master_nodes: ["es-master"] #集群第一次启动时的候选master列表
5. 启动es-master服务
- # 进入docker-compose文件所属目录下
- docker-compose up -d
-
- # 启动后可以查看容器日志
- docker logs -f es-master
注: 启动时报错:bootstrap checks failed## max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]的解决方案
vim /etc/sysctl.conf
在行尾追加
vm.max_map_count=655360
然后执行
sysctl -p
访问 http://192.168.131.101:9200/ 可以看到节点启动信息
6. 编写kibana.yml配置文件
- # vim /data/kibana/config/kibana.yml
-
- server.name: kibana
- server.host: "0.0.0.0"
- # elasticsearch.hosts: "http://192.168.131.101:9200"
- xpack.monitoring.ui.container.elasticsearch.enabled: true
7. 运行kibana容器, 执行代码
- docker run -d \
- --name kibana \
- -v /data/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml:ro \
- -e ELASTICSEARCH_HOSTS=http://es-master:9200 \
- --network=es_net \
- -p 5601:5601 \
- kibana:7.12.1
因为 kibana已经和es在同一个docker网络下, 所以可以直接使用容器名进行访问;
如果kibana和es不在同一个网络,可以打开kibana.yml的注释配置,
并删除
-e ELASTICSEARCH_HOSTS=http://es-master:9200 \
8. 启动es_xpack
认证, 生成证书
集群认证首先需要配置密钥,否则在给内置用户创建密钥时,会报错。 这里直接用master节点去生成证书,生成后直接传到其他节点即可
- docker exec -it es-master bash #进入容器
- /usr/share/elasticsearch/bin/elasticsearch-certutil ca
- /usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
- ## 两条命令均一路回车即可,不需要给秘钥再添加密码。
-
- ## 证书创建完成之后,默认在es的数据目录,这里统一cp 到宿主机目录中
- mv elastic-* /usr/share/elasticsearch/data/
-
- ## 退出容器
- exit
-
- ## 复制 /data/elasticsearch/data/ 下证书到 config 目录
- cd /data/elasticsearch/config/
- cp /data/elasticsearch/data/elastic-* ./
- chmod 644 elastic-*
- chown 1000:1000 elastic*
elastic-certificates.p12
和elastic-stack-ca.p12
就是生成好的证书文件。
9. 将证书cp到其他节点上,注意提前创建好文件目录
前往192.168.131.102
和 192.168.131.103
, 执行如下命令
mkdir/data/elasticsearch/{config,data,log,plugins} -pv chown 1000:1000 /data/elasticsearch/* -R
然后回到 192.168.131.101
节点 执行如下命令 (也可以使用工具)
- scp /data/elasticsearch/config/elastic-* 192.168.131.102:/data/elasticsearch/config/
- scp /data/elasticsearch/config/elastic-* 192.168.131.103:/data/elasticsearch/config/
输入目标机的密码。(第一次执行请先输入yes接收密钥)
10. 修改docker-compose.yml
和elasticsearch.yml
, 删除es容器,重新执行docker-compose。
配置 elasticsearch.yml
- # vim /data/elasticsearch/config/elasticsearch.yml
-
- cluster.name: test-es-cluster #集群名称, es会自动发现在同一网段下的es,使用该属性可以区分同一网段下的多个es集群
- node.name: es-master
- node.master: true # 该节点是否有选主资格(es集群中的第一台es默认为主节点)
- node.data: true # 是否为数据节点
-
- network.bind_host: 0.0.0.0 #设置绑定ip,默认是0.0.0.0
- network.publish_host: 192.168.131.101 #设置其它节点和该节点交互的ip地址,必须是真实ip
- http.port: 9200
- transport.tcp.port: 9300
- http.cors.enabled: true
- http.cors.allow-origin: "*"
-
- discovery.zen.ping.unicast.hosts: ["es-master:9300", "es-node1:9300", "es-node2:9300"] # 设置集群中节点的初始列表
- discovery.zen.minimum_master_nodes: 2 # 集群中的节点可以直到其他n个有master资格的节点,默认1
- discovery.zen.ping_timeout: 5s # 自动发现其他节点时,ping连接超时时间,默认3s
-
- bootstrap.memory_lock: true # 禁止es节点进行swap
- action.destructive_requires_name: true #禁止通过正则或_all进行index的删除
- cluster.initial_master_nodes: ["es-master"] #集群第一次启动时的候选master列表
-
- xpack.security.enabled: true
- xpack.security.transport.ssl.enabled: true
- xpack.security.transport.ssl.verification_mode: certificate
- xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/elastic-certificates.p12
- xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/elastic-certificates.p12
配置 docker-compose.yml
- version: '3'
- services:
- es-master:
- image: elasticsearch:7.12.1
- container_name: es-master
- environment:
- - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m" #es是java写的,可以进行jvm调优,生产环境可以调高这个参数,如4G
- ulimits:
- memlock:
- soft: -1
- hard: -1
- nofile:
- soft: 65536
- hard: 65536
- volumes:
- - /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro # 配置文件挂载
- - /data/elasticsearch/data:/usr/share/elasticsearch/data:rw # 数据挂载
- - /data/elasticsearch/log:/usr/share/elasticsearch/log:rw # 日志挂载
- - /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins:rw # 插件挂载
- - /data/elasticsearch/config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12:ro # 证书挂载
- - /data/elasticsearch/config/elastic-stack-ca.p12:/usr/share/elasticsearch/config/elastic-stack-ca.p12:ro
-
- ports:
- - 9200:9200
- - 9300:9300
- networks:
- - es_net
- extra_hosts: # 设置容器 hosts
- - "es-master:192.168.131.101"
- - "es-node1:192.168.131.102"
- - "es-node2:192.168.131.103"
- networks:
- es_net:
- external: true
访问9200端口,出现密码提示,说明配置成功。
11. 配置es账户,并为内置账户设置密码
ES 中内置了几个管理其他集成组件的账号
即:
apm_system
,beats_system
,elastic
,kibana
,logstash_system
,remote_monitoring_user
,使用之前,首先需要添加一下密码。这里我给所有的账户设置的密码都是123456
注意必须先开启认证,才能设置密码,否则第二条命令无法设置
- docker exec -it es-master bash
- /usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
配置完成后,可以使用如下方式访问es服务
curl -XGET -u elastic 'localhost:9200/_xpack/security/user?pretty'
此时前端也可以使用 elastic 123456成功访问
12. 修改kibana配置文件,添加用户名和密码
- # vim /data/kibana/config/kibana.yml
-
- server.name: kibana
- server.host: "0.0.0.0"
- # elasticsearch.hosts: "http://192.168.131.101:9200"
- xpack.monitoring.ui.container.elasticsearch.enabled: true
-
- elasticsearch.username: "elastic"
- elasticsearch.password: "123456"
然后重启kibana容器:
docker restart kibana
部署其他节点的流程和部署es-master节点类似,因为我们已经创建好了目录,并且将证书传递过去,只需要编写好配置文件,直接通过docker-compose启动即可。且其他节点不需要配置kibana。下面只列出配置文件。
1. docker-compose.yml
- # vim /data/elasticsearch/config/elasticsearch.yml
-
- version: '3'
- services:
- es-node1:
- image: elasticsearch:7.12.1
- container_name: es-node1
- environment:
- - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m" # 设置Jvm内存大小
- ulimits:
- memlock:
- soft: -1
- hard: -1
- nofile:
- soft: 65536
- hard: 65536
- volumes:
- - /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro # 配置挂载
- - /data/elasticsearch/data:/usr/share/elasticsearch/data:rw # 数据挂载
- - /data/elasticsearch/log:/usr/share/elasticsearch/log:rw # 日志挂载
- - /data/elasticsearch/config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12:ro # 证书挂载
- - /data/elasticsearch/config/elastic-stack-ca.p12:/usr/share/elasticsearch/config/elastic-stack-ca.p12:ro
- ports:
- - 9200:9200
- - 9300:9300
- extra_hosts: # 设置容器 hosts
- - "es-master:192.168.131.101"
- - "es-node1:192.168.131.102"
- - "es-node2:192.168.131.103"
2. elasticsearch.yml
- cluster.name: test-es-cluster
- node.name: es-node1
- node.master: true
- node.data: true
-
- #network.host: 0.0.0.0
- network.bind_host: 0.0.0.0
- network.publish_host: 192.168.131.102
- http.port: 9200
- transport.tcp.port: 9300
- http.cors.enabled: true
- http.cors.allow-origin: "*"
-
- discovery.zen.ping.unicast.hosts: ["es-master:9300", "es-node1:9300", "es-node2:9300"]
- discovery.zen.minimum_master_nodes: 2
- discovery.zen.ping_timeout: 5s
-
- bootstrap.memory_lock: true
- action.destructive_requires_name: true
- cluster.initial_master_nodes: ["es-master"]
-
- xpack.security.enabled: true
- xpack.security.transport.ssl.enabled: true
- xpack.security.transport.ssl.verification_mode: certificate
- xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/elastic-certificates.p12
- xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/elastic-certificates.p12
启动容器
docker-compose up -d
访问http://192.168.131.102:9200/, 如果正确,应提示输入密码,且可以通过主节点配置的密码成功登录。
1. docker-compose.yml
- # vim /data/elasticsearch/config/elasticsearch.yml
-
- version: '3'
- services:
- es-node2:
- image: elasticsearch:7.12.1
- container_name: es-node2
- environment:
- - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m" # 设置Jvm内存大小
- ulimits:
- memlock:
- soft: -1
- hard: -1
- nofile:
- soft: 65536
- hard: 65536
- volumes:
- - /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro # 配置挂载
- - /data/elasticsearch/data:/usr/share/elasticsearch/data:rw # 数据挂载
- - /data/elasticsearch/log:/usr/share/elasticsearch/log:rw # 日志挂载
- - /data/elasticsearch/config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12:ro # 证书挂载
- - /data/elasticsearch/config/elastic-stack-ca.p12:/usr/share/elasticsearch/config/elastic-stack-ca.p12:ro
- ports:
- - 9200:9200
- - 9300:9300
- extra_hosts: # 设置容器 hosts
- - "es-master:192.168.131.101"
- - "es-node1:192.168.131.102"
- - "es-node2:192.168.131.103"
2. elasticsearch.yml
- cluster.name: test-es-cluster
- node.name: es-node2
- node.master: true
- node.data: true
-
- #network.host: 0.0.0.0
- network.bind_host: 0.0.0.0
- network.publish_host: 192.168.131.103
- http.port: 9200
- transport.tcp.port: 9300
- http.cors.enabled: true
- http.cors.allow-origin: "*"
-
- discovery.zen.ping.unicast.hosts: ["es-master:9300", "es-node1:9300", "es-node2:9300"]
- discovery.zen.minimum_master_nodes: 2
- discovery.zen.ping_timeout: 5s
-
- bootstrap.memory_lock: true
- action.destructive_requires_name: true
- cluster.initial_master_nodes: ["es-master"]
-
- xpack.security.enabled: true
- xpack.security.transport.ssl.enabled: true
- xpack.security.transport.ssl.verification_mode: certificate
- xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/elastic-certificates.p12
- xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/elastic-certificates.p12
启动容器
docker-compose up -d
访问http://192.168.131.103:9200/, 如果正确,应提示输入密码,且可以通过主节点配置的密码成功登录。
查看集群状态 http://192.168.131.101:9200/_cluster/health?pretty
访问 http://192.168.131.101:9200/_cat/health?v 会打印一个简易图标
访问 http://192.168.131.101:9200/_cat/nodes 可以看到集群节点信息, 带 * 的为主节点
es集群搭建完成
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。