Docker方式搭建ELK集群 – 记忆角落

Docker方式搭建ELK集群

/ 0评 / 0

Docker方式搭建ELK集群

节点功能 内网 ip 地址
es01,kibana 10.228.27.11
es02,logstash 10.228.27.14
es03 10.228.27.19

1. 部署 Elasticsearch 集群

安装物理环境如下:

主机:3台 服务器

es 节点名称 内网 ip 地址
es01 10.228.27.11
es02 10.228.27.14
es03 10.228.27.19

网络:局域网部署, 三台服务器直接可以互相访问,无防火墙限制

版本:ELK 三个软件版本都是 7.16.2 **,操作系统版本 **CentOS Linux release 7.5.1804

1.1 创建文件夹和配置文件

三台机器都需要创建:
mkdir /data/elasticsearch_data/config
mkdir /data/elasticsearch_data/data
mkdir /data/elasticsearch_data/plugins
chmod -R 777 /data/elasticsearch_data/
10.228.27.11-elasticsearch.yml 内容如下:
cluster.name: es-docker-cluster
node.name: es01
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
network.publish_host: 10.228.27.11
discovery.seed_hosts: ["10.228.27.11","10.228.27.14","10.228.27.19"]
cluster.initial_master_nodes: ["10.228.27.11","10.228.27.14","10.228.27.19"]
10.228.27.14-elasticsearch.yml 内容如下:
cluster.name: es-docker-cluster
node.name: es02
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
network.publish_host: 10.228.27.14
discovery.seed_hosts: ["10.228.27.11","10.228.27.14","10.228.27.19"]
cluster.initial_master_nodes: ["10.228.27.11","10.228.27.14","10.228.27.19"]
10.228.27.19-elasticsearch.yml 内容如下:
cluster.name: es-docker-cluster
node.name: es03
network.host: 0.0.0.0 
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
network.publish_host: 10.228.27.19
discovery.seed_hosts: ["10.228.27.11","10.228.27.14","10.228.27.19"]
cluster.initial_master_nodes: ["10.228.27.11","10.228.27.14","10.228.27.19"]

上面yml文件中的每一个属性含义如下:

配置项 说明
cluster.name 配置的集群名称,默认是elasticsearch A node can only join a cluster when it shares its cluster.name
node.name 集群中这台es节点的名称
network.host 用来同时设置 network.bind_host和 network.publish_host 两个参数 There are many network settings but usually all you need to configure is network.host
http.port restful http 访问端口
transport.tcp.port tcp 访问端口
http.cors.enabled 是否支持跨域
http.cors.allow-origin 支持跨域访问的方式
node.master 指定该节点是否有资格被选举成为node 默认为true
node.data 指定该节点是否存储索引数据 默认为true
discovery.seed_hosts 要与哪些可访问的节点组成集群, 原来老的配置名称为 discovery.zen.ping.unicast.hosts 已经过时了
cluster.initial_master_nodes 集群初始化启动时,指明哪些节点 (可以是节点ip或节点名称) 可以参与主节点选举,首次成功形成群集后,从每个节点的配置中删除 cluster.initial_master_nodes 设置。重新启动群集或向现有群集添加新节点时,请勿使用此设置。 原来老的配置名称为 discovery.zen.minimum_master_nodes 已经过时了
network.publish_host 对外ip

关于initial_master_nodes 和 seed_hosts 等其他集群参数可查看这里

1.2 检测Linux 内核参数文件 /etc/sysctl.conf

修改Linux 内核参数文件 /etc/sysctl.conf 里面增加一行 vm.max_map_count=262144然后 sysctl -p 生效。

1.3 创建容器

10.228.27.11运行:
docker run --restart=always --network=host \
-d -p 9200:9200 -p 9300:9300 \
-e ES_JAVA_OPTS="-Xms10240m -Xmx10240m" \
-e "discovery.type=zen" \
-v /data/elasticsearch_data/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /data/elasticsearch_data/data:/usr/share/elasticsearch/data \
-v /data/elasticsearch_data/plugins:/usr/share/elasticsearch/plugins \
--name es01 elasticsearch:7.16.2 
10.228.27.14运行:
docker run --restart=always --network=host \
-d -p 9200:9200 -p 9300:9300 \
-e ES_JAVA_OPTS="-Xms10240m -Xmx10240m" \
-e "discovery.type=zen" \
-v /data/elasticsearch_data/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /data/elasticsearch_data/data:/usr/share/elasticsearch/data \
-v /data/elasticsearch_data/plugins:/usr/share/elasticsearch/plugins \
--name es02 elasticsearch:7.16.2
10.228.27.19运行:
docker run --restart=always --network=host \
-d -p 9200:9200 -p 9300:9300 \
-e ES_JAVA_OPTS="-Xms10240m -Xmx10240m" \
-e "discovery.type=zen" \
-v /data/elasticsearch_data/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /data/elasticsearch_data/data:/usr/share/elasticsearch/data \
-v /data/elasticsearch_data/plugins:/usr/share/elasticsearch/plugins \
--name es03 elasticsearch:7.16.2 

任意一个es节点上运行查看集群情况: curl http://10.228.27.11:9200/_cat/nodes

image-20220107160905565

2. 部署 Kibana

这里就没有集群,kibana 只作为一个可视化的访问平台,目前随便选择一台主机部署一下即可。如果非要集群,这边可以多个呗.然后再nginx负载均衡

2.1 创建文件夹和配置文件

10.228.27.11上创建目录 /data/elasticsearch_data/kibana/config/kibana.yml文件

mkdir -p /data/elasticsearch_data/kibana/config/
chmod 777 -R kibana

kibana.yml文件:

server.name: "kibana"
#server.basePath: "/kibana"
#server.rewriteBasePath: true
server.host: "10.228.27.11"
elasticsearch.hosts: ["http://10.228.27.11:9200","http://10.228.27.14:9200","http://10.228.27.19:9200"]
monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: "zh-CN"

I18N_LOCALE=zh-CN":这是设置中文

2.2 创建容器

docker run -d -p 5601:5601 --name kibana --network=host \
-v /data/elasticsearch_data/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \
 kibana:7.16.2

访问 http://10.228.27.11:5601 会进入 Kibana 控制台。

3. 部署 Logstash

在任意一台主机上部署 Logstash程序

3.1 创建文件夹和配置文件

创建 /data/elasticsearch_data/logstash/config 目录, 下面创建两个文件logstash.yml和logstash.conf

logstash.yml配置文件放在宿主机 /data/elasticsearch_data/logstash 目录下,内容如下:

path.config: /usr/share/logstash/config/*.conf
path.logs: /var/log/logstash

logstash.conf文件放在宿主机 /data/elasticsearch_data/logstash/config 目录下,内容如下:

input {
    tcp {
        mode => "server"
        port => 5055
        codec => "json_lines"
    }
}

output {
  elasticsearch { 
        hosts => ["http://10.228.27.11:9200","http://10.228.27.14:9200","http://10.228.27.19:9200"]
        index => "glj-%{+YYYY.MM.dd}"       
  }
}

3.2 创建容器

docker run -d --restart=always --network=host \
 --log-driver json-file \
 --log-opt max-size=100m \
 --log-opt max-file=4 \
 -p 5055:5055 --name logsh \
 -v /data/elasticsearch_data/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml \
 -v /data/elasticsearch_data/logstash/:/usr/share/logstash/config/ logstash:7.16.2

发表评论

您的电子邮箱地址不会被公开。