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
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