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
posted @ 2023-08-09 00:05  YangDanMua  阅读(106)  评论(0编辑  收藏  举报