目标:在一台机器内设置3个ES节点和1个kibana节点正常运行

条件:本机器内的IP:192.168.211.130

1.首先安装docker

2.设置环境配置(打开文件后,在最后添加即可)

vim /etc/sysctl.conf

#fs.file-max主要是配置系统最大打开文件描述符数,建议修改为655360或者更高

fs.file-max=655360

#影响Java线程数量,用于限制一个进程可以拥有的VMA(虚拟内存区域)的大小

vm.max_map_count = 262144

vim /etc/security/limits.conf

#可打开的文件描述符的最大数(软限制)

* soft noporc 65536

#可打开的文件描述符的最大数(硬限制)

* hard noporc 65536

#单个用户可用的最大进程数量(软限制)

* soft nofile 65536

#单个用户可用的最大进程数量(硬限制)

* hard nofile 65536

#内存不限制

* soft memlock unlimited

* hard memlock unlimited

#centos7特有,修改软限制

vim /etc/security/limits.d/20-nproc.conf

*          soft    nproc     40960

设置后,需要让这些配置生效一下,命令:sysctl -p  

3.拉取Elasticsearch镜像并安装:

        3.1拉去镜像语句: docker pull docker.elastic.co/elasticsearch/elasticsearch:7.15.2

        3.2 设置环境

                3.2.1 创建目录

                        mkdir -p /usr/local/elasticsearch/data && mkdir -p /usr/local/elasticsearch/config && mkdir -p /usr/local/elasticsearch/logs && mkdir -p /usr/local/elasticsearch/plugins

                3.2.2 建立yml文件(设置3个节点,master/hot/cold)

  vi  /usr/local/elasticsearch/config/master.yml

# 设置集群名称,集群内所有节点的名称必须一致。
cluster.name: es-cluster
# 设置节点名称,集群内节点名称必须唯一。
node.name: node-master
# 表示该节点会不会作为主节点,true表示会;false表示不会
node.master: true
# 当前节点是否用于存储数据,是:true、否:false
node.data: true
# 索引数据存放的位置
path.data: /usr/share/elasticsearch/data_master
# 日志文件存放的位置
path.logs: /usr/share/elasticsearch/logs_master
# 需求锁住物理内存,是:true、否:false
bootstrap.memory_lock: false
# 监听地址,用于访问该es
network.host: 192.168.211.130
# es对外提供的http端口,默认 9200
http.port: 9200
# TCP的默认监听端口,默认 9300
transport.tcp.port: 9300
# es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["192.168.211.130:9300", "192.168.211.130:9301","192.168.211.130:9302"]
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5
# es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["192.168.211.130:9300", "192.168.211.130:9301","192.168.211.130:9302"]
# 是否支持跨域,是:true,在使用head插件时需要此配置
http.cors.enabled: true
# “*” 表示支持所有域名
http.cors.allow-origin: "*"

#监控堆栈
xpack.monitoring.collection.enabled: true

 

 vi  /usr/local/elasticsearch/config/cold.yml

# 设置集群名称,集群内所有节点的名称必须一致。
cluster.name: es-cluster
# 设置节点名称,集群内节点名称必须唯一。
node.name: node-cold
# 表示该节点会不会作为主节点,true表示会;false表示不会
node.master: true
# 当前节点是否用于存储数据,是:true、否:false
node.data: true
# 索引数据存放的位置
path.data: /usr/share/elasticsearch/data_cold
# 日志文件存放的位置
path.logs: /usr/share/elasticsearch/logs_cold
# 需求锁住物理内存,是:true、否:false
bootstrap.memory_lock: false
# 监听地址,用于访问该es
network.host: 192.168.211.130
# es对外提供的http端口,默认 9201
http.port: 9201
# TCP的默认监听端口,默认 9301
transport.tcp.port: 9301
# es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["192.168.211.130:9300", "192.168.211.130:9301","192.168.211.130:9302"]
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5
# es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["192.168.211.130:9300", "192.168.211.130:9301","192.168.211.130:9302"]
# 是否支持跨域,是:true,在使用head插件时需要此配置
http.cors.enabled: true
# “*” 表示支持所有域名
http.cors.allow-origin: "*"
#监控堆栈
xpack.monitoring.collection.enabled: true

 vi  /usr/local/elasticsearch/config/warm.yml

# 设置集群名称,集群内所有节点的名称必须一致。
cluster.name: es-cluster
# 设置节点名称,集群内节点名称必须唯一。
node.name: node-warm
# 表示该节点会不会作为主节点,true表示会;false表示不会
node.master: true
# 当前节点是否用于存储数据,是:true、否:false
node.data: true
# 索引数据存放的位置
path.data: /usr/share/elasticsearch/data_warm
# 日志文件存放的位置
path.logs: /usr/share/elasticsearch/logs_warm
# 需求锁住物理内存,是:true、否:false
bootstrap.memory_lock: false
# 监听地址,用于访问该es
network.host: 192.168.211.130
# es对外提供的http端口,默认 9202
http.port: 9202
# TCP的默认监听端口,默认 9302
transport.tcp.port: 9302
# es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["192.168.211.130:9300", "192.168.211.130:9301","192.168.211.130:9302"]
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5
# es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["192.168.211.130:9300", "192.168.211.130:9301","192.168.211.130:9302"]
# 是否支持跨域,是:true,在使用head插件时需要此配置
http.cors.enabled: true
# “*” 表示支持所有域名
http.cors.allow-origin: "*"
#监控堆栈
xpack.monitoring.collection.enabled: true

设置成功后,需要创建索引数据存放data 和日志文件存放logs的目录,命令如下:

mkdir  -p  /usr/share/elasticsearch/data_master
mkdir  -p   /usr/share/elasticsearch/logs_master

mkdir  -p  /usr/share/elasticsearch/data_hot
mkdir  -p   /usr/share/elasticsearch/logs_hot

mkdir  -p  /usr/share/elasticsearch/data_cold
mkdir  -p   /usr/share/elasticsearch/logs_cold

启动elasticsearch,命令如下:

docker run  -d  --network=host --privileged=true  \
-e ES_JAVA_OPTS="-Xms1024m -Xmx1024m"  \
-e TAKE_FILE_OWNERSHIP=true --name  master \
-v /usr/local/elasticsearch/config/master.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /usr/local/elasticsearch/data:/usr/share/elasticsearch/data \
-v /usr/local/elasticsearch/logs:/usr/share/elasticsearch/logs \
-v /usr/local/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
docker.elastic.co/elasticsearch/elasticsearch:7.15.2

docker run  -d  --network=host --privileged=true  \
-e ES_JAVA_OPTS="-Xms1024m -Xmx1024m"  \
-e TAKE_FILE_OWNERSHIP=true --name  hot \
-v /usr/local/elasticsearch/config/hot.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /usr/local/elasticsearch/data:/usr/share/elasticsearch/data \
-v /usr/local/elasticsearch/logs:/usr/share/elasticsearch/logs \
-v /usr/local/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
docker.elastic.co/elasticsearch/elasticsearch:7.15.2

docker run  -d  --network=host --privileged=true  \
-e ES_JAVA_OPTS="-Xms1024m -Xmx1024m"  \
-e TAKE_FILE_OWNERSHIP=true --name  cold \
-v /usr/local/elasticsearch/config/cold.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /usr/local/elasticsearch/data:/usr/share/elasticsearch/data \
-v /usr/local/elasticsearch/logs:/usr/share/elasticsearch/logs \
-v /usr/local/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
docker.elastic.co/elasticsearch/elasticsearch:7.15.2

打开浏览器输入:  http://192.168.211.130:9200

或在终端输入:curl 192.168.211.130:9200

如出现以下集群信息,即安装成功,然后再安装kibana插件

Dockerfile中添加restart dockerfile中添加ko_centos

备注:

当docker重启不成功需要再次重启的时候,需要把数据和日志全部删除,删除后再重启容器

4.拉取kibana镜像:docker pull docker.elastic.co/kibana/kibana:7.15.2

         4.1 创建目录

mkdir -p /usr/local/kibana/data && mkdir -p /usr/local/kibana/config && mkdir -p /usr/local/kibana/plugins        

        4.2修改配置文件

vim /usr/local/kibana/config/kibana.yml

server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://192.168.211.130:9200","http://192.168.211.130:9201","http://192.168.211.130:9202", ]
xpack.monitoring.ui.container.elasticsearch.enabled: true

        4.3启动kibana 命令如下:

       docker run --name kibana -v /usr/local/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml -p 5601:5601 -d docker.elastic.co/kibana/kibana:7.15.2

 打开浏览器输入:  http://192.168.211.130:5601,如出现以下信息,则表示kibana安装成功

Dockerfile中添加restart dockerfile中添加ko_linux_02

如kiibana出现以下报错  :Kibana server is not ready yet

方案:

1、检查防火墙是否关闭

2、如防火墙关闭,重启docker应用

3、重启docker应用无效果后,删除并重新设置kibana.yml文件,再重启kibana容器

如出现一下报错:

docker: Error response from daemon: driver failed programming external connectivity on endpoint kibana (24eb2ccb5d07701a6ea156115995e0a8214b39eb1cccb98d0e8f5399875633d4):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 5602 -j DNAT --to-destination 172.17.0.2:5602 ! -i docker0: iptables: No chain/target/match by that name.
 (exit status 1)).
 

重启一下docker 即可,重启命令:systemctl restart docker

建议安装的时候,把防火墙给关闭

关闭命令(仅限本次关闭,下次重启机器后防火墙还是会生效):systemctl  stop  firewalld

开机自启动关闭命令:systemctl  disable   firewalld

开机自启动docker命令:systemctl  enable  docker