docker elasticsearch 安装
三个节点
node1 192.168.70.120 registry、es-master
node2 192.168.70.121
node3 192.168.70.122
es 和 kibana 版本:7.12.1
https://zhuanlan.zhihu.com/p/439001624
https://blog.csdn.net/qq_34125999/article/details/116267609
三节点,创建数据、配置、日志、插件目录
mkdir -p /home/docker/es/data && \
mkdir -p /home/docker/es/config && \
mkdir -p /home/docker/es/logs && \
mkdir -p /home/docker/es/plugins
node1 配置文件
cd /home/docker/es/config/
vi es.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.70.120 会报错,绑定不了
network.host: 0.0.0.0
# 设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址(本机ip)
# 这个一般必须设置,否则 es 间获取到的集群间ip为docker内网地址,则访问不了
network.publish_host: 192.168.70.120
# 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.70.120:9300", "192.168.70.121:9300","192.168.70.122:9300"]
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5
# es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["192.168.70.120:9300", "192.168.70.121:9300","192.168.70.122:9300"]
# 是否支持跨域,是:true,在使用head插件时需要此配置
http.cors.enabled: true
# “*” 表示支持所有域名
http.cors.allow-origin: "*"
node2 配置文件
# 设置集群名称,集群内所有节点的名称必须一致。
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: 0.0.0.0
# 设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址(本机ip)
network.publish_host: 192.168.70.121
# 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.70.120:9300", "192.168.70.121:9300","192.168.70.122:9300"]
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5
# es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["192.168.70.120:9300", "192.168.70.121:9300","192.168.70.122:9300"]
# 是否支持跨域,是:true,在使用head插件时需要此配置
http.cors.enabled: true
# “*” 表示支持所有域名
http.cors.allow-origin: "*"
node3 配置文件
# 设置集群名称,集群内所有节点的名称必须一致。
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: 0.0.0.0
# 设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址(本机ip)
network.publish_host: 192.168.70.122
# 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.70.120:9300", "192.168.70.121:9300","192.168.70.122:9300"]
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5
# es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["192.168.70.120:9300", "192.168.70.121:9300","192.168.70.122:9300"]
# 是否支持跨域,是:true,在使用head插件时需要此配置
http.cors.enabled: true
# “*” 表示支持所有域名
http.cors.allow-origin: "*"
docker-compose.yml
version: '3'
services:
es01:
image: 192.168.70.120:5000/elasticsearch:7.12.1
container_name: es
restart: always
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- /home/docker/es/data:/usr/share/elasticsearch/data
- /home/docker/es/config/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- /home/docker/es/plugins:/usr/share/elasticsearch/plugins
- /home/docker/es/logs:/usr/share/elasticsearch/logs
ports:
- 9200:9200
- 9300:9300
networks:
- vm_net
networks:
vm_net:
external: true
node2、3下载镜像
先处理http的问题
sudo vi /etc/docker/daemon.json
内容
{
"insecure-registries": ["192.168.70.120:5000"]
}
拉取镜像
docker pull 192.168.70.120:5000/elasticsearch:7.12.1
创建网络
docker network create vm_net
处理下权限(关于docker的权限问题)
chmod -R 777 ./
环境处理,否则启动可能报错如
ERROR: [1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.
bootstrap check failure [1] of [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
ERROR: Elasticsearch did not exit normally - check the logs at /usr/share/elasticsearch/logs/es-cluster.log
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
#生效
sudo sysctl -p
kibana 安装
kibana.yml
server.name: kibana
# kibana的主机地址 0.0.0.0可表示监听所有IP
server.host: "0.0.0.0"
# kibana访问es的URL
elasticsearch.hosts: [ "http://192.168.70.120:9200", "http://192.168.70.121:9200", "http://192.168.70.122:9200" ]
elasticsearch.username: 'kibana'
elasticsearch.password: '123456'
# 显示登陆页面
xpack.monitoring.ui.container.elasticsearch.enabled: true
# 语言
#i18n.locale: "zh-CN"
docker-compose.yml
version: '3'
services:
kibana:
image: 192.168.70.120:5000/kibana:7.12.1
restart: always
container_name: kibana
volumes:
- /home/docker/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml
ports:
- '5601:5601' #java、集群通信端口
privileged: true #环境变量
networks:
- vm_net
networks:
vm_net:
external: true
安装 ik 分词器
ik 分词器版本应该和 es 版本是一致的,解压到 plugin 目录,重命名为 ik,重启即可
需要集群都安装才能使用
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip
查看已有插件
http://192.168.70.120:9200/_cat/plugins
node1 analysis-ik 7.12.1
node3 analysis-ik 7.12.1
node2 analysis-ik 7.12.1
POST http://192.168.70.120:9200/_analyze
{
// "analyzer": "standard",
// "tokenizer": "ik_smart",
"tokenizer": "ik_max_word",
"text": "我爱中国"
}
安装 elasticsearch-head
版本使用这个:mobz/elasticsearch-head:5-alpine
5的我有过安装,一直启动失败
version: '3'
services:
es-head:
image: 192.168.70.120:5000/mobz/elasticsearch-head:5-alpine
container_name: es-head
restart: always
ports:
- 9100:9100
networks:
- vm_net
networks:
vm_net:
external: true
es-head 创建索引 406
复制问文件到本地
docker cp es-head:/usr/src/app/_site /home/docker/es-head/_site
修改 vendor.js
将第6886行
contentType: "application/x-www-form-urlencoded",
改为
contentType: "application/json;charset=UTF-8",
将第7574行
var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
改为
var inspectData = s.contentType === "application/json;charset=UTF-8" &&
docker-compose.yml
最开始把整个_site 文件夹映射了,结果还是报错,最后改为映射文件,但是报错应该是浏览器缓存原因,新开就不报错了
version: '3'
services:
es-head:
image: 192.168.70.120:5000/mobz/elasticsearch-head:5-alpine
container_name: es-head
restart: always
ports:
- 9100:9100
volumes:
- /home/docker/es-head/_site/vendor.js:/usr/src/app/_site/vendor.js
networks:
- vm_net
networks:
vm_net:
external: true