1 环境准备
#节点
192.168.38.50 docker node1
192.168.38.51 docker node2
192.168.38.52 docker node3
192.168.38.53 docker kibana
2 前置环境
描述: 3台服务都要修改。
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 nofile 65536
#可打开的文件描述符的最大数(硬限制)
* hard nofile 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 搭建集群
3.1 拉取镜像
#三节点
docker pull elasticsearch:7.6.1
3.2 创建目录
#三节点,创建数据、配置、日志、插件目录
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.3 node1 配置文件
cd /usr/local/elasticsearch/config
vi elasticsearch.yml
# 设置集群名称,集群内所有节点的名称必须一致。
cluster.name: es-cluster
# 设置节点名称,集群内节点名称必须唯一。
node.name: node1
# 表示该节点会不会作为主节点,true表示会;false表示不会
node.master: true
# 当前节点是否用于存储数据,是:true、否:false
node.data: true
# 索引数据存放的位置
path.data: /usr/share/elasticsearch/data
# 日志文件存放的位置
path.logs: /usr/share/elasticsearch/logs
# 需求锁住物理内存,是:true、否:false
bootstrap.memory_lock: false
# 监听地址,用于访问该es
network.host: 192.168.38.50
# es对外提供的http端口,默认 9200
http.port: 9200
# TCP的默认监听端口,默认 9300
transport.tcp.port: 9300
# 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)
discovery.zen.minimum_master_nodes: 1
# es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["192.168.38.50:9300", "192.168.38.51:9300","192.168.38.52:9300"]
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5
# es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["192.168.38.50:9300", "192.168.38.51:9300","192.168.38.52:9300"]
# 是否支持跨域,是:true,在使用head插件时需要此配置
http.cors.enabled: true
# “*” 表示支持所有域名
http.cors.allow-origin: "*"
3.4 node2 配置文件
cd /usr/local/elasticsearch/config
vi elasticsearch.yml
# 设置集群名称,集群内所有节点的名称必须一致。
cluster.name: es-cluster
# 设置节点名称,集群内节点名称必须唯一。
node.name: node2
# 表示该节点会不会作为主节点,true表示会;false表示不会
node.master: true
# 当前节点是否用于存储数据,是:true、否:false
node.data: true
# 索引数据存放的位置
path.data: /usr/share/elasticsearch/data
# 日志文件存放的位置
path.logs: /usr/share/elasticsearch/logs
# 需求锁住物理内存,是:true、否:false
bootstrap.memory_lock: false
# 监听地址,用于访问该es
network.host: 192.168.38.51
# es对外提供的http端口,默认 9200
http.port: 9200
# TCP的默认监听端口,默认 9300
transport.tcp.port: 9300
# 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)
discovery.zen.minimum_master_nodes: 1
# es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["192.168.38.50:9300", "192.168.38.51:9300","192.168.38.52:9300"]
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5
# es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["192.168.38.50:9300", "192.168.38.51:9300","192.168.38.52:9300"]
# 是否支持跨域,是:true,在使用head插件时需要此配置
http.cors.enabled: true
# “*” 表示支持所有域名
http.cors.allow-origin: "*"
3.5 node3 配置文件
cd /usr/local/elasticsearch/config
vi elasticsearch.yml
# 设置集群名称,集群内所有节点的名称必须一致。
cluster.name: es-cluster
# 设置节点名称,集群内节点名称必须唯一。
node.name: node3
# 表示该节点会不会作为主节点,true表示会;false表示不会
node.master: true
# 当前节点是否用于存储数据,是:true、否:false
node.data: true
# 索引数据存放的位置
path.data: /usr/share/elasticsearch/data
# 日志文件存放的位置
path.logs: /usr/share/elasticsearch/logs
# 需求锁住物理内存,是:true、否:false
bootstrap.memory_lock: false
# 监听地址,用于访问该es
network.host: 192.168.38.52
# es对外提供的http端口,默认 9200
http.port: 9200
# TCP的默认监听端口,默认 9300
transport.tcp.port: 9300
# 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)
discovery.zen.minimum_master_nodes: 1
# es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["192.168.38.50:9300", "192.168.38.51:9300","192.168.38.52:9300"]
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5
# es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["192.168.38.50:9300", "192.168.38.51:9300","192.168.38.52:9300"]
# 是否支持跨域,是:true,在使用head插件时需要此配置
http.cors.enabled: true
# “*” 表示支持所有域名
http.cors.allow-origin: "*"
3.6 启动
#三台节点
docker run -d --network=host --privileged=true \
-e ES_JAVA_OPTS="-Xms1024m -Xmx1024m" \
-e TAKE_FILE_OWNERSHIP=true --name es \
-v /usr/local/elasticsearch/config/elasticsearch.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 \
elasticsearch:7.6.1
3.7 head 插件
docker run -d --name es-head -p 9100:9100 mobz/elasticsearch-head:5
3.8 Kibana
描述: 192.168.38.53节点搭建kibana连接ES集群。
#拉取镜像
docker pull kibana:7.6.1
#创建配置文件
mkdir -p /usr/local/kibana/config
vi kibana.yml
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://192.168.38.50:9200","http://192.168.38.51:9200","http://192.168.38.52:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
#启动命令
docker run --name kibana -v /usr/local/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml -p 5601:5601 -d kibana:7.6.1