Docker 搭建一个Elasticsearch 7.5.1集群+kibana 7.5.1

vtnews 2020-02-14

1.docker安装elasticsearch 7.5.1
  • 拉取镜像

    docker pull elasticsearch:7.5.1
  • 创建网络

    如果需要安装kibana等其他,需要创建一个网络,名字任意取,让他们在同一个网络,使得es和kibana通信

    docker network create esnet(这个名字可以自定义,但是注意启动kibana是名字保持一致)
  • 创建数据卷

    此处为了docker容器删除或者其他异常情况,将ES的重要数据挂载到宿主机

    # 查看当前数据局列表
    docker volume ls
    # 创建数据卷
    docker volume create es-1(名字自拟)
    # 查看数据卷信息
    docker volume inspect es-1

    对应的ES节点挂载到对应的数据卷

  • 将数据卷在宿主机的文件授权

    通过上面查看数据卷信息命令可以看到数据卷具体在宿主的位置
    一般在/var/lib/docker/volumes下
    授权命令:chmod 777 文件夹

    这个操作主要是后面启动ES时需要进行写入操作

  • 启动ES容器

    本次搭建一个伪集群

    # 启动第一个
    docker run --name es-1 -d -p 9200:9200 -p 9300:9300 --network esnet --mount type=bind,src=/var/lib/docker/volumes/es-1/_data,dst=/usr/share/elasticsearch/data 2bd69c322e98
    # 启动第二个
    docker run --name es-2 -d -p 9201:9201 -p 9301:9301 --network esnet --mount type=bind,src=/var/lib/docker/volumes/es-2/_data,dst=/usr/share/elasticsearch/data 2bd69c322e98
    #启动第三个
    docker run --name es-3 -d -p 9202:9202 -p 9302:9302 --network esnet --mount type=bind,src=/var/lib/docker/volumes/es-3/_data,dst=/usr/share/elasticsearch/data 2bd69c322e98

    在此处启动时一般会出现如下错误:

    ERROR: [2] bootstrap checks failed
    [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
    [2]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured

    第一个问题可以通过如下命令解决

    sysctl -w vm.max_map_count=262144

    第二个问题则需要通过配置ES的配置文件,当然也可以通过参数输入的方式(-e "")

    但亲测时这样创建的集群clusteruuid将会是"_na",这样节点接不能互通

    ES的配置文件路径:/usr/share/elasticsearch/config

    #集群名称
    cluster.name: my
    #节点名称
    node.name: node-1
    #是不是有资格主节点
    node.master: true
    #是否存储数据
    node.data: true
    #最?集群节点数
    node.max_local_storage_nodes: 3
    #?关地址
    network.host: 0.0.0.0
    # 设置其它结点和该结点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址
    # 如果是docker安装节点的IP将会是配置的IP而不是docker网管ip
    network.publish_host: 192.168.172.128
    #端?
    http.port: 9200
    #内部节点之间沟通端?
    transport.tcp.port: 9300
    #es7.x 之后新增的配置,写?候选主节点的设备地址,在开启服务后可以被选为主节点
    discovery.seed_hosts: ["192.168.172.128:9300","192.168.172.128:9301","192.168.172.128:9302"]
    #es7.x 之后新增的配置,初始化?个新的集群时需要此配置来选举master
    cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
    #数据和存储路径
    path.data: /usr/share/elasticsearch/data
    path.logs: /usr/share/elasticsearch/logs
    
    # 解决跨域问题
    http.cors.enabled: true
    http.cors.allow-origin: "*"
  • 检验是否安装成功

    http://192.168.172.128:9200/_cat/nodes
    
    192.168.172.128 29 46 4 0.01 0.12 0.34 dilm - node-3
    192.168.172.128 20 46 3 0.01 0.12 0.34 dilm - node-1
    192.168.172.128 21 46 3 0.01 0.12 0.34 dilm * node-2
    
    带*的节点就是master

2.docker安装kibana

  • 拉取镜像

    docker pull kibana:7.5.1(注意版本)
  • 由于前面已经创建过网络,启动kibana

    docker run -d --name kibana --net esnet -p 5601:5601 2d043e33afa4
  • 安装好kibana后直接通过下列方式访问会抛出错误

    curl http://localhost:5601
  • 错误如下

    Kibana server is not ready yet
  • 修改kibana配置文件kibana.yml

    配置文件路径:/usr/share/kibana/config

    #
    # ** THIS IS AN AUTO-GENERATED FILE **
    #
    
    # Default Kibana configuration for docker target
    server.name: kibana
    server.host: "0"
    elasticsearch.hosts: [ "http://192.168.172.128:9200","http://192.168.172.128:9201","http://192.168.172.128:9202" ]
    xpack.monitoring.ui.container.elasticsearch.enabled: true

3.kibana客户端查看ES集群

http://192.168.172.128:5601/

进行查看

选择红框选项,因为上面的选项需要配置一些私密钥之类的

4.补充知识

集体的docker容器操作可以查看本人的另一篇博文:<https://blog.51cto.com/9844951/2469349&gt;

相关推荐